summaryrefslogtreecommitdiff
path: root/hw/dmx
diff options
context:
space:
mode:
Diffstat (limited to 'hw/dmx')
-rw-r--r--hw/dmx/Makefile.am89
-rw-r--r--hw/dmx/Makefile.in1063
-rw-r--r--hw/dmx/config/Canvas.c159
-rw-r--r--hw/dmx/config/Canvas.h55
-rw-r--r--hw/dmx/config/CanvasP.h65
-rw-r--r--hw/dmx/config/Makefile.am70
-rw-r--r--hw/dmx/config/Makefile.in1071
-rw-r--r--hw/dmx/config/TODO7
-rw-r--r--hw/dmx/config/dmxcompat.c236
-rw-r--r--hw/dmx/config/dmxcompat.h44
-rw-r--r--hw/dmx/config/dmxconfig.c497
-rw-r--r--hw/dmx/config/dmxconfig.h61
-rw-r--r--hw/dmx/config/dmxparse.c607
-rw-r--r--hw/dmx/config/dmxparse.h297
-rw-r--r--hw/dmx/config/dmxprint.c455
-rw-r--r--hw/dmx/config/dmxprint.h43
-rw-r--r--hw/dmx/config/dmxtodmx.c49
-rw-r--r--hw/dmx/config/man/Makefile.am2
-rw-r--r--hw/dmx/config/man/Makefile.in698
-rw-r--r--hw/dmx/config/man/dmxtodmx.man41
-rw-r--r--hw/dmx/config/man/vdltodmx.man95
-rw-r--r--hw/dmx/config/man/xdmxconfig.man63
-rw-r--r--hw/dmx/config/parser.c1995
-rw-r--r--hw/dmx/config/parser.h104
-rw-r--r--hw/dmx/config/parser.y226
-rw-r--r--hw/dmx/config/scanner.c2028
-rw-r--r--hw/dmx/config/scanner.l184
-rw-r--r--hw/dmx/config/test-a.in1
-rw-r--r--hw/dmx/config/test-a.out2
-rw-r--r--hw/dmx/config/test-b.in1
-rw-r--r--hw/dmx/config/test-b.out1
-rw-r--r--hw/dmx/config/test-c.in1
-rw-r--r--hw/dmx/config/test-c.out2
-rw-r--r--hw/dmx/config/test-d.in1
-rw-r--r--hw/dmx/config/test-d.out2
-rw-r--r--hw/dmx/config/test-e.in1
-rw-r--r--hw/dmx/config/test-e.out2
-rw-r--r--hw/dmx/config/test-f.in2
-rw-r--r--hw/dmx/config/test-f.outbin0 -> 69 bytes
-rw-r--r--hw/dmx/config/test-g.in4
-rw-r--r--hw/dmx/config/test-g.out4
-rw-r--r--hw/dmx/config/test-h.in7
-rw-r--r--hw/dmx/config/test-h.out7
-rw-r--r--hw/dmx/config/test-i.in3
-rw-r--r--hw/dmx/config/test-i.out3
-rw-r--r--hw/dmx/config/test-j.in13
-rw-r--r--hw/dmx/config/test-j.out11
-rw-r--r--hw/dmx/config/test-k.in3
-rw-r--r--hw/dmx/config/test-k.out3
-rw-r--r--hw/dmx/config/test-l.in12
-rw-r--r--hw/dmx/config/test-l.out12
-rw-r--r--hw/dmx/config/vdltodmx.c57
-rw-r--r--hw/dmx/config/xdmxconfig.c1191
-rw-r--r--hw/dmx/dmx-config.h75
-rw-r--r--hw/dmx/dmx.c1097
-rw-r--r--hw/dmx/dmx.h390
-rw-r--r--hw/dmx/dmx_glxvisuals.c601
-rw-r--r--hw/dmx/dmx_glxvisuals.h59
-rw-r--r--hw/dmx/dmxcb.c222
-rw-r--r--hw/dmx/dmxcb.h53
-rw-r--r--hw/dmx/dmxclient.h138
-rw-r--r--hw/dmx/dmxcmap.c212
-rw-r--r--hw/dmx/dmxcmap.h66
-rw-r--r--hw/dmx/dmxcursor.c989
-rw-r--r--hw/dmx/dmxcursor.h72
-rw-r--r--hw/dmx/dmxdpms.c213
-rw-r--r--hw/dmx/dmxdpms.h42
-rw-r--r--hw/dmx/dmxextension.c1620
-rw-r--r--hw/dmx/dmxextension.h118
-rw-r--r--hw/dmx/dmxfont.c551
-rw-r--r--hw/dmx/dmxfont.h59
-rw-r--r--hw/dmx/dmxgc.c416
-rw-r--r--hw/dmx/dmxgc.h86
-rw-r--r--hw/dmx/dmxgcops.c605
-rw-r--r--hw/dmx/dmxgcops.h95
-rw-r--r--hw/dmx/dmxinit.c1028
-rw-r--r--hw/dmx/dmxinit.h50
-rw-r--r--hw/dmx/dmxinput.c119
-rw-r--r--hw/dmx/dmxinput.h160
-rw-r--r--hw/dmx/dmxlog.c346
-rw-r--r--hw/dmx/dmxlog.h76
-rw-r--r--hw/dmx/dmxpict.c1324
-rw-r--r--hw/dmx/dmxpict.h130
-rw-r--r--hw/dmx/dmxpixmap.c251
-rw-r--r--hw/dmx/dmxpixmap.h64
-rw-r--r--hw/dmx/dmxprop.c347
-rw-r--r--hw/dmx/dmxprop.h46
-rw-r--r--hw/dmx/dmxscrinit.c522
-rw-r--r--hw/dmx/dmxscrinit.h48
-rw-r--r--hw/dmx/dmxshadow.c71
-rw-r--r--hw/dmx/dmxshadow.h46
-rw-r--r--hw/dmx/dmxstat.c221
-rw-r--r--hw/dmx/dmxstat.h55
-rw-r--r--hw/dmx/dmxsync.c193
-rw-r--r--hw/dmx/dmxsync.h43
-rw-r--r--hw/dmx/dmxvisual.c140
-rw-r--r--hw/dmx/dmxvisual.h47
-rw-r--r--hw/dmx/dmxwindow.c1017
-rw-r--r--hw/dmx/dmxwindow.h135
-rw-r--r--hw/dmx/doc/DMXSpec-v1.txt458
-rw-r--r--hw/dmx/doc/DMXSpec.txt875
-rw-r--r--hw/dmx/doc/Makefile.am403
-rw-r--r--hw/dmx/doc/Makefile.in1034
-rw-r--r--hw/dmx/doc/dmx.txt2593
-rw-r--r--hw/dmx/doc/dmx.xml3430
-rw-r--r--hw/dmx/doc/doxygen.conf1053
-rw-r--r--hw/dmx/doc/doxygen.conf.in1053
-rw-r--r--hw/dmx/doc/doxygen.css49
-rw-r--r--hw/dmx/doc/doxygen.foot12
-rw-r--r--hw/dmx/doc/doxygen.head8
-rw-r--r--hw/dmx/doc/html/ChkNotMaskEv_8c.html128
-rw-r--r--hw/dmx/doc/html/ChkNotMaskEv_8h.html109
-rw-r--r--hw/dmx/doc/html/ChkNotMaskEv_8h_source.html95
-rw-r--r--hw/dmx/doc/html/annotated.html99
-rw-r--r--hw/dmx/doc/html/bc_s.pngbin0 -> 677 bytes
-rw-r--r--hw/dmx/doc/html/classes.html64
-rw-r--r--hw/dmx/doc/html/closed.pngbin0 -> 126 bytes
-rw-r--r--hw/dmx/doc/html/dmx-config_8h.html167
-rw-r--r--hw/dmx/doc/html/dmx-config_8h_source.html128
-rw-r--r--hw/dmx/doc/html/dmx_8c.html1147
-rw-r--r--hw/dmx/doc/html/dmx_8h.html723
-rw-r--r--hw/dmx/doc/html/dmx_8h_source.html360
-rw-r--r--hw/dmx/doc/html/dmx__glxvisuals_8c.html203
-rw-r--r--hw/dmx/doc/html/dmx__glxvisuals_8h.html204
-rw-r--r--hw/dmx/doc/html/dmx__glxvisuals_8h_source.html116
-rw-r--r--hw/dmx/doc/html/dmxarg_8c.html251
-rw-r--r--hw/dmx/doc/html/dmxarg_8h.html246
-rw-r--r--hw/dmx/doc/html/dmxarg_8h_source.html104
-rw-r--r--hw/dmx/doc/html/dmxbackend_8c.html1294
-rw-r--r--hw/dmx/doc/html/dmxbackend_8h.html356
-rw-r--r--hw/dmx/doc/html/dmxbackend_8h_source.html110
-rw-r--r--hw/dmx/doc/html/dmxcb_8c.html203
-rw-r--r--hw/dmx/doc/html/dmxcb_8h.html215
-rw-r--r--hw/dmx/doc/html/dmxcb_8h_source.html105
-rw-r--r--hw/dmx/doc/html/dmxclient_8h.html252
-rw-r--r--hw/dmx/doc/html/dmxclient_8h_source.html192
-rw-r--r--hw/dmx/doc/html/dmxcmap_8c.html270
-rw-r--r--hw/dmx/doc/html/dmxcmap_8h.html341
-rw-r--r--hw/dmx/doc/html/dmxcmap_8h_source.html118
-rw-r--r--hw/dmx/doc/html/dmxcommon_8c.html908
-rw-r--r--hw/dmx/doc/html/dmxcommon_8h.html791
-rw-r--r--hw/dmx/doc/html/dmxcommon_8h_source.html178
-rw-r--r--hw/dmx/doc/html/dmxcompat_8c.html275
-rw-r--r--hw/dmx/doc/html/dmxcompat_8h.html94
-rw-r--r--hw/dmx/doc/html/dmxcompat_8h_source.html96
-rw-r--r--hw/dmx/doc/html/dmxconfig_8c.html883
-rw-r--r--hw/dmx/doc/html/dmxconfig_8h.html432
-rw-r--r--hw/dmx/doc/html/dmxconfig_8h_source.html116
-rw-r--r--hw/dmx/doc/html/dmxconsole_8c.html1560
-rw-r--r--hw/dmx/doc/html/dmxconsole_8h.html444
-rw-r--r--hw/dmx/doc/html/dmxconsole_8h_source.html114
-rw-r--r--hw/dmx/doc/html/dmxcursor_8c.html1515
-rw-r--r--hw/dmx/doc/html/dmxcursor_8h.html512
-rw-r--r--hw/dmx/doc/html/dmxcursor_8h_source.html124
-rw-r--r--hw/dmx/doc/html/dmxdetach_8c.html102
-rw-r--r--hw/dmx/doc/html/dmxdpms_8c.html196
-rw-r--r--hw/dmx/doc/html/dmxdpms_8h.html135
-rw-r--r--hw/dmx/doc/html/dmxdpms_8h_source.html97
-rw-r--r--hw/dmx/doc/html/dmxdummy_8c.html132
-rw-r--r--hw/dmx/doc/html/dmxdummy_8h.html132
-rw-r--r--hw/dmx/doc/html/dmxdummy_8h_source.html98
-rw-r--r--hw/dmx/doc/html/dmxevents_8c.html1187
-rw-r--r--hw/dmx/doc/html/dmxevents_8h.html243
-rw-r--r--hw/dmx/doc/html/dmxevents_8h_source.html101
-rw-r--r--hw/dmx/doc/html/dmxextension_8c.html865
-rw-r--r--hw/dmx/doc/html/dmxextension_8h.html579
-rw-r--r--hw/dmx/doc/html/dmxextension_8h_source.html166
-rw-r--r--hw/dmx/doc/html/dmxfont_8c.html488
-rw-r--r--hw/dmx/doc/html/dmxfont_8h.html305
-rw-r--r--hw/dmx/doc/html/dmxfont_8h_source.html113
-rw-r--r--hw/dmx/doc/html/dmxgc_8c.html466
-rw-r--r--hw/dmx/doc/html/dmxgc_8h.html510
-rw-r--r--hw/dmx/doc/html/dmxgc_8h_source.html139
-rw-r--r--hw/dmx/doc/html/dmxgcops_8c.html1412
-rw-r--r--hw/dmx/doc/html/dmxgcops_8h.html1302
-rw-r--r--hw/dmx/doc/html/dmxgcops_8h_source.html150
-rw-r--r--hw/dmx/doc/html/dmxinit_8c.html900
-rw-r--r--hw/dmx/doc/html/dmxinit_8h.html225
-rw-r--r--hw/dmx/doc/html/dmxinit_8h_source.html105
-rw-r--r--hw/dmx/doc/html/dmxinput_8c.html260
-rw-r--r--hw/dmx/doc/html/dmxinput_8h.html619
-rw-r--r--hw/dmx/doc/html/dmxinput_8h_source.html179
-rw-r--r--hw/dmx/doc/html/dmxinputinit_8c.html1451
-rw-r--r--hw/dmx/doc/html/dmxinputinit_8h.html1122
-rw-r--r--hw/dmx/doc/html/dmxinputinit_8h_source.html291
-rw-r--r--hw/dmx/doc/html/dmxlog_8c.html652
-rw-r--r--hw/dmx/doc/html/dmxlog_8h.html546
-rw-r--r--hw/dmx/doc/html/dmxlog_8h_source.html124
-rw-r--r--hw/dmx/doc/html/dmxmap_8c.html163
-rw-r--r--hw/dmx/doc/html/dmxmap_8h.html161
-rw-r--r--hw/dmx/doc/html/dmxmap_8h_source.html97
-rw-r--r--hw/dmx/doc/html/dmxmotion_8c.html228
-rw-r--r--hw/dmx/doc/html/dmxmotion_8h.html193
-rw-r--r--hw/dmx/doc/html/dmxmotion_8h_source.html104
-rw-r--r--hw/dmx/doc/html/dmxparse_8c.html1394
-rw-r--r--hw/dmx/doc/html/dmxparse_8h.html1934
-rw-r--r--hw/dmx/doc/html/dmxparse_8h_source.html338
-rw-r--r--hw/dmx/doc/html/dmxpict_8c.html1413
-rw-r--r--hw/dmx/doc/html/dmxpict_8h.html1229
-rw-r--r--hw/dmx/doc/html/dmxpict_8h_source.html176
-rw-r--r--hw/dmx/doc/html/dmxpixmap_8c.html239
-rw-r--r--hw/dmx/doc/html/dmxpixmap_8h.html299
-rw-r--r--hw/dmx/doc/html/dmxpixmap_8h_source.html117
-rw-r--r--hw/dmx/doc/html/dmxprint_8c.html741
-rw-r--r--hw/dmx/doc/html/dmxprint_8h.html136
-rw-r--r--hw/dmx/doc/html/dmxprint_8h_source.html98
-rw-r--r--hw/dmx/doc/html/dmxprop_8c.html370
-rw-r--r--hw/dmx/doc/html/dmxprop_8h.html186
-rw-r--r--hw/dmx/doc/html/dmxprop_8h_source.html101
-rw-r--r--hw/dmx/doc/html/dmxscrinit_8c.html415
-rw-r--r--hw/dmx/doc/html/dmxscrinit_8h.html172
-rw-r--r--hw/dmx/doc/html/dmxscrinit_8h_source.html103
-rw-r--r--hw/dmx/doc/html/dmxshadow_8c.html103
-rw-r--r--hw/dmx/doc/html/dmxshadow_8h.html105
-rw-r--r--hw/dmx/doc/html/dmxshadow_8h_source.html101
-rw-r--r--hw/dmx/doc/html/dmxsigio_8c.html398
-rw-r--r--hw/dmx/doc/html/dmxsigio_8h.html214
-rw-r--r--hw/dmx/doc/html/dmxsigio_8h_source.html100
-rw-r--r--hw/dmx/doc/html/dmxstat_8c.html424
-rw-r--r--hw/dmx/doc/html/dmxstat_8h.html323
-rw-r--r--hw/dmx/doc/html/dmxstat_8h_source.html109
-rw-r--r--hw/dmx/doc/html/dmxsync_8c.html341
-rw-r--r--hw/dmx/doc/html/dmxsync_8h.html152
-rw-r--r--hw/dmx/doc/html/dmxsync_8h_source.html98
-rw-r--r--hw/dmx/doc/html/dmxtodmx_8c.html135
-rw-r--r--hw/dmx/doc/html/dmxvisual_8c.html169
-rw-r--r--hw/dmx/doc/html/dmxvisual_8h.html170
-rw-r--r--hw/dmx/doc/html/dmxvisual_8h_source.html102
-rw-r--r--hw/dmx/doc/html/dmxwindow_8c.html887
-rw-r--r--hw/dmx/doc/html/dmxwindow_8h.html949
-rw-r--r--hw/dmx/doc/html/dmxwindow_8h_source.html188
-rw-r--r--hw/dmx/doc/html/dmxxinput_8c.html193
-rw-r--r--hw/dmx/doc/html/doxygen.css49
-rw-r--r--hw/dmx/doc/html/doxygen.pngbin0 -> 3942 bytes
-rw-r--r--hw/dmx/doc/html/files.html155
-rw-r--r--hw/dmx/doc/html/ftv2blank.pngbin0 -> 82 bytes
-rw-r--r--hw/dmx/doc/html/ftv2doc.pngbin0 -> 762 bytes
-rw-r--r--hw/dmx/doc/html/ftv2folderclosed.pngbin0 -> 598 bytes
-rw-r--r--hw/dmx/doc/html/ftv2folderopen.pngbin0 -> 590 bytes
-rw-r--r--hw/dmx/doc/html/ftv2lastnode.pngbin0 -> 82 bytes
-rw-r--r--hw/dmx/doc/html/ftv2link.pngbin0 -> 762 bytes
-rw-r--r--hw/dmx/doc/html/ftv2mlastnode.pngbin0 -> 221 bytes
-rw-r--r--hw/dmx/doc/html/ftv2mnode.pngbin0 -> 221 bytes
-rw-r--r--hw/dmx/doc/html/ftv2node.pngbin0 -> 82 bytes
-rw-r--r--hw/dmx/doc/html/ftv2plastnode.pngbin0 -> 215 bytes
-rw-r--r--hw/dmx/doc/html/ftv2pnode.pngbin0 -> 215 bytes
-rw-r--r--hw/dmx/doc/html/ftv2splitbar.pngbin0 -> 249 bytes
-rw-r--r--hw/dmx/doc/html/ftv2vertline.pngbin0 -> 82 bytes
-rw-r--r--hw/dmx/doc/html/functions.html109
-rw-r--r--hw/dmx/doc/html/functions_0x62.html182
-rw-r--r--hw/dmx/doc/html/functions_0x63.html214
-rw-r--r--hw/dmx/doc/html/functions_0x64.html170
-rw-r--r--hw/dmx/doc/html/functions_0x65.html104
-rw-r--r--hw/dmx/doc/html/functions_0x66.html125
-rw-r--r--hw/dmx/doc/html/functions_0x67.html135
-rw-r--r--hw/dmx/doc/html/functions_0x68.html107
-rw-r--r--hw/dmx/doc/html/functions_0x69.html127
-rw-r--r--hw/dmx/doc/html/functions_0x6b.html131
-rw-r--r--hw/dmx/doc/html/functions_0x6c.html116
-rw-r--r--hw/dmx/doc/html/functions_0x6d.html141
-rw-r--r--hw/dmx/doc/html/functions_0x6e.html150
-rw-r--r--hw/dmx/doc/html/functions_0x6f.html130
-rw-r--r--hw/dmx/doc/html/functions_0x70.html150
-rw-r--r--hw/dmx/doc/html/functions_0x72.html182
-rw-r--r--hw/dmx/doc/html/functions_0x73.html243
-rw-r--r--hw/dmx/doc/html/functions_0x74.html122
-rw-r--r--hw/dmx/doc/html/functions_0x75.html113
-rw-r--r--hw/dmx/doc/html/functions_0x76.html137
-rw-r--r--hw/dmx/doc/html/functions_0x77.html129
-rw-r--r--hw/dmx/doc/html/functions_0x78.html116
-rw-r--r--hw/dmx/doc/html/functions_0x79.html104
-rw-r--r--hw/dmx/doc/html/functions_eval.html78
-rw-r--r--hw/dmx/doc/html/functions_vars.html109
-rw-r--r--hw/dmx/doc/html/functions_vars_0x62.html167
-rw-r--r--hw/dmx/doc/html/functions_vars_0x63.html214
-rw-r--r--hw/dmx/doc/html/functions_vars_0x64.html170
-rw-r--r--hw/dmx/doc/html/functions_vars_0x65.html104
-rw-r--r--hw/dmx/doc/html/functions_vars_0x66.html125
-rw-r--r--hw/dmx/doc/html/functions_vars_0x67.html135
-rw-r--r--hw/dmx/doc/html/functions_vars_0x68.html107
-rw-r--r--hw/dmx/doc/html/functions_vars_0x69.html127
-rw-r--r--hw/dmx/doc/html/functions_vars_0x6b.html131
-rw-r--r--hw/dmx/doc/html/functions_vars_0x6c.html116
-rw-r--r--hw/dmx/doc/html/functions_vars_0x6d.html141
-rw-r--r--hw/dmx/doc/html/functions_vars_0x6e.html150
-rw-r--r--hw/dmx/doc/html/functions_vars_0x6f.html130
-rw-r--r--hw/dmx/doc/html/functions_vars_0x70.html150
-rw-r--r--hw/dmx/doc/html/functions_vars_0x72.html182
-rw-r--r--hw/dmx/doc/html/functions_vars_0x73.html243
-rw-r--r--hw/dmx/doc/html/functions_vars_0x74.html122
-rw-r--r--hw/dmx/doc/html/functions_vars_0x75.html113
-rw-r--r--hw/dmx/doc/html/functions_vars_0x76.html137
-rw-r--r--hw/dmx/doc/html/functions_vars_0x77.html129
-rw-r--r--hw/dmx/doc/html/functions_vars_0x78.html116
-rw-r--r--hw/dmx/doc/html/functions_vars_0x79.html104
-rw-r--r--hw/dmx/doc/html/globals.html125
-rw-r--r--hw/dmx/doc/html/globals_0x61.html122
-rw-r--r--hw/dmx/doc/html/globals_0x62.html116
-rw-r--r--hw/dmx/doc/html/globals_0x63.html149
-rw-r--r--hw/dmx/doc/html/globals_0x64.html3045
-rw-r--r--hw/dmx/doc/html/globals_0x65.html143
-rw-r--r--hw/dmx/doc/html/globals_0x66.html125
-rw-r--r--hw/dmx/doc/html/globals_0x67.html152
-rw-r--r--hw/dmx/doc/html/globals_0x69.html107
-rw-r--r--hw/dmx/doc/html/globals_0x6b.html217
-rw-r--r--hw/dmx/doc/html/globals_0x6c.html161
-rw-r--r--hw/dmx/doc/html/globals_0x6d.html206
-rw-r--r--hw/dmx/doc/html/globals_0x6e.html120
-rw-r--r--hw/dmx/doc/html/globals_0x6f.html141
-rw-r--r--hw/dmx/doc/html/globals_0x70.html241
-rw-r--r--hw/dmx/doc/html/globals_0x71.html98
-rw-r--r--hw/dmx/doc/html/globals_0x72.html106
-rw-r--r--hw/dmx/doc/html/globals_0x73.html169
-rw-r--r--hw/dmx/doc/html/globals_0x74.html102
-rw-r--r--hw/dmx/doc/html/globals_0x75.html150
-rw-r--r--hw/dmx/doc/html/globals_0x76.html104
-rw-r--r--hw/dmx/doc/html/globals_0x78.html99
-rw-r--r--hw/dmx/doc/html/globals_0x79.html114
-rw-r--r--hw/dmx/doc/html/globals_defs.html101
-rw-r--r--hw/dmx/doc/html/globals_defs_0x62.html107
-rw-r--r--hw/dmx/doc/html/globals_defs_0x63.html122
-rw-r--r--hw/dmx/doc/html/globals_defs_0x64.html365
-rw-r--r--hw/dmx/doc/html/globals_defs_0x65.html107
-rw-r--r--hw/dmx/doc/html/globals_defs_0x66.html119
-rw-r--r--hw/dmx/doc/html/globals_defs_0x67.html134
-rw-r--r--hw/dmx/doc/html/globals_defs_0x6c.html149
-rw-r--r--hw/dmx/doc/html/globals_defs_0x6d.html113
-rw-r--r--hw/dmx/doc/html/globals_defs_0x6e.html102
-rw-r--r--hw/dmx/doc/html/globals_defs_0x6f.html98
-rw-r--r--hw/dmx/doc/html/globals_defs_0x70.html94
-rw-r--r--hw/dmx/doc/html/globals_defs_0x72.html94
-rw-r--r--hw/dmx/doc/html/globals_defs_0x73.html95
-rw-r--r--hw/dmx/doc/html/globals_defs_0x74.html96
-rw-r--r--hw/dmx/doc/html/globals_defs_0x75.html95
-rw-r--r--hw/dmx/doc/html/globals_defs_0x76.html95
-rw-r--r--hw/dmx/doc/html/globals_enum.html102
-rw-r--r--hw/dmx/doc/html/globals_eval.html233
-rw-r--r--hw/dmx/doc/html/globals_func.html117
-rw-r--r--hw/dmx/doc/html/globals_func_0x61.html99
-rw-r--r--hw/dmx/doc/html/globals_func_0x63.html96
-rw-r--r--hw/dmx/doc/html/globals_func_0x64.html2023
-rw-r--r--hw/dmx/doc/html/globals_func_0x65.html93
-rw-r--r--hw/dmx/doc/html/globals_func_0x67.html102
-rw-r--r--hw/dmx/doc/html/globals_func_0x69.html96
-rw-r--r--hw/dmx/doc/html/globals_func_0x6b.html212
-rw-r--r--hw/dmx/doc/html/globals_func_0x6c.html93
-rw-r--r--hw/dmx/doc/html/globals_func_0x6d.html165
-rw-r--r--hw/dmx/doc/html/globals_func_0x6e.html93
-rw-r--r--hw/dmx/doc/html/globals_func_0x6f.html115
-rw-r--r--hw/dmx/doc/html/globals_func_0x70.html189
-rw-r--r--hw/dmx/doc/html/globals_func_0x73.html152
-rw-r--r--hw/dmx/doc/html/globals_func_0x75.html124
-rw-r--r--hw/dmx/doc/html/globals_func_0x76.html93
-rw-r--r--hw/dmx/doc/html/globals_func_0x78.html94
-rw-r--r--hw/dmx/doc/html/globals_func_0x79.html101
-rw-r--r--hw/dmx/doc/html/globals_type.html358
-rw-r--r--hw/dmx/doc/html/globals_vars.html609
-rw-r--r--hw/dmx/doc/html/index.html57
-rw-r--r--hw/dmx/doc/html/jquery.js54
-rw-r--r--hw/dmx/doc/html/lnx-keyboard_8c.html1296
-rw-r--r--hw/dmx/doc/html/lnx-keyboard_8h.html410
-rw-r--r--hw/dmx/doc/html/lnx-keyboard_8h_source.html118
-rw-r--r--hw/dmx/doc/html/lnx-ms_8c.html766
-rw-r--r--hw/dmx/doc/html/lnx-ms_8h.html318
-rw-r--r--hw/dmx/doc/html/lnx-ms_8h_source.html110
-rw-r--r--hw/dmx/doc/html/lnx-ps2_8c.html762
-rw-r--r--hw/dmx/doc/html/lnx-ps2_8h.html318
-rw-r--r--hw/dmx/doc/html/lnx-ps2_8h_source.html110
-rw-r--r--hw/dmx/doc/html/nav_f.pngbin0 -> 159 bytes
-rw-r--r--hw/dmx/doc/html/nav_h.pngbin0 -> 97 bytes
-rw-r--r--hw/dmx/doc/html/navtree.css123
-rw-r--r--hw/dmx/doc/html/navtree.js394
-rw-r--r--hw/dmx/doc/html/open.pngbin0 -> 118 bytes
-rw-r--r--hw/dmx/doc/html/resize.js81
-rw-r--r--hw/dmx/doc/html/structDMXConfigCmdStruct.html151
-rw-r--r--hw/dmx/doc/html/structDMXConfigListStruct.html103
-rw-r--r--hw/dmx/doc/html/structDMXDesktopAttributesRec.html137
-rw-r--r--hw/dmx/doc/html/structDMXInputAttributesRec.html185
-rw-r--r--hw/dmx/doc/html/structDMXScreenAttributesRec.html265
-rw-r--r--hw/dmx/doc/html/structDMXWindowAttributesRec.html137
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigComment.html121
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigDisplay.html393
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigEntry.html137
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigFullDim.html105
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigNumber.html137
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigOption.html137
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigPair.html185
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigParam.html201
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigPartDim.html105
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigString.html153
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigSub.html185
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigToken.html121
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigVirtual.html217
-rw-r--r--hw/dmx/doc/html/struct__DMXConfigWall.html217
-rw-r--r--hw/dmx/doc/html/struct__DMXEventMap.html107
-rw-r--r--hw/dmx/doc/html/struct__DMXInputInfo.html428
-rw-r--r--hw/dmx/doc/html/struct__DMXLocalInitInfo.html594
-rw-r--r--hw/dmx/doc/html/struct__DMXLocalInputInfo.html788
-rw-r--r--hw/dmx/doc/html/struct__DMXScreenInfo.html1673
-rw-r--r--hw/dmx/doc/html/struct__DMXStatAvg.html119
-rw-r--r--hw/dmx/doc/html/struct__DMXStatInfo.html151
-rw-r--r--hw/dmx/doc/html/struct__dmxArg.html124
-rw-r--r--hw/dmx/doc/html/struct__dmxColormapPriv.html89
-rw-r--r--hw/dmx/doc/html/struct__dmxCursorPriv.html89
-rw-r--r--hw/dmx/doc/html/struct__dmxFontPriv.html105
-rw-r--r--hw/dmx/doc/html/struct__dmxGCPriv.html137
-rw-r--r--hw/dmx/doc/html/struct__dmxGlyphPriv.html90
-rw-r--r--hw/dmx/doc/html/struct__dmxPictPriv.html107
-rw-r--r--hw/dmx/doc/html/struct__dmxPixPriv.html105
-rw-r--r--hw/dmx/doc/html/struct__dmxWinPriv.html217
-rw-r--r--hw/dmx/doc/html/struct__myPrivate.html1160
-rw-r--r--hw/dmx/doc/html/structdmxGlxVisualPrivate.html105
-rw-r--r--hw/dmx/doc/html/structstack.html135
-rw-r--r--hw/dmx/doc/html/tab_a.pngbin0 -> 140 bytes
-rw-r--r--hw/dmx/doc/html/tab_b.pngbin0 -> 178 bytes
-rw-r--r--hw/dmx/doc/html/tab_h.pngbin0 -> 192 bytes
-rw-r--r--hw/dmx/doc/html/tab_s.pngbin0 -> 189 bytes
-rw-r--r--hw/dmx/doc/html/tabs.css59
-rw-r--r--hw/dmx/doc/html/usb-common_8c.html799
-rw-r--r--hw/dmx/doc/html/usb-common_8h.html247
-rw-r--r--hw/dmx/doc/html/usb-common_8h_source.html109
-rw-r--r--hw/dmx/doc/html/usb-keyboard_8c.html768
-rw-r--r--hw/dmx/doc/html/usb-keyboard_8h.html224
-rw-r--r--hw/dmx/doc/html/usb-keyboard_8h_source.html103
-rw-r--r--hw/dmx/doc/html/usb-mouse_8c.html507
-rw-r--r--hw/dmx/doc/html/usb-mouse_8h.html221
-rw-r--r--hw/dmx/doc/html/usb-mouse_8h_source.html103
-rw-r--r--hw/dmx/doc/html/usb-other_8c.html490
-rw-r--r--hw/dmx/doc/html/usb-other_8h.html221
-rw-r--r--hw/dmx/doc/html/usb-other_8h_source.html103
-rw-r--r--hw/dmx/doc/html/usb-private_8h.html332
-rw-r--r--hw/dmx/doc/html/usb-private_8h_source.html166
-rw-r--r--hw/dmx/doc/html/vdltodmx_8c.html99
-rw-r--r--hw/dmx/doc/html/xdmxconfig_8c.html2427
-rw-r--r--hw/dmx/doc/scaled.txt546
-rw-r--r--hw/dmx/doc/scaled.xml725
-rw-r--r--hw/dmx/examples/Makefile.am70
-rw-r--r--hw/dmx/examples/Makefile.in1190
-rw-r--r--hw/dmx/examples/dmxaddinput.c83
-rw-r--r--hw/dmx/examples/dmxaddscreen.c105
-rw-r--r--hw/dmx/examples/dmxinfo.c239
-rw-r--r--hw/dmx/examples/dmxreconfig.c162
-rw-r--r--hw/dmx/examples/dmxresize.c104
-rw-r--r--hw/dmx/examples/dmxrminput.c78
-rw-r--r--hw/dmx/examples/dmxrmscreen.c80
-rw-r--r--hw/dmx/examples/dmxwininfo.c496
-rw-r--r--hw/dmx/examples/ev.c182
-rw-r--r--hw/dmx/examples/evi.c86
-rw-r--r--hw/dmx/examples/res.c99
-rw-r--r--hw/dmx/examples/xbell.c101
-rw-r--r--hw/dmx/examples/xinput.c318
-rw-r--r--hw/dmx/examples/xled.c124
-rw-r--r--hw/dmx/examples/xtest.c75
-rw-r--r--hw/dmx/glxProxy/Makefile.am41
-rw-r--r--hw/dmx/glxProxy/Makefile.in758
-rw-r--r--hw/dmx/glxProxy/compsize.c558
-rw-r--r--hw/dmx/glxProxy/g_disptab.c612
-rw-r--r--hw/dmx/glxProxy/g_disptab.h676
-rw-r--r--hw/dmx/glxProxy/g_renderswap.c2433
-rw-r--r--hw/dmx/glxProxy/global.c70
-rw-r--r--hw/dmx/glxProxy/glxcmds.c3645
-rw-r--r--hw/dmx/glxProxy/glxcmdsswap.c1059
-rw-r--r--hw/dmx/glxProxy/glxcontext.h111
-rw-r--r--hw/dmx/glxProxy/glxdrawable.h66
-rw-r--r--hw/dmx/glxProxy/glxerror.h52
-rw-r--r--hw/dmx/glxProxy/glxext.c496
-rw-r--r--hw/dmx/glxProxy/glxext.h78
-rw-r--r--hw/dmx/glxProxy/glxfbconfig.c106
-rw-r--r--hw/dmx/glxProxy/glxfbconfig.h38
-rw-r--r--hw/dmx/glxProxy/glxscreens.c371
-rw-r--r--hw/dmx/glxProxy/glxscreens.h57
-rw-r--r--hw/dmx/glxProxy/glxserver.h317
-rw-r--r--hw/dmx/glxProxy/glxsingle.c1016
-rw-r--r--hw/dmx/glxProxy/glxsingle.h54
-rw-r--r--hw/dmx/glxProxy/glxswap.c538
-rw-r--r--hw/dmx/glxProxy/glxswap.h46
-rw-r--r--hw/dmx/glxProxy/glxutil.c34
-rw-r--r--hw/dmx/glxProxy/glxutil.h42
-rw-r--r--hw/dmx/glxProxy/glxvendor.c585
-rw-r--r--hw/dmx/glxProxy/glxvendor.h50
-rw-r--r--hw/dmx/glxProxy/glxvisuals.c152
-rw-r--r--hw/dmx/glxProxy/glxvisuals.h42
-rw-r--r--hw/dmx/glxProxy/render2swap.c286
-rw-r--r--hw/dmx/glxProxy/renderpixswap.c383
-rw-r--r--hw/dmx/glxProxy/unpack.h230
-rw-r--r--hw/dmx/input/ChkNotMaskEv.c106
-rw-r--r--hw/dmx/input/ChkNotMaskEv.h40
-rw-r--r--hw/dmx/input/Makefile.am67
-rw-r--r--hw/dmx/input/Makefile.in792
-rw-r--r--hw/dmx/input/atKeynames.h292
-rw-r--r--hw/dmx/input/dmxarg.c175
-rw-r--r--hw/dmx/input/dmxarg.h49
-rw-r--r--hw/dmx/input/dmxbackend.c616
-rw-r--r--hw/dmx/input/dmxbackend.h56
-rw-r--r--hw/dmx/input/dmxcommon.c669
-rw-r--r--hw/dmx/input/dmxcommon.h124
-rw-r--r--hw/dmx/input/dmxconsole.c1029
-rw-r--r--hw/dmx/input/dmxconsole.h59
-rw-r--r--hw/dmx/input/dmxdetach.c58
-rw-r--r--hw/dmx/input/dmxdummy.c86
-rw-r--r--hw/dmx/input/dmxdummy.h43
-rw-r--r--hw/dmx/input/dmxevents.c800
-rw-r--r--hw/dmx/input/dmxevents.h46
-rw-r--r--hw/dmx/input/dmxinputinit.c1274
-rw-r--r--hw/dmx/input/dmxinputinit.h291
-rw-r--r--hw/dmx/input/dmxmap.c121
-rw-r--r--hw/dmx/input/dmxmap.h42
-rw-r--r--hw/dmx/input/dmxmotion.c141
-rw-r--r--hw/dmx/input/dmxmotion.h49
-rw-r--r--hw/dmx/input/dmxsigio.c233
-rw-r--r--hw/dmx/input/dmxsigio.h45
-rw-r--r--hw/dmx/input/dmxxinput.c76
-rw-r--r--hw/dmx/input/lnx-keyboard.c990
-rw-r--r--hw/dmx/input/lnx-keyboard.h63
-rw-r--r--hw/dmx/input/lnx-ms.c321
-rw-r--r--hw/dmx/input/lnx-ms.h55
-rw-r--r--hw/dmx/input/lnx-ps2.c289
-rw-r--r--hw/dmx/input/lnx-ps2.h55
-rw-r--r--hw/dmx/input/usb-common.c381
-rw-r--r--hw/dmx/input/usb-common.h55
-rw-r--r--hw/dmx/input/usb-keyboard.c444
-rw-r--r--hw/dmx/input/usb-keyboard.h48
-rw-r--r--hw/dmx/input/usb-mouse.c126
-rw-r--r--hw/dmx/input/usb-mouse.h48
-rw-r--r--hw/dmx/input/usb-other.c161
-rw-r--r--hw/dmx/input/usb-other.h48
-rw-r--r--hw/dmx/input/usb-private.h117
-rw-r--r--hw/dmx/man/Makefile.am2
-rw-r--r--hw/dmx/man/Makefile.in698
-rw-r--r--hw/dmx/man/Xdmx.man741
530 files changed, 157372 insertions, 0 deletions
diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am
new file mode 100644
index 0000000..e0b201b
--- /dev/null
+++ b/hw/dmx/Makefile.am
@@ -0,0 +1,89 @@
+
+SUBDIRS = input config examples doc man
+bin_PROGRAMS = Xdmx
+
+if XINERAMA
+PANORAMIX_SRCS = $(top_srcdir)/Xext/panoramiX.c
+endif
+
+if GLX
+SUBDIRS += glxProxy
+GLX_LIBS = glxProxy/libglxproxy.a
+GLX_SRCS = $(PANORAMIX_SRCS) dmx_glxvisuals.c dmx_glxvisuals.h
+GLX_INCS = -I$(top_srcdir)/hw/xfree86/dixmods/extmod
+GLX_DEFS = @GL_CFLAGS@
+endif
+
+AM_CFLAGS = \
+ -DHAVE_DMX_CONFIG_H \
+ $(DIX_CFLAGS) \
+ $(GLX_INCS) \
+ $(GLX_DEFS) \
+ $(DMX_CFLAGS) \
+ @DMXMODULES_CFLAGS@
+
+Xdmx_SOURCES = dmx.c \
+ dmxcb.c \
+ dmxcb.h \
+ dmxclient.h \
+ dmxcmap.c \
+ dmxcmap.h \
+ dmx-config.h \
+ dmxcursor.c \
+ dmxcursor.h \
+ dmxdpms.c \
+ dmxdpms.h \
+ dmxextension.c \
+ dmxextension.h \
+ dmxfont.c \
+ dmxfont.h \
+ dmxgc.c \
+ dmxgc.h \
+ dmxgcops.c \
+ dmxgcops.h \
+ dmx.h \
+ dmxinit.c \
+ dmxinit.h \
+ dmxinput.c \
+ dmxinput.h \
+ dmxlog.c \
+ dmxlog.h \
+ dmxpict.c \
+ dmxpict.h \
+ dmxpixmap.c \
+ dmxpixmap.h \
+ dmxprop.c \
+ dmxprop.h \
+ dmxscrinit.c \
+ dmxscrinit.h \
+ dmxshadow.c \
+ dmxshadow.h \
+ dmxstat.c \
+ dmxstat.h \
+ dmxsync.c \
+ dmxsync.h \
+ dmxvisual.c \
+ dmxvisual.h \
+ dmxwindow.c \
+ dmxwindow.h \
+ $(top_srcdir)/mi/miinitext.c \
+ $(top_srcdir)/fb/fbcmap_mi.c \
+ $(GLX_SRCS)
+
+
+#if COMPOSITE
+#Xdmx_SOURCES += fakecw.c
+#endif
+
+XDMX_LIBS = \
+ $(GLX_LIBS) \
+ @XDMX_LIBS@ \
+ input/libdmxinput.a \
+ config/libdmxconfig.a
+
+Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
+Xdmx_DEPENDENCIES= $(XDMX_LIBS)
+Xdmx_LDADD = $(XDMX_LIBS) $(XDMX_SYS_LIBS) $(XSERVER_SYS_LIBS)
+
+relink:
+ $(AM_V_at)rm -f Xdmx$(EXEEXT) && $(MAKE) Xdmx$(EXEEXT)
diff --git a/hw/dmx/Makefile.in b/hw/dmx/Makefile.in
new file mode 100644
index 0000000..69775ca
--- /dev/null
+++ b/hw/dmx/Makefile.in
@@ -0,0 +1,1063 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = Xdmx$(EXEEXT)
+@GLX_TRUE@am__append_1 = glxProxy
+subdir = hw/dmx
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__Xdmx_SOURCES_DIST = dmx.c dmxcb.c dmxcb.h dmxclient.h dmxcmap.c \
+ dmxcmap.h dmx-config.h dmxcursor.c dmxcursor.h dmxdpms.c \
+ dmxdpms.h dmxextension.c dmxextension.h dmxfont.c dmxfont.h \
+ dmxgc.c dmxgc.h dmxgcops.c dmxgcops.h dmx.h dmxinit.c \
+ dmxinit.h dmxinput.c dmxinput.h dmxlog.c dmxlog.h dmxpict.c \
+ dmxpict.h dmxpixmap.c dmxpixmap.h dmxprop.c dmxprop.h \
+ dmxscrinit.c dmxscrinit.h dmxshadow.c dmxshadow.h dmxstat.c \
+ dmxstat.h dmxsync.c dmxsync.h dmxvisual.c dmxvisual.h \
+ dmxwindow.c dmxwindow.h $(top_srcdir)/mi/miinitext.c \
+ $(top_srcdir)/fb/fbcmap_mi.c $(top_srcdir)/Xext/panoramiX.c \
+ dmx_glxvisuals.c dmx_glxvisuals.h
+@XINERAMA_TRUE@am__objects_1 = panoramiX.$(OBJEXT)
+@GLX_TRUE@am__objects_2 = $(am__objects_1) dmx_glxvisuals.$(OBJEXT)
+am_Xdmx_OBJECTS = dmx.$(OBJEXT) dmxcb.$(OBJEXT) dmxcmap.$(OBJEXT) \
+ dmxcursor.$(OBJEXT) dmxdpms.$(OBJEXT) dmxextension.$(OBJEXT) \
+ dmxfont.$(OBJEXT) dmxgc.$(OBJEXT) dmxgcops.$(OBJEXT) \
+ dmxinit.$(OBJEXT) dmxinput.$(OBJEXT) dmxlog.$(OBJEXT) \
+ dmxpict.$(OBJEXT) dmxpixmap.$(OBJEXT) dmxprop.$(OBJEXT) \
+ dmxscrinit.$(OBJEXT) dmxshadow.$(OBJEXT) dmxstat.$(OBJEXT) \
+ dmxsync.$(OBJEXT) dmxvisual.$(OBJEXT) dmxwindow.$(OBJEXT) \
+ miinitext.$(OBJEXT) fbcmap_mi.$(OBJEXT) $(am__objects_2)
+Xdmx_OBJECTS = $(am_Xdmx_OBJECTS)
+am__DEPENDENCIES_1 = $(GLX_LIBS) input/libdmxinput.a \
+ config/libdmxconfig.a
+am__DEPENDENCIES_2 =
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+Xdmx_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(Xdmx_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(Xdmx_SOURCES)
+DIST_SOURCES = $(am__Xdmx_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = input config examples doc man glxProxy
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+
+#if COMPOSITE
+#Xdmx_SOURCES += fakecw.c
+#endif
+XDMX_LIBS = \
+ $(GLX_LIBS) \
+ @XDMX_LIBS@ \
+ input/libdmxinput.a \
+ config/libdmxconfig.a
+
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = input config examples doc man $(am__append_1)
+@XINERAMA_TRUE@PANORAMIX_SRCS = $(top_srcdir)/Xext/panoramiX.c
+@GLX_TRUE@GLX_LIBS = glxProxy/libglxproxy.a
+@GLX_TRUE@GLX_SRCS = $(PANORAMIX_SRCS) dmx_glxvisuals.c dmx_glxvisuals.h
+@GLX_TRUE@GLX_INCS = -I$(top_srcdir)/hw/xfree86/dixmods/extmod
+@GLX_TRUE@GLX_DEFS = @GL_CFLAGS@
+AM_CFLAGS = \
+ -DHAVE_DMX_CONFIG_H \
+ $(DIX_CFLAGS) \
+ $(GLX_INCS) \
+ $(GLX_DEFS) \
+ $(DMX_CFLAGS) \
+ @DMXMODULES_CFLAGS@
+
+Xdmx_SOURCES = dmx.c \
+ dmxcb.c \
+ dmxcb.h \
+ dmxclient.h \
+ dmxcmap.c \
+ dmxcmap.h \
+ dmx-config.h \
+ dmxcursor.c \
+ dmxcursor.h \
+ dmxdpms.c \
+ dmxdpms.h \
+ dmxextension.c \
+ dmxextension.h \
+ dmxfont.c \
+ dmxfont.h \
+ dmxgc.c \
+ dmxgc.h \
+ dmxgcops.c \
+ dmxgcops.h \
+ dmx.h \
+ dmxinit.c \
+ dmxinit.h \
+ dmxinput.c \
+ dmxinput.h \
+ dmxlog.c \
+ dmxlog.h \
+ dmxpict.c \
+ dmxpict.h \
+ dmxpixmap.c \
+ dmxpixmap.h \
+ dmxprop.c \
+ dmxprop.h \
+ dmxscrinit.c \
+ dmxscrinit.h \
+ dmxshadow.c \
+ dmxshadow.h \
+ dmxstat.c \
+ dmxstat.h \
+ dmxsync.c \
+ dmxsync.h \
+ dmxvisual.c \
+ dmxvisual.h \
+ dmxwindow.c \
+ dmxwindow.h \
+ $(top_srcdir)/mi/miinitext.c \
+ $(top_srcdir)/fb/fbcmap_mi.c \
+ $(GLX_SRCS)
+
+Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
+Xdmx_DEPENDENCIES = $(XDMX_LIBS)
+Xdmx_LDADD = $(XDMX_LIBS) $(XDMX_SYS_LIBS) $(XSERVER_SYS_LIBS)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+Xdmx$(EXEEXT): $(Xdmx_OBJECTS) $(Xdmx_DEPENDENCIES)
+ @rm -f Xdmx$(EXEEXT)
+ $(AM_V_CCLD)$(Xdmx_LINK) $(Xdmx_OBJECTS) $(Xdmx_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmx_glxvisuals.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxcb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxcmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxcursor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxdpms.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxextension.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxfont.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxgc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxgcops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxinput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxlog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxpict.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxpixmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxprop.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxscrinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxshadow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxstat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxsync.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxvisual.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxwindow.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fbcmap_mi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/miinitext.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/panoramiX.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+miinitext.o: $(top_srcdir)/mi/miinitext.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT miinitext.o -MD -MP -MF $(DEPDIR)/miinitext.Tpo -c -o miinitext.o `test -f '$(top_srcdir)/mi/miinitext.c' || echo '$(srcdir)/'`$(top_srcdir)/mi/miinitext.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/miinitext.Tpo $(DEPDIR)/miinitext.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/mi/miinitext.c' object='miinitext.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o miinitext.o `test -f '$(top_srcdir)/mi/miinitext.c' || echo '$(srcdir)/'`$(top_srcdir)/mi/miinitext.c
+
+miinitext.obj: $(top_srcdir)/mi/miinitext.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT miinitext.obj -MD -MP -MF $(DEPDIR)/miinitext.Tpo -c -o miinitext.obj `if test -f '$(top_srcdir)/mi/miinitext.c'; then $(CYGPATH_W) '$(top_srcdir)/mi/miinitext.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mi/miinitext.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/miinitext.Tpo $(DEPDIR)/miinitext.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/mi/miinitext.c' object='miinitext.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o miinitext.obj `if test -f '$(top_srcdir)/mi/miinitext.c'; then $(CYGPATH_W) '$(top_srcdir)/mi/miinitext.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/mi/miinitext.c'; fi`
+
+fbcmap_mi.o: $(top_srcdir)/fb/fbcmap_mi.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fbcmap_mi.o -MD -MP -MF $(DEPDIR)/fbcmap_mi.Tpo -c -o fbcmap_mi.o `test -f '$(top_srcdir)/fb/fbcmap_mi.c' || echo '$(srcdir)/'`$(top_srcdir)/fb/fbcmap_mi.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fbcmap_mi.Tpo $(DEPDIR)/fbcmap_mi.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/fb/fbcmap_mi.c' object='fbcmap_mi.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fbcmap_mi.o `test -f '$(top_srcdir)/fb/fbcmap_mi.c' || echo '$(srcdir)/'`$(top_srcdir)/fb/fbcmap_mi.c
+
+fbcmap_mi.obj: $(top_srcdir)/fb/fbcmap_mi.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fbcmap_mi.obj -MD -MP -MF $(DEPDIR)/fbcmap_mi.Tpo -c -o fbcmap_mi.obj `if test -f '$(top_srcdir)/fb/fbcmap_mi.c'; then $(CYGPATH_W) '$(top_srcdir)/fb/fbcmap_mi.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/fb/fbcmap_mi.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/fbcmap_mi.Tpo $(DEPDIR)/fbcmap_mi.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/fb/fbcmap_mi.c' object='fbcmap_mi.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fbcmap_mi.obj `if test -f '$(top_srcdir)/fb/fbcmap_mi.c'; then $(CYGPATH_W) '$(top_srcdir)/fb/fbcmap_mi.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/fb/fbcmap_mi.c'; fi`
+
+panoramiX.o: $(top_srcdir)/Xext/panoramiX.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT panoramiX.o -MD -MP -MF $(DEPDIR)/panoramiX.Tpo -c -o panoramiX.o `test -f '$(top_srcdir)/Xext/panoramiX.c' || echo '$(srcdir)/'`$(top_srcdir)/Xext/panoramiX.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/panoramiX.Tpo $(DEPDIR)/panoramiX.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/Xext/panoramiX.c' object='panoramiX.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o panoramiX.o `test -f '$(top_srcdir)/Xext/panoramiX.c' || echo '$(srcdir)/'`$(top_srcdir)/Xext/panoramiX.c
+
+panoramiX.obj: $(top_srcdir)/Xext/panoramiX.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT panoramiX.obj -MD -MP -MF $(DEPDIR)/panoramiX.Tpo -c -o panoramiX.obj `if test -f '$(top_srcdir)/Xext/panoramiX.c'; then $(CYGPATH_W) '$(top_srcdir)/Xext/panoramiX.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/Xext/panoramiX.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/panoramiX.Tpo $(DEPDIR)/panoramiX.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/Xext/panoramiX.c' object='panoramiX.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o panoramiX.obj `if test -f '$(top_srcdir)/Xext/panoramiX.c'; then $(CYGPATH_W) '$(top_srcdir)/Xext/panoramiX.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/Xext/panoramiX.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+ install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-binPROGRAMS install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+
+relink:
+ $(AM_V_at)rm -f Xdmx$(EXEEXT) && $(MAKE) Xdmx$(EXEEXT)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/config/Canvas.c b/hw/dmx/config/Canvas.c
new file mode 100644
index 0000000..c2eba87
--- /dev/null
+++ b/hw/dmx/config/Canvas.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright 1987, 1998 The Open Group
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of The Open Group shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from The Open Group.
+ */
+
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ * This file was originally taken from xc/lib/Xaw/Template.c
+ */
+
+#include <X11/IntrinsicP.h>
+#include <X11/StringDefs.h>
+#include "CanvasP.h"
+
+static void CanvasInitialize(Widget request, Widget w,
+ ArgList args, Cardinal *num_args)
+{
+}
+
+static void CanvasExpose(Widget w, XEvent *event, Region region)
+{
+ CanvasExposeDataRec data;
+
+ data.w = w;
+ data.event = event;
+ data.region = region;
+
+ if (!XtIsRealized(w)) return;
+ XtCallCallbacks(w, XtNcanvasExposeCallback, (XtPointer)&data);
+}
+
+static void CanvasResize(Widget w)
+{
+ if (!XtIsRealized(w)) return;
+ XtCallCallbacks(w, XtNcanvasResizeCallback, (XtPointer)w);
+}
+
+static void CanvasAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ XtCallCallbacks(w, XtNcallback, (XtPointer)event);
+}
+
+#define offset(field) XtOffsetOf(CanvasRec, canvas.field)
+static XtResource resources[] = {
+ { XtNcallback, XtCCallback, XtRCallback,
+ sizeof(XtCallbackList), offset(input_callback), XtRCallback, NULL },
+ { XtNcanvasExposeCallback, XtCcanvasExposeCallback, XtRCallback,
+ sizeof(XtCallbackList), offset(expose_callback), XtRCallback, NULL },
+ { XtNcanvasResizeCallback, XtCcanvasResizeCallback, XtRCallback,
+ sizeof(XtCallbackList), offset(resize_callback), XtRCallback, NULL },
+};
+#undef offset
+
+static XtActionsRec actions[] =
+{
+ {"canvas", CanvasAction},
+};
+
+static char translations[] =
+"<Key>: canvas()\n\
+<Motion>: canvas()\n\
+<BtnDown>: canvas()\n\
+<BtnUp>: canvas()\n\
+"
+;
+
+#define Superclass (&widgetClassRec)
+CanvasClassRec canvasClassRec = {
+ /* core */
+ {
+ (WidgetClass)Superclass, /* superclass */
+ "Canvas", /* class_name */
+ sizeof(CanvasRec), /* widget_size */
+ NULL, /* class_initialize */
+ NULL, /* class_part_initialize */
+ False, /* class_inited */
+ CanvasInitialize, /* initialize */
+ NULL, /* initialize_hook */
+ XtInheritRealize, /* realize */
+ actions, /* actions */
+ XtNumber(actions), /* num_actions */
+ resources, /* resources */
+ XtNumber(resources), /* num_resources */
+ NULLQUARK, /* xrm_class */
+ True, /* compress_motion */
+ True, /* compress_exposure */
+ True, /* compress_enterleave */
+ False, /* visible_interest */
+ NULL, /* destroy */
+ CanvasResize, /* resize */
+ CanvasExpose, /* expose */
+ NULL, /* set_values */
+ NULL, /* set_values_hook */
+ XtInheritSetValuesAlmost, /* set_values_almost */
+ NULL, /* get_values_hook */
+ NULL, /* accept_focus */
+ XtVersion, /* version */
+ NULL, /* callback_private */
+ translations, /* tm_table */
+ XtInheritQueryGeometry, /* query_geometry */
+ XtInheritDisplayAccelerator, /* display_accelerator */
+ NULL, /* extension */
+ },
+ /* canvas */
+ {
+ NULL, /* extension */
+ }
+};
+
+WidgetClass canvasWidgetClass = (WidgetClass)&canvasClassRec;
diff --git a/hw/dmx/config/Canvas.h b/hw/dmx/config/Canvas.h
new file mode 100644
index 0000000..fe9a57f
--- /dev/null
+++ b/hw/dmx/config/Canvas.h
@@ -0,0 +1,55 @@
+/*
+
+Copyright 1987, 1998 The Open Group
+Copyright 2002 Red Hat Inc., Durham, North Carolina.
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+*/
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ * This file was originally taken from xc/lib/Xaw/Template.h
+ */
+
+#ifndef _Canvas_h
+#define _Canvas_h
+
+#include <X11/Intrinsic.h>
+
+#define XtNcanvasExposeCallback "canvasExposeCallback"
+#define XtCcanvasExposeCallback "CanvasExposeCallback"
+#define XtNcanvasResizeCallback "canvasResizeCallback"
+#define XtCcanvasResizeCallback "CanvasResizeCallback"
+
+typedef struct _CanvasClassRec *CanvasWidgetClass;
+typedef struct _CanvasRec *CanvasWidget;
+extern WidgetClass canvasWidgetClass;
+
+typedef struct _CanvasExposeDataRec {
+ Widget w;
+ XEvent *event;
+ Region region;
+} CanvasExposeDataRec, *CanvasExposeDataPtr;
+
+#endif /* _Canvas_h */
diff --git a/hw/dmx/config/CanvasP.h b/hw/dmx/config/CanvasP.h
new file mode 100644
index 0000000..cf43710
--- /dev/null
+++ b/hw/dmx/config/CanvasP.h
@@ -0,0 +1,65 @@
+/*
+
+Copyright 1987, 1998 The Open Group
+Copyright 2002 Red Hat Inc., Durham, North Carolina.
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+*/
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ * This file was originally taken from xc/lib/Xaw/TemplateP.h
+ */
+
+#ifndef _CanvasP_h
+#define _CanvasP_h
+
+#include "Canvas.h"
+
+/* include superclass private header file */
+#include <X11/CoreP.h>
+
+typedef struct {
+ XtPointer extension;
+} CanvasClassPart;
+
+typedef struct _CanvasClassRec {
+ CoreClassPart core_class;
+ CanvasClassPart canvas_class;
+} CanvasClassRec;
+
+extern CanvasClassRec canvasClassRec;
+
+typedef struct {
+ XtCallbackList input_callback;
+ XtCallbackList expose_callback;
+ XtCallbackList resize_callback;
+} CanvasPart;
+
+typedef struct _CanvasRec {
+ CorePart core;
+ CanvasPart canvas;
+} CanvasRec;
+
+#endif /* _CanvasP_h */
diff --git a/hw/dmx/config/Makefile.am b/hw/dmx/config/Makefile.am
new file mode 100644
index 0000000..de4ce31
--- /dev/null
+++ b/hw/dmx/config/Makefile.am
@@ -0,0 +1,70 @@
+SUBDIRS = man
+
+noinst_LIBRARIES = libdmxconfig.a
+
+LIBSRCS = parser.y \
+ scanner.l \
+ dmxparse.c \
+ dmxparse.h \
+ dmxprint.c \
+ dmxprint.h \
+ dmxcompat.c \
+ dmxcompat.h \
+ dmxconfig.c \
+ dmxconfig.h
+
+parser.h: parser.c
+scanner.c: scanner.l parser.h
+
+BUILT_SOURCES = parser.c parser.h scanner.c
+
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+
+libdmxconfig_a_SOURCES = $(LIBSRCS)
+
+if GLX
+GLX_DEFS = @GL_CFLAGS@
+endif
+
+AM_YFLAGS = -d
+AM_CFLAGS = \
+ $(DIX_CFLAGS) \
+ -I$(top_srcdir)/hw/dmx \
+ -DHAVE_DMX_CONFIG_H \
+ -DDMX_LOG_STANDALONE \
+ $(GLX_DEFS) \
+ @DMXMODULES_CFLAGS@
+
+bin_PROGRAMS = xdmxconfig vdltodmx dmxtodmx
+
+xdmxconfig_DEPENDENCIES = libdmxconfig.a
+xdmxconfig_SOURCES = \
+ xdmxconfig.c \
+ $(top_srcdir)/hw/dmx/dmxlog.c \
+ Canvas.c \
+ Canvas.h \
+ CanvasP.h
+xdmxconfig_LDADD = -L. -ldmxconfig @XDMXCONFIG_DEP_LIBS@
+xdmxconfig_CFLAGS = $(AM_CFLAGS) @XDMXCONFIG_DEP_CFLAGS@
+
+vdltodmx_DEPENDENCIES = libdmxconfig.a
+vdltodmx_SOURCES = vdltodmx.c
+vdltodmx_LDADD = -L. -ldmxconfig
+
+dmxtodmx_DEPENDENCIES = libdmxconfig.a
+dmxtodmx_SOURCES = dmxtodmx.c
+dmxtodmx_LDADD = -L. -ldmxconfig
+
+EXTRA_DIST = \
+ test-a.in test-a.out \
+ test-b.in test-b.out \
+ test-c.in test-c.out \
+ test-d.in test-d.out \
+ test-e.in test-e.out \
+ test-f.in test-f.out \
+ test-g.in test-g.out \
+ test-h.in test-h.out \
+ test-i.in test-i.out \
+ test-j.in test-j.out \
+ test-k.in test-k.out \
+ test-l.in test-l.out
diff --git a/hw/dmx/config/Makefile.in b/hw/dmx/config/Makefile.in
new file mode 100644
index 0000000..6448b5d
--- /dev/null
+++ b/hw/dmx/config/Makefile.in
@@ -0,0 +1,1071 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = xdmxconfig$(EXEEXT) vdltodmx$(EXEEXT) dmxtodmx$(EXEEXT)
+subdir = hw/dmx/config
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO \
+ parser.c parser.h scanner.c
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_$(V))
+am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
+am__v_AR_0 = @echo " AR " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+libdmxconfig_a_AR = $(AR) $(ARFLAGS)
+libdmxconfig_a_LIBADD =
+am__objects_1 = parser.$(OBJEXT) scanner.$(OBJEXT) dmxparse.$(OBJEXT) \
+ dmxprint.$(OBJEXT) dmxcompat.$(OBJEXT) dmxconfig.$(OBJEXT)
+am_libdmxconfig_a_OBJECTS = $(am__objects_1)
+libdmxconfig_a_OBJECTS = $(am_libdmxconfig_a_OBJECTS)
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_dmxtodmx_OBJECTS = dmxtodmx.$(OBJEXT)
+dmxtodmx_OBJECTS = $(am_dmxtodmx_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am_vdltodmx_OBJECTS = vdltodmx.$(OBJEXT)
+vdltodmx_OBJECTS = $(am_vdltodmx_OBJECTS)
+am_xdmxconfig_OBJECTS = xdmxconfig-xdmxconfig.$(OBJEXT) \
+ xdmxconfig-dmxlog.$(OBJEXT) xdmxconfig-Canvas.$(OBJEXT)
+xdmxconfig_OBJECTS = $(am_xdmxconfig_OBJECTS)
+xdmxconfig_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xdmxconfig_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ ||
+LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
+LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
+AM_V_LEX = $(am__v_LEX_$(V))
+am__v_LEX_ = $(am__v_LEX_$(AM_DEFAULT_VERBOSITY))
+am__v_LEX_0 = @echo " LEX " $@;
+YLWRAP = $(top_srcdir)/ylwrap
+@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ ||
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
+AM_V_YACC = $(am__v_YACC_$(V))
+am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY))
+am__v_YACC_0 = @echo " YACC " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libdmxconfig_a_SOURCES) $(dmxtodmx_SOURCES) \
+ $(vdltodmx_SOURCES) $(xdmxconfig_SOURCES)
+DIST_SOURCES = $(libdmxconfig_a_SOURCES) $(dmxtodmx_SOURCES) \
+ $(vdltodmx_SOURCES) $(xdmxconfig_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = man
+noinst_LIBRARIES = libdmxconfig.a
+LIBSRCS = parser.y \
+ scanner.l \
+ dmxparse.c \
+ dmxparse.h \
+ dmxprint.c \
+ dmxprint.h \
+ dmxcompat.c \
+ dmxcompat.h \
+ dmxconfig.c \
+ dmxconfig.h
+
+BUILT_SOURCES = parser.c parser.h scanner.c
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+libdmxconfig_a_SOURCES = $(LIBSRCS)
+@GLX_TRUE@GLX_DEFS = @GL_CFLAGS@
+AM_YFLAGS = -d
+AM_CFLAGS = \
+ $(DIX_CFLAGS) \
+ -I$(top_srcdir)/hw/dmx \
+ -DHAVE_DMX_CONFIG_H \
+ -DDMX_LOG_STANDALONE \
+ $(GLX_DEFS) \
+ @DMXMODULES_CFLAGS@
+
+xdmxconfig_DEPENDENCIES = libdmxconfig.a
+xdmxconfig_SOURCES = \
+ xdmxconfig.c \
+ $(top_srcdir)/hw/dmx/dmxlog.c \
+ Canvas.c \
+ Canvas.h \
+ CanvasP.h
+
+xdmxconfig_LDADD = -L. -ldmxconfig @XDMXCONFIG_DEP_LIBS@
+xdmxconfig_CFLAGS = $(AM_CFLAGS) @XDMXCONFIG_DEP_CFLAGS@
+vdltodmx_DEPENDENCIES = libdmxconfig.a
+vdltodmx_SOURCES = vdltodmx.c
+vdltodmx_LDADD = -L. -ldmxconfig
+dmxtodmx_DEPENDENCIES = libdmxconfig.a
+dmxtodmx_SOURCES = dmxtodmx.c
+dmxtodmx_LDADD = -L. -ldmxconfig
+EXTRA_DIST = \
+ test-a.in test-a.out \
+ test-b.in test-b.out \
+ test-c.in test-c.out \
+ test-d.in test-d.out \
+ test-e.in test-e.out \
+ test-f.in test-f.out \
+ test-g.in test-g.out \
+ test-h.in test-h.out \
+ test-i.in test-i.out \
+ test-j.in test-j.out \
+ test-k.in test-k.out \
+ test-l.in test-l.out
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .l .lo .o .obj .y
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/config/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/config/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libdmxconfig.a: $(libdmxconfig_a_OBJECTS) $(libdmxconfig_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libdmxconfig.a
+ $(AM_V_AR)$(libdmxconfig_a_AR) libdmxconfig.a $(libdmxconfig_a_OBJECTS) $(libdmxconfig_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libdmxconfig.a
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+dmxtodmx$(EXEEXT): $(dmxtodmx_OBJECTS) $(dmxtodmx_DEPENDENCIES)
+ @rm -f dmxtodmx$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dmxtodmx_OBJECTS) $(dmxtodmx_LDADD) $(LIBS)
+vdltodmx$(EXEEXT): $(vdltodmx_OBJECTS) $(vdltodmx_DEPENDENCIES)
+ @rm -f vdltodmx$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(vdltodmx_OBJECTS) $(vdltodmx_LDADD) $(LIBS)
+xdmxconfig$(EXEEXT): $(xdmxconfig_OBJECTS) $(xdmxconfig_DEPENDENCIES)
+ @rm -f xdmxconfig$(EXEEXT)
+ $(AM_V_CCLD)$(xdmxconfig_LINK) $(xdmxconfig_OBJECTS) $(xdmxconfig_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxcompat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxconfig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxparse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxprint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxtodmx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdltodmx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdmxconfig-Canvas.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdmxconfig-dmxlog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xdmxconfig-xdmxconfig.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+xdmxconfig-xdmxconfig.o: xdmxconfig.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -MT xdmxconfig-xdmxconfig.o -MD -MP -MF $(DEPDIR)/xdmxconfig-xdmxconfig.Tpo -c -o xdmxconfig-xdmxconfig.o `test -f 'xdmxconfig.c' || echo '$(srcdir)/'`xdmxconfig.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdmxconfig-xdmxconfig.Tpo $(DEPDIR)/xdmxconfig-xdmxconfig.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xdmxconfig.c' object='xdmxconfig-xdmxconfig.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -c -o xdmxconfig-xdmxconfig.o `test -f 'xdmxconfig.c' || echo '$(srcdir)/'`xdmxconfig.c
+
+xdmxconfig-xdmxconfig.obj: xdmxconfig.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -MT xdmxconfig-xdmxconfig.obj -MD -MP -MF $(DEPDIR)/xdmxconfig-xdmxconfig.Tpo -c -o xdmxconfig-xdmxconfig.obj `if test -f 'xdmxconfig.c'; then $(CYGPATH_W) 'xdmxconfig.c'; else $(CYGPATH_W) '$(srcdir)/xdmxconfig.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdmxconfig-xdmxconfig.Tpo $(DEPDIR)/xdmxconfig-xdmxconfig.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xdmxconfig.c' object='xdmxconfig-xdmxconfig.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -c -o xdmxconfig-xdmxconfig.obj `if test -f 'xdmxconfig.c'; then $(CYGPATH_W) 'xdmxconfig.c'; else $(CYGPATH_W) '$(srcdir)/xdmxconfig.c'; fi`
+
+xdmxconfig-dmxlog.o: $(top_srcdir)/hw/dmx/dmxlog.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -MT xdmxconfig-dmxlog.o -MD -MP -MF $(DEPDIR)/xdmxconfig-dmxlog.Tpo -c -o xdmxconfig-dmxlog.o `test -f '$(top_srcdir)/hw/dmx/dmxlog.c' || echo '$(srcdir)/'`$(top_srcdir)/hw/dmx/dmxlog.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdmxconfig-dmxlog.Tpo $(DEPDIR)/xdmxconfig-dmxlog.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/hw/dmx/dmxlog.c' object='xdmxconfig-dmxlog.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -c -o xdmxconfig-dmxlog.o `test -f '$(top_srcdir)/hw/dmx/dmxlog.c' || echo '$(srcdir)/'`$(top_srcdir)/hw/dmx/dmxlog.c
+
+xdmxconfig-dmxlog.obj: $(top_srcdir)/hw/dmx/dmxlog.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -MT xdmxconfig-dmxlog.obj -MD -MP -MF $(DEPDIR)/xdmxconfig-dmxlog.Tpo -c -o xdmxconfig-dmxlog.obj `if test -f '$(top_srcdir)/hw/dmx/dmxlog.c'; then $(CYGPATH_W) '$(top_srcdir)/hw/dmx/dmxlog.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/hw/dmx/dmxlog.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdmxconfig-dmxlog.Tpo $(DEPDIR)/xdmxconfig-dmxlog.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/hw/dmx/dmxlog.c' object='xdmxconfig-dmxlog.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -c -o xdmxconfig-dmxlog.obj `if test -f '$(top_srcdir)/hw/dmx/dmxlog.c'; then $(CYGPATH_W) '$(top_srcdir)/hw/dmx/dmxlog.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/hw/dmx/dmxlog.c'; fi`
+
+xdmxconfig-Canvas.o: Canvas.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -MT xdmxconfig-Canvas.o -MD -MP -MF $(DEPDIR)/xdmxconfig-Canvas.Tpo -c -o xdmxconfig-Canvas.o `test -f 'Canvas.c' || echo '$(srcdir)/'`Canvas.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdmxconfig-Canvas.Tpo $(DEPDIR)/xdmxconfig-Canvas.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Canvas.c' object='xdmxconfig-Canvas.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -c -o xdmxconfig-Canvas.o `test -f 'Canvas.c' || echo '$(srcdir)/'`Canvas.c
+
+xdmxconfig-Canvas.obj: Canvas.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -MT xdmxconfig-Canvas.obj -MD -MP -MF $(DEPDIR)/xdmxconfig-Canvas.Tpo -c -o xdmxconfig-Canvas.obj `if test -f 'Canvas.c'; then $(CYGPATH_W) 'Canvas.c'; else $(CYGPATH_W) '$(srcdir)/Canvas.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xdmxconfig-Canvas.Tpo $(DEPDIR)/xdmxconfig-Canvas.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='Canvas.c' object='xdmxconfig-Canvas.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xdmxconfig_CFLAGS) $(CFLAGS) -c -o xdmxconfig-Canvas.obj `if test -f 'Canvas.c'; then $(CYGPATH_W) 'Canvas.c'; else $(CYGPATH_W) '$(srcdir)/Canvas.c'; fi`
+
+.l.c:
+ $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
+
+.y.c:
+ $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LIBRARIES) $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -rm -f parser.c
+ -rm -f parser.h
+ -rm -f scanner.c
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ ctags-recursive install install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool clean-noinstLIBRARIES ctags \
+ ctags-recursive distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+ uninstall-binPROGRAMS
+
+
+parser.h: parser.c
+scanner.c: scanner.l parser.h
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/config/TODO b/hw/dmx/config/TODO
new file mode 100644
index 0000000..2998ff4
--- /dev/null
+++ b/hw/dmx/config/TODO
@@ -0,0 +1,7 @@
+Fri May 31 13:20:17 2002
+
+1) Sanitize values from input boxes.
+
+2) Add canvas colors to cavas widget resources or to command-line options.
+
+3) Add ability to edit option line(s) and wall.
diff --git a/hw/dmx/config/dmxcompat.c b/hw/dmx/config/dmxcompat.c
new file mode 100644
index 0000000..b4190ff
--- /dev/null
+++ b/hw/dmx/config/dmxcompat.c
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ */
+
+/** \file
+ * This file provides some compatibility support for reading VDL files
+ * that are used by xmovie
+ * (http://www.llnl.gov/icc/sdd/img/xmovie/xmovie.shtml).
+ *
+ * This file is not used by the DMX server.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxconfig.h"
+#include "dmxparse.h"
+#include "dmxcompat.h"
+#include "parser.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+static int dmxVDLReadLine(FILE *str, char *buf, int len)
+{
+ if (fgets(buf, len, str)) return strlen(buf);
+ return 0;
+}
+
+static int dmxVDLCount(const char *buf)
+{
+ return strtol(buf, NULL, 10);
+}
+
+static void dmxVDLVirtualEntry(const char *buf,
+ char *name, int *len,
+ int *x, int *y)
+{
+ char *end;
+ const char *s;
+ char *d;
+ int start;
+
+ *x = strtol(buf, &end, 10);
+ *y = strtol(end, &end, 10);
+
+ for (s = end, d = name, start = 1; *s && *s != '['; ++s) {
+ if (start && isspace(*s)) continue;
+ *d++ = *s;
+ start = 0;
+ }
+ *d = '\0';
+ while (d > name && isspace(d[-1])) *--d = '\0'; /* remove trailing space */
+ *len = strlen(name);
+}
+
+static void dmxVDLDisplayEntry(const char *buf,
+ char *name, int *len,
+ int *x, int *y,
+ int *xoff, int *yoff,
+ int *xorig, int *yorig)
+{
+ const char *pt;
+ char *end;
+
+ pt = strchr(buf, ' ');
+ strncpy(name, buf, pt-buf);
+ name[pt-buf] = '\0';
+ *len = strlen(name);
+
+ *x = strtol(pt, &end, 10);
+ *y = strtol(end, &end, 10);
+ *xorig = strtol(end, &end, 10);
+ *yorig = strtol(end, &end, 10);
+ *xoff = strtol(end, &end, 10);
+ *yoff = strtol(end, NULL, 10);
+}
+
+/** Read from the VDL format \a filename and return a newly allocated \a
+ * DMXConfigEntryPtr */
+DMXConfigEntryPtr dmxVDLRead(const char *filename)
+{
+ FILE *str;
+ char buf[2048]; /* RATS: Use ok */
+ char *pt;
+ int lineno = 0;
+ DMXConfigEntryPtr entry = NULL;
+ DMXConfigVirtualPtr virtual = NULL;
+ DMXConfigSubPtr sub = NULL;
+ DMXConfigDisplayPtr display = NULL;
+ DMXConfigFullDimPtr fdim = NULL;
+ int vcount = 0;
+ int dcount = 0;
+ int icount = 0;
+ int x, y, xoff, yoff, xorig, yorig;
+ char name[2048]; /* RATS: Use ok */
+ const char *tmp;
+ int len;
+ enum {
+ simulateFlag,
+ virtualCount,
+ virtualEntry,
+ displayCount,
+ displayEntry,
+ ignoreCount,
+ ignoreEntry
+ } state = simulateFlag;
+
+ if (!filename) str = stdin;
+ else str = fopen(filename, "r");
+ if (!str) return NULL;
+
+ while (dmxVDLReadLine(str, buf, sizeof(buf))) {
+ DMXConfigCommentPtr comment = NULL;
+
+ ++lineno;
+ for (pt = buf; *pt; pt++)
+ if (*pt == '\r' || *pt == '\n') {
+ *pt = '\0';
+ break;
+ }
+ if (buf[0] == '#') {
+ tmp = dmxConfigCopyString(buf + 1, strlen(buf + 1));
+ comment = dmxConfigCreateComment(T_COMMENT, lineno, tmp);
+ entry = dmxConfigAddEntry(entry, dmxConfigComment, comment, NULL);
+ continue;
+ }
+ switch (state) {
+ case simulateFlag:
+ state = virtualCount;
+ break;
+ case virtualCount:
+ vcount = dmxVDLCount(buf);
+ state = virtualEntry;
+ break;
+ case virtualEntry:
+ len = sizeof(name);
+ dmxVDLVirtualEntry(buf, name, &len, &x, &y);
+ tmp = dmxConfigCopyString(name, len);
+ virtual = dmxConfigCreateVirtual(NULL,
+ dmxConfigCreateString(T_STRING,
+ lineno,
+ NULL,
+ tmp),
+ dmxConfigCreatePair(T_DIMENSION,
+ lineno,
+ NULL,
+ x, y, 0, 0),
+ NULL, NULL, NULL);
+ state = displayCount;
+ break;
+ case displayCount:
+ dcount = dmxVDLCount(buf);
+ state = displayEntry;
+ break;
+ case displayEntry:
+ dmxVDLDisplayEntry(buf, name, &len, &x, &y, &xoff, &yoff,
+ &xorig, &yorig);
+ tmp = dmxConfigCopyString(name, len);
+ fdim = dmxConfigCreateFullDim(
+ dmxConfigCreatePartDim(
+ dmxConfigCreatePair(T_DIMENSION,
+ lineno,
+ NULL,
+ x, y, 0, 0),
+ dmxConfigCreatePair(T_OFFSET,
+ lineno,
+ NULL,
+ xoff, yoff,
+ xoff, yoff)),
+ NULL);
+ display = dmxConfigCreateDisplay(NULL,
+ dmxConfigCreateString(T_STRING,
+ lineno,
+ NULL,
+ tmp),
+ fdim,
+ dmxConfigCreatePair(T_ORIGIN,
+ lineno,
+ NULL,
+ xorig, yorig,
+ 0, 0),
+ NULL);
+ sub = dmxConfigAddSub(sub, dmxConfigSubDisplay(display));
+ if (!--dcount) {
+ state = ignoreCount;
+ virtual->subentry = sub;
+ entry = dmxConfigAddEntry(entry,
+ dmxConfigVirtual,
+ NULL,
+ virtual);
+ virtual = NULL;
+ sub = NULL;
+ }
+ break;
+ case ignoreCount:
+ icount = dmxVDLCount(buf);
+ state = ignoreEntry;
+ break;
+ case ignoreEntry:
+ if (!--icount) state = virtualEntry;
+ break;
+ }
+ }
+ return entry;
+}
diff --git a/hw/dmx/config/dmxcompat.h b/hw/dmx/config/dmxcompat.h
new file mode 100644
index 0000000..7188920
--- /dev/null
+++ b/hw/dmx/config/dmxcompat.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to VDL compatibility support. \see dmxcompat.c
+ *
+ * This file is not used by the DMX server.
+ */
+
+#ifndef _DMXCOMPAT_H_
+#define _DMXCOMPAT_H_
+
+extern DMXConfigEntryPtr dmxVDLRead(const char *filename);
+#endif
diff --git a/hw/dmx/config/dmxconfig.c b/hw/dmx/config/dmxconfig.c
new file mode 100644
index 0000000..a31e5f7
--- /dev/null
+++ b/hw/dmx/config/dmxconfig.c
@@ -0,0 +1,497 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provides interface for reading DMX configuration files and for
+ * combining that information with command-line configuration parameters. */
+
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxinput.h"
+#include "dmxconfig.h"
+#include "dmxparse.h"
+#include "dmxlog.h"
+#include "dmxcb.h"
+#include "dmxstat.h"
+#include "parser.h"
+
+extern int yyparse(void);
+extern FILE *yyin;
+
+static char *dmxXkbRules;
+static char *dmxXkbModel;
+static char *dmxXkbLayout;
+static char *dmxXkbVariant;
+static char *dmxXkbOptions;
+
+/** Stores lists of configuration information. */
+typedef struct DMXConfigListStruct {
+ const char *name;
+ struct DMXConfigListStruct *next;
+} DMXConfigList, *DMXConfigListPtr;
+
+/** This stucture stores the parsed configuration information. */
+typedef struct DMXConfigCmdStruct {
+ const char *filename;
+ const char *config;
+ DMXConfigList *displays;
+ DMXConfigList *inputs;
+ DMXConfigList *xinputs;
+} DMXConfigCmd, *DMXConfigCmdPtr;
+
+DMXConfigEntryPtr dmxConfigEntry;
+static DMXConfigCmd dmxConfigCmd;
+
+static int dmxDisplaysFromCommandLine;
+
+/** Make a note that \a display is the name of an X11 display that
+ * should be initialized as a backend (output) display. Called from
+ * #ddxProcessArgument. */
+void dmxConfigStoreDisplay(const char *display)
+{
+ DMXConfigListPtr entry = malloc(sizeof(*entry));
+ entry->name = strdup(display);
+ entry->next = NULL;
+ if (!dmxConfigCmd.displays) dmxConfigCmd.displays = entry;
+ else {
+ DMXConfigList *pt;
+ for (pt = dmxConfigCmd.displays; pt->next; pt = pt->next);
+ if (!pt)
+ dmxLog(dmxFatal, "dmxConfigStoreDisplay: end of list non-NULL\n");
+ pt->next = entry;
+ }
+ ++dmxDisplaysFromCommandLine;
+}
+
+/** Make a note that \a input is the name of an X11 display that should
+ * be used for input (either a backend or a console input device). */
+void dmxConfigStoreInput(const char *input)
+{
+ DMXConfigListPtr entry = malloc(sizeof(*entry));
+ entry->name = strdup(input);
+ entry->next = NULL;
+ if (!dmxConfigCmd.inputs) dmxConfigCmd.inputs = entry;
+ else {
+ DMXConfigList *pt;
+ for (pt = dmxConfigCmd.inputs; pt->next; pt = pt->next);
+ if (!pt)
+ dmxLog(dmxFatal, "dmxConfigStoreInput: end of list non-NULL\n");
+ pt->next = entry;
+ }
+}
+
+/** Make a note that \a input is the name of an X11 display that should
+ * be used for input from XInput extension devices. */
+void dmxConfigStoreXInput(const char *input)
+{
+ DMXConfigListPtr entry = malloc(sizeof(*entry));
+ entry->name = strdup(input);
+ entry->next = NULL;
+ if (!dmxConfigCmd.xinputs) dmxConfigCmd.xinputs = entry;
+ else {
+ DMXConfigList *pt;
+ for (pt = dmxConfigCmd.xinputs; pt->next; pt = pt->next);
+ if (!pt)
+ dmxLog(dmxFatal, "dmxConfigStoreXInput: end of list non-NULL\n");
+ pt->next = entry;
+ }
+}
+
+/** Make a note that \a file is the configuration file. */
+void dmxConfigStoreFile(const char *file)
+{
+ if (dmxConfigCmd.filename)
+ dmxLog(dmxFatal, "Only one -configfile allowed\n");
+ dmxConfigCmd.filename = strdup(file);
+}
+
+/** Make a note that \a config should be used as the configuration for
+ * current instantiation of the DMX server. */
+void dmxConfigStoreConfig(const char *config)
+{
+ if (dmxConfigCmd.config) dmxLog(dmxFatal, "Only one -config allowed\n");
+ dmxConfigCmd.config = strdup(config);
+}
+
+static int dmxConfigReadFile(const char *filename, int debug)
+{
+ FILE *str;
+
+ if (!(str = fopen(filename, "r"))) return -1;
+ dmxLog(dmxInfo, "Reading configuration file \"%s\"\n", filename);
+ yyin = str;
+ yydebug = debug;
+ yyparse();
+ fclose(str);
+ return 0;
+}
+
+static const char *dmxConfigMatch(const char *target, DMXConfigEntryPtr entry)
+{
+ DMXConfigVirtualPtr v = entry->virtual;
+ const char *name = NULL;
+
+ if (v && v->name) name = v->name;
+
+ if (v && !dmxConfigCmd.config) return v->name ? v->name : "<noname>";
+ if (!name) return NULL;
+ if (!strcmp(name, target)) return name;
+ return NULL;
+}
+
+static DMXScreenInfo *dmxConfigAddDisplay(const char *name,
+ int scrnWidth, int scrnHeight,
+ int scrnX, int scrnY,
+ int scrnXSign, int scrnYSign,
+ int rootWidth, int rootHeight,
+ int rootX, int rootY,
+ int rootXSign, int rootYSign)
+{
+ DMXScreenInfo *dmxScreen;
+
+ if (!(dmxScreens = realloc(dmxScreens,
+ (dmxNumScreens+1) * sizeof(*dmxScreens))))
+ dmxLog(dmxFatal,
+ "dmxConfigAddDisplay: realloc failed for screen %d (%s)\n",
+ dmxNumScreens, name);
+
+ dmxScreen = &dmxScreens[dmxNumScreens];
+ memset(dmxScreen, 0, sizeof(*dmxScreen));
+ dmxScreen->name = name;
+ dmxScreen->index = dmxNumScreens;
+ dmxScreen->scrnWidth = scrnWidth;
+ dmxScreen->scrnHeight = scrnHeight;
+ dmxScreen->scrnX = scrnX;
+ dmxScreen->scrnY = scrnY;
+ dmxScreen->scrnXSign = scrnXSign;
+ dmxScreen->scrnYSign = scrnYSign;
+ dmxScreen->rootWidth = rootWidth;
+ dmxScreen->rootHeight = rootHeight;
+ dmxScreen->rootX = rootX;
+ dmxScreen->rootY = rootY;
+ dmxScreen->stat = dmxStatAlloc();
+ ++dmxNumScreens;
+ return dmxScreen;
+}
+
+DMXInputInfo *dmxConfigAddInput(const char *name, int core)
+{
+ DMXInputInfo *dmxInput;
+
+ if (!(dmxInputs = realloc(dmxInputs,
+ (dmxNumInputs+1) * sizeof(*dmxInputs))))
+ dmxLog(dmxFatal,
+ "dmxConfigAddInput: realloc failed for input %d (%s)\n",
+ dmxNumInputs, name);
+
+ dmxInput = &dmxInputs[dmxNumInputs];
+
+ memset(dmxInput, 0, sizeof(*dmxInput));
+ dmxInput->name = name;
+ dmxInput->inputIdx = dmxNumInputs;
+ dmxInput->scrnIdx = -1;
+ dmxInput->core = core;
+ ++dmxNumInputs;
+ return dmxInput;
+}
+
+static void dmxConfigCopyFromDisplay(DMXConfigDisplayPtr d)
+{
+ DMXScreenInfo *dmxScreen;
+
+ dmxScreen = dmxConfigAddDisplay(d->name,
+ d->scrnWidth, d->scrnHeight,
+ d->scrnX, d->scrnY,
+ d->scrnXSign, d->scrnYSign,
+ d->rootWidth, d->rootHeight,
+ d->rootX, d->rootY,
+ d->rootXSign, d->rootXSign);
+ dmxScreen->where = PosAbsolute;
+ dmxScreen->whereX = d->rootXOrigin;
+ dmxScreen->whereY = d->rootYOrigin;
+}
+
+static void dmxConfigCopyFromWall(DMXConfigWallPtr w)
+{
+ DMXConfigStringPtr pt;
+ DMXScreenInfo *dmxScreen;
+ int edge = dmxNumScreens;
+ int last = dmxNumScreens;
+
+ if (!w->xwall && !w->ywall) { /* Try to make it square */
+ int count;
+ for (pt = w->nameList, count = 0; pt; pt = pt->next) ++count;
+ w->xwall = sqrt(count) + .5;
+ }
+
+ for (pt = w->nameList; pt; pt = pt->next) {
+ dmxScreen = dmxConfigAddDisplay(pt->string, w->width, w->height,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+ if (pt == w->nameList) { /* Upper left */
+ dmxScreen->where = PosAbsolute;
+ dmxScreen->whereX = 0;
+ dmxScreen->whereY = 0;
+ } else if (w->xwall) { /* Tile left to right, then top to bottom */
+ if (!((dmxNumScreens-1) % w->xwall)) {
+ dmxScreen->where = PosBelow;
+ dmxScreen->whereRefScreen = edge;
+ edge = dmxNumScreens-1;
+ } else {
+ dmxScreen->where = PosRightOf;
+ dmxScreen->whereRefScreen = last;
+ }
+ } else { /* Tile top to bottom, then left to right */
+ if (!((dmxNumScreens-1) % w->ywall)) {
+ dmxScreen->where = PosRightOf;
+ dmxScreen->whereRefScreen = edge;
+ edge = dmxNumScreens-1;
+ } else {
+ dmxScreen->where = PosBelow;
+ dmxScreen->whereRefScreen = last;
+ }
+
+ }
+ last = dmxNumScreens-1;
+ if (dmxScreen->where == PosAbsolute)
+ dmxLog(dmxInfo, "Added %s at %d %d\n",
+ pt->string, dmxScreen->whereX, dmxScreen->whereY);
+ else
+ dmxLog(dmxInfo, "Added %s %s %s\n",
+ pt->string,
+ dmxScreen->where == PosBelow ? "below" : "right of",
+ dmxScreens[dmxScreen->whereRefScreen].name);
+ }
+}
+
+static void dmxConfigCopyFromOption(DMXConfigOptionPtr o)
+{
+ DMXConfigStringPtr pt;
+ int argc = 0;
+ char **argv = NULL;
+
+ if (serverGeneration != 1) return; /* FIXME: only do once, for now */
+ if (!o || !o->string) return;
+ for (pt = o->option; pt; pt = pt->next) {
+ if (pt->string) {
+ ++argc;
+ argv = realloc(argv, (argc+1) * sizeof(*argv));
+ argv[argc] = (char *)pt->string;
+ }
+ }
+ argv[0] = NULL;
+ ProcessCommandLine(argc+1, argv);
+ free(argv);
+}
+
+static void dmxConfigCopyFromParam(DMXConfigParamPtr p)
+{
+ const char **argv;
+ int argc;
+
+ if ((argv = dmxConfigLookupParam(p, "xkbrules", &argc)) && argc == 2) {
+ dmxConfigSetXkbRules(argv[1]);
+ } else if ((argv = dmxConfigLookupParam(p, "xkbmodel", &argc))
+ && argc == 2) {
+ dmxConfigSetXkbModel(argv[1]);
+ } else if ((argv = dmxConfigLookupParam(p, "xkblayout", &argc))
+ && argc == 2) {
+ dmxConfigSetXkbLayout(argv[1]);
+ } else if ((argv = dmxConfigLookupParam(p, "xkbvariant", &argc))
+ && argc == 2) {
+ dmxConfigSetXkbVariant(argv[1]);
+ } else if ((argv = dmxConfigLookupParam(p, "xkboptions", &argc))
+ && argc == 2) {
+ dmxConfigSetXkbOptions(argv[1]);
+ }
+}
+
+static void dmxConfigCopyData(DMXConfigVirtualPtr v)
+{
+ DMXConfigSubPtr sub;
+
+ if (v->dim) dmxSetWidthHeight(v->dim->x, v->dim->y);
+ else dmxSetWidthHeight(0, 0);
+ for (sub = v->subentry; sub; sub = sub->next) {
+ switch (sub->type) {
+ case dmxConfigDisplay: dmxConfigCopyFromDisplay(sub->display); break;
+ case dmxConfigWall: dmxConfigCopyFromWall(sub->wall); break;
+ case dmxConfigOption: dmxConfigCopyFromOption(sub->option); break;
+ case dmxConfigParam: dmxConfigCopyFromParam(sub->param); break;
+ default:
+ dmxLog(dmxFatal,
+ "dmxConfigCopyData: not a display, wall, or value\n");
+ }
+ }
+}
+
+static void dmxConfigFromCommandLine(void)
+{
+ DMXConfigListPtr pt;
+
+ dmxLog(dmxInfo, "Using configuration from command line\n");
+ for (pt = dmxConfigCmd.displays; pt; pt = pt->next) {
+ DMXScreenInfo *dmxScreen = dmxConfigAddDisplay(pt->name,
+ 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0);
+ if (dmxNumScreens == 1) {
+ dmxScreen->where = PosAbsolute;
+ dmxScreen->whereX = 0;
+ dmxScreen->whereY = 0;
+ dmxLog(dmxInfo, "Added %s at %d %d\n",
+ dmxScreen->name, dmxScreen->whereX, dmxScreen->whereY);
+ } else {
+ dmxScreen->where = PosRightOf;
+ dmxScreen->whereRefScreen = dmxNumScreens - 2;
+ if (dmxScreen->whereRefScreen < 0) dmxScreen->whereRefScreen = 0;
+ dmxLog(dmxInfo, "Added %s %s %s\n",
+ dmxScreen->name,
+ dmxScreen->where == PosBelow ? "below" : "right of",
+ dmxScreens[dmxScreen->whereRefScreen].name);
+ }
+ }
+}
+
+static void dmxConfigFromConfigFile(void)
+{
+ DMXConfigEntryPtr pt;
+ const char *name;
+
+ for (pt = dmxConfigEntry; pt; pt = pt->next) {
+ /* FIXME -- if an input is specified, use it */
+ if (pt->type != dmxConfigVirtual) continue;
+ if ((name = dmxConfigMatch(dmxConfigCmd.config, pt))) {
+ dmxLog(dmxInfo, "Using configuration \"%s\"\n", name);
+ dmxConfigCopyData(pt->virtual);
+ return;
+ }
+ }
+ dmxLog(dmxFatal, "Could not find configuration \"%s\" in \"%s\"\n",
+ dmxConfigCmd.config, dmxConfigCmd.filename);
+}
+
+static void dmxConfigConfigInputs(void)
+{
+ DMXConfigListPtr pt;
+
+ if (dmxNumInputs) return;
+
+ if (dmxConfigCmd.inputs) { /* Use command line */
+ for (pt = dmxConfigCmd.inputs; pt; pt = pt->next)
+ dmxConfigAddInput(pt->name, TRUE);
+ } else if (dmxNumScreens) { /* Use first display */
+ dmxConfigAddInput(dmxScreens[0].name, TRUE);
+ } else { /* Use dummy */
+ dmxConfigAddInput("dummy", TRUE);
+ }
+
+ if (dmxConfigCmd.xinputs) { /* Non-core devices from command line */
+ for (pt = dmxConfigCmd.xinputs; pt; pt = pt->next)
+ dmxConfigAddInput(pt->name, FALSE);
+ }
+}
+
+/** Set up the appropriate global variables so that the DMX server will
+ * be initialized using the configuration specified in the config file
+ * and on the command line. */
+void dmxConfigConfigure(void)
+{
+ if (dmxConfigEntry) {
+ dmxConfigFreeEntry(dmxConfigEntry);
+ dmxConfigEntry = NULL;
+ }
+ if (dmxConfigCmd.filename) {
+ if (dmxConfigCmd.displays)
+ dmxLog(dmxWarning,
+ "Using configuration file \"%s\" instead of command line\n",
+ dmxConfigCmd.filename);
+ dmxConfigReadFile(dmxConfigCmd.filename, 0);
+ dmxConfigFromConfigFile();
+ } else {
+ if (dmxConfigCmd.config)
+ dmxLog(dmxWarning,
+ "Configuration name (%s) without configuration file\n",
+ dmxConfigCmd.config);
+ dmxConfigFromCommandLine();
+ }
+ dmxConfigConfigInputs();
+}
+
+/** This function determines the number of displays we WILL have and
+ * sets MAXSCREENS to that value. This is difficult since the number
+ * depends on the command line (which is easy to count) or on the config
+ * file, which has to be parsed. */
+void dmxConfigSetMaxScreens(void)
+{
+ static int processing = 0;
+
+ if (processing) return; /* Prevent reentry via ProcessCommandLine */
+ processing = 1;
+ if (dmxConfigCmd.filename) {
+ if (!dmxNumScreens)
+ dmxConfigConfigure();
+#ifndef MAXSCREENS
+ SetMaxScreens(dmxNumScreens);
+#endif
+ } else
+#ifndef MAXSCREENS
+ SetMaxScreens(dmxDisplaysFromCommandLine);
+#endif
+ processing = 0;
+}
+
+/** This macro is used to generate the following access methods:
+ * - dmxConfig{Set,Get}rules
+ * - dmxConfig{Set,Get}model
+ * - dmxConfig{Set,Get}layout
+ * - dmxConfig{Set,Get}variant
+ * - dmxConfig{Set,Get}options
+ * These methods are used to read and write information about the keyboard. */
+
+#define GEN(param,glob,def) \
+ void dmxConfigSet##glob(const char *param) { \
+ if (dmx##glob) free((void *)dmx##glob); \
+ dmx##glob = strdup(param); \
+ } \
+ char *dmxConfigGet##glob(void) { \
+ return (char *)(dmx##glob ? dmx##glob : def); \
+ }
+
+GEN(rules, XkbRules, XKB_DFLT_RULES)
+GEN(model, XkbModel, XKB_DFLT_MODEL)
+GEN(layout, XkbLayout, XKB_DFLT_LAYOUT)
+GEN(variant, XkbVariant, XKB_DFLT_VARIANT)
+GEN(options, XkbOptions, XKB_DFLT_OPTIONS)
diff --git a/hw/dmx/config/dmxconfig.h b/hw/dmx/config/dmxconfig.h
new file mode 100644
index 0000000..91a6662
--- /dev/null
+++ b/hw/dmx/config/dmxconfig.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for DMX configuration file support. \see dmxconfig.c */
+
+#ifndef _DMXCONFIG_H_
+#define _DMXCONFIG_H_
+
+#include <xkb-config.h>
+
+extern void dmxConfigStoreDisplay(const char *display);
+extern void dmxConfigStoreInput(const char *input); /* Core devices */
+extern void dmxConfigStoreXInput(const char *input); /* Non-core devices */
+extern void dmxConfigStoreFile(const char *file);
+extern void dmxConfigStoreConfig(const char *config);
+extern void dmxConfigConfigure(void);
+extern void dmxConfigSetMaxScreens(void);
+
+extern void dmxConfigSetXkbRules(const char *rules);
+extern void dmxConfigSetXkbModel(const char *model);
+extern void dmxConfigSetXkbLayout(const char *layout);
+extern void dmxConfigSetXkbVariant(const char *variant);
+extern void dmxConfigSetXkbOptions(const char *options);
+
+extern char *dmxConfigGetXkbRules(void);
+extern char *dmxConfigGetXkbModel(void);
+extern char *dmxConfigGetXkbLayout(void);
+extern char *dmxConfigGetXkbVariant(void);
+extern char *dmxConfigGetXkbOptions(void);
+#endif
diff --git a/hw/dmx/config/dmxparse.c b/hw/dmx/config/dmxparse.c
new file mode 100644
index 0000000..35f1c21
--- /dev/null
+++ b/hw/dmx/config/dmxparse.c
@@ -0,0 +1,607 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This file provides support routines and helper functions to be used
+ * by the DMX configuration file parser.
+ *
+ * Because the DMX configuration file parsing should be capable of being
+ * used in a stand-alone fashion (i.e., independent from the DMX server
+ * source tree), no dependencies on other DMX routines are made. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include "dmxparse.h"
+
+/** A general error logging routine that does not depend on the dmxLog
+ * functions. */
+void dmxConfigLog(const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ vprintf(format, args); /* RATS: All calls to dmxConfigLog from
+ * dmxparse.c and dmxprint.c use a
+ * trusted format. */
+ va_end(args);
+}
+
+void *dmxConfigAlloc(unsigned long bytes)
+{
+ void *area = calloc(1, bytes);
+ if (!area) {
+ dmxConfigLog("dmxConfigAlloc: out of memory\n");
+ return NULL;
+ }
+ return area;
+}
+
+void *dmxConfigRealloc(void *orig, unsigned long orig_bytes,
+ unsigned long bytes)
+{
+ unsigned char *area = realloc(orig, bytes);
+ if (!area) {
+ dmxConfigLog("dmxConfigRealloc: out of memory\n");
+ return NULL;
+ }
+ memset(area + orig_bytes, 0, bytes - orig_bytes);
+ return area;
+}
+
+const char *dmxConfigCopyString(const char *string, int length)
+{
+ char *copy;
+
+ if (!length) length = strlen(string);
+ copy = dmxConfigAlloc(length + 1);
+ if (length) strncpy(copy, string, length);
+ copy[length] = '\0';
+ return copy;
+}
+
+void dmxConfigFree(void *area)
+{
+ free(area);
+}
+
+DMXConfigTokenPtr dmxConfigCreateToken(int token, int line,
+ const char *comment)
+{
+ DMXConfigTokenPtr pToken = dmxConfigAlloc(sizeof(*pToken));
+ pToken->token = token;
+ pToken->line = line;
+ pToken->comment = comment;
+ return pToken;
+}
+
+void dmxConfigFreeToken(DMXConfigTokenPtr p)
+{
+ if (!p) return;
+ dmxConfigFree((void *)p->comment);
+ dmxConfigFree(p);
+}
+
+DMXConfigStringPtr dmxConfigCreateString(int token, int line,
+ const char *comment,
+ const char *string)
+{
+ DMXConfigStringPtr pString = dmxConfigAlloc(sizeof(*pString));
+
+ pString->token = token;
+ pString->line = line;
+ pString->comment = comment;
+ pString->string = string;
+ return pString;
+}
+
+void dmxConfigFreeString(DMXConfigStringPtr p)
+{
+ DMXConfigStringPtr next;
+
+ if (!p) return;
+ do {
+ next = p->next;
+ dmxConfigFree((void *)p->comment);
+ dmxConfigFree((void *)p->string);
+ dmxConfigFree(p);
+ } while ((p = next));
+}
+
+DMXConfigNumberPtr dmxConfigCreateNumber(int token, int line,
+ const char *comment,
+ int number)
+{
+ DMXConfigNumberPtr pNumber = dmxConfigAlloc(sizeof(*pNumber));
+
+ pNumber->token = token;
+ pNumber->line = line;
+ pNumber->comment = comment;
+ pNumber->number = number;
+ return pNumber;
+}
+
+void dmxConfigFreeNumber(DMXConfigNumberPtr p)
+{
+ if (!p) return;
+ dmxConfigFree((void *)p->comment);
+ dmxConfigFree(p);
+}
+
+DMXConfigPairPtr dmxConfigCreatePair(int token, int line,
+ const char *comment,
+ int x, int y,
+ int xsign, int ysign)
+{
+ DMXConfigPairPtr pPair = dmxConfigAlloc(sizeof(*pPair));
+
+ pPair->token = token;
+ pPair->line = line;
+ pPair->comment = comment;
+ pPair->x = x;
+ pPair->y = y;
+ pPair->xsign = (xsign < 0) ? -1 : 1;
+ pPair->ysign = (ysign < 0) ? -1 : 1;
+ return pPair;
+}
+
+void dmxConfigFreePair(DMXConfigPairPtr p)
+{
+ if (!p) return;
+ dmxConfigFree((void *)p->comment);
+ dmxConfigFree(p);
+}
+
+DMXConfigCommentPtr dmxConfigCreateComment(int token, int line,
+ const char *comment)
+{
+ DMXConfigCommentPtr pComment = dmxConfigAlloc(sizeof(*pComment));
+
+ pComment->token = token;
+ pComment->line = line;
+ pComment->comment = comment;
+ return pComment;
+}
+
+void dmxConfigFreeComment(DMXConfigCommentPtr p)
+{
+ if (!p) return;
+ dmxConfigFree((void *)p->comment);
+ dmxConfigFree(p);
+}
+
+DMXConfigPartDimPtr dmxConfigCreatePartDim(DMXConfigPairPtr pDim,
+ DMXConfigPairPtr pOffset)
+{
+ DMXConfigPartDimPtr pPart = dmxConfigAlloc(sizeof(*pPart));
+ pPart->dim = pDim;
+ pPart->offset = pOffset;
+ return pPart;
+}
+
+void dmxConfigFreePartDim(DMXConfigPartDimPtr p)
+{
+ if (!p) return;
+ dmxConfigFreePair(p->dim);
+ dmxConfigFreePair(p->offset);
+ dmxConfigFree(p);
+}
+
+DMXConfigFullDimPtr dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn,
+ DMXConfigPartDimPtr pRoot)
+{
+ DMXConfigFullDimPtr pFull = dmxConfigAlloc(sizeof(*pFull));
+ pFull->scrn = pScrn;
+ pFull->root = pRoot;
+ return pFull;
+}
+
+void dmxConfigFreeFullDim(DMXConfigFullDimPtr p)
+{
+ if (!p) return;
+ dmxConfigFreePartDim(p->scrn);
+ dmxConfigFreePartDim(p->root);
+ dmxConfigFree(p);
+}
+
+DMXConfigDisplayPtr dmxConfigCreateDisplay(DMXConfigTokenPtr pStart,
+ DMXConfigStringPtr pName,
+ DMXConfigFullDimPtr pDim,
+ DMXConfigPairPtr pOrigin,
+ DMXConfigTokenPtr pEnd)
+{
+ DMXConfigDisplayPtr pDisplay = dmxConfigAlloc(sizeof(*pDisplay));
+
+ pDisplay->start = pStart;
+ pDisplay->dname = pName;
+ pDisplay->dim = pDim;
+ pDisplay->origin = pOrigin;
+ pDisplay->end = pEnd;
+
+ pDisplay->name = pName ? pName->string : NULL;
+ pDisplay->rootXOrigin = pOrigin ? pOrigin->x : 0;
+ pDisplay->rootYOrigin = pOrigin ? pOrigin->y : 0;
+
+ if (pDim && pDim->scrn && pDim->scrn->dim) {
+ pDisplay->scrnWidth = pDim->scrn->dim->x;
+ pDisplay->scrnHeight = pDim->scrn->dim->y;
+ }
+ if (pDim && pDim->scrn && pDim->scrn->offset) {
+ pDisplay->scrnX = pDim->scrn->offset->x;
+ pDisplay->scrnY = pDim->scrn->offset->y;
+ pDisplay->scrnXSign = pDim->scrn->offset->xsign;
+ pDisplay->scrnYSign = pDim->scrn->offset->ysign;
+ }
+
+ if (pDim && pDim->root) {
+ if (pDim->root->dim) {
+ pDisplay->rootWidth = pDim->root->dim->x;
+ pDisplay->rootHeight = pDim->root->dim->y;
+ }
+ if (pDim->root->offset) {
+ pDisplay->rootX = pDim->root->offset->x;
+ pDisplay->rootY = pDim->root->offset->y;
+ pDisplay->rootXSign = pDim->root->offset->xsign;
+ pDisplay->rootYSign = pDim->root->offset->ysign;
+ }
+ } else { /* If no root specification, copy width
+ * and height from scrn -- leave offset
+ * as zero, since it is relative to
+ * scrn. */
+ pDisplay->rootWidth = pDisplay->scrnWidth;
+ pDisplay->rootHeight = pDisplay->scrnHeight;
+ }
+
+
+ return pDisplay;
+}
+
+void dmxConfigFreeDisplay(DMXConfigDisplayPtr p)
+{
+ if (!p) return;
+ dmxConfigFreeToken(p->start);
+ dmxConfigFreeString(p->dname);
+ dmxConfigFreeFullDim(p->dim);
+ dmxConfigFreeToken(p->end);
+ dmxConfigFree(p);
+}
+
+DMXConfigWallPtr dmxConfigCreateWall(DMXConfigTokenPtr pStart,
+ DMXConfigPairPtr pWallDim,
+ DMXConfigPairPtr pDisplayDim,
+ DMXConfigStringPtr pNameList,
+ DMXConfigTokenPtr pEnd)
+{
+ DMXConfigWallPtr pWall = dmxConfigAlloc(sizeof(*pWall));
+
+ pWall->start = pStart;
+ pWall->wallDim = pWallDim;
+ pWall->displayDim = pDisplayDim;
+ pWall->nameList = pNameList;
+ pWall->end = pEnd;
+
+ pWall->width = pDisplayDim ? pDisplayDim->x : 0;
+ pWall->height = pDisplayDim ? pDisplayDim->y : 0;
+ pWall->xwall = pWallDim ? pWallDim->x : 0;
+ pWall->ywall = pWallDim ? pWallDim->y : 0;
+
+ return pWall;
+}
+
+void dmxConfigFreeWall(DMXConfigWallPtr p)
+{
+ if (!p) return;
+ dmxConfigFreeToken(p->start);
+ dmxConfigFreePair(p->wallDim);
+ dmxConfigFreePair(p->displayDim);
+ dmxConfigFreeString(p->nameList);
+ dmxConfigFreeToken(p->end);
+ dmxConfigFree(p);
+}
+
+DMXConfigOptionPtr dmxConfigCreateOption(DMXConfigTokenPtr pStart,
+ DMXConfigStringPtr pOption,
+ DMXConfigTokenPtr pEnd)
+{
+ int length = 0;
+ int offset = 0;
+ DMXConfigStringPtr p;
+ DMXConfigOptionPtr option = dmxConfigAlloc(sizeof(*option));
+
+ for (p = pOption; p; p = p->next) {
+ if (p->string) length += strlen(p->string) + 1;
+ }
+
+ option->string = dmxConfigAlloc(length + 1);
+
+ for (p = pOption; p; p = p->next) {
+ if (p->string) {
+ int len = strlen(p->string);
+ strncpy(option->string + offset, p->string, len);
+ offset += len;
+ if (p->next) option->string[offset++] = ' ';
+ }
+ }
+ option->string[offset] = '\0';
+
+ option->start = pStart;
+ option->option = pOption;
+ option->end = pEnd;
+
+ return option;
+}
+
+void dmxConfigFreeOption(DMXConfigOptionPtr p)
+{
+ if (!p) return;
+ free(p->string);
+ dmxConfigFreeToken(p->start);
+ dmxConfigFreeString(p->option);
+ dmxConfigFreeToken(p->end);
+ dmxConfigFree(p);
+}
+
+const char **dmxConfigLookupParam(DMXConfigParamPtr p, const char *key,
+ int *argc)
+{
+ DMXConfigParamPtr pt;
+
+ for (pt = p; pt; pt = pt->next) {
+ if (pt->argv && !strcasecmp(pt->argv[0], key)) {
+ *argc = pt->argc;
+ return pt->argv;
+ }
+ }
+ *argc = 0;
+ return NULL;
+}
+
+DMXConfigParamPtr dmxConfigCreateParam(DMXConfigTokenPtr pStart,
+ DMXConfigTokenPtr pOpen,
+ DMXConfigStringPtr pParam,
+ DMXConfigTokenPtr pClose,
+ DMXConfigTokenPtr pEnd)
+{
+ DMXConfigParamPtr param = dmxConfigAlloc(sizeof(*param));
+ DMXConfigStringPtr pt;
+
+ param->argc = 0;
+ param->argv = NULL;
+ for (pt = pParam; pt; pt = pt->next) {
+ if (pt->string) {
+ param->argv = realloc(param->argv,
+ (param->argc+2) * sizeof(*param->argv));
+ param->argv[param->argc] = pt->string;
+ ++param->argc;
+ }
+ }
+ if (param->argv) param->argv[param->argc] = NULL;
+
+ param->start = pStart;
+ param->open = pOpen;
+ param->param = pParam;
+ param->close = pClose;
+ param->end = pEnd;
+
+ return param;
+}
+
+void dmxConfigFreeParam(DMXConfigParamPtr p)
+{
+ DMXConfigParamPtr next;
+
+ if (!p) return;
+ do {
+ next = p->next;
+ dmxConfigFreeToken(p->start);
+ dmxConfigFreeToken(p->open);
+ dmxConfigFreeString(p->param);
+ dmxConfigFreeToken(p->close);
+ dmxConfigFreeToken(p->end);
+ dmxConfigFree(p->argv);
+ dmxConfigFree(p);
+ } while ((p = next));
+}
+
+DMXConfigSubPtr dmxConfigCreateSub(DMXConfigType type,
+ DMXConfigCommentPtr comment,
+ DMXConfigDisplayPtr display,
+ DMXConfigWallPtr wall,
+ DMXConfigOptionPtr option,
+ DMXConfigParamPtr param)
+{
+ DMXConfigSubPtr pSub = dmxConfigAlloc(sizeof(*pSub));
+ pSub->type = type;
+ switch (type) {
+ case dmxConfigComment: pSub->comment = comment; break;
+ case dmxConfigDisplay: pSub->display = display; break;
+ case dmxConfigWall: pSub->wall = wall; break;
+ case dmxConfigOption: pSub->option = option; break;
+ case dmxConfigParam: pSub->param = param; break;
+ default: dmxConfigLog("Type %d not supported in subentry\n", type); break;
+ }
+ return pSub;
+}
+
+void dmxConfigFreeSub(DMXConfigSubPtr sub)
+{
+ DMXConfigSubPtr pt;
+
+ for (pt = sub; pt; pt = pt->next) {
+ switch (pt->type) {
+ case dmxConfigComment: dmxConfigFreeComment(pt->comment); break;
+ case dmxConfigDisplay: dmxConfigFreeDisplay(pt->display); break;
+ case dmxConfigWall: dmxConfigFreeWall(pt->wall); break;
+ case dmxConfigOption: dmxConfigFreeOption(pt->option); break;
+ case dmxConfigParam: dmxConfigFreeParam(pt->param); break;
+ default:
+ dmxConfigLog("Type %d not supported in subentry\n", pt->type);
+ break;
+ }
+ }
+ dmxConfigFree(sub);
+}
+
+DMXConfigSubPtr dmxConfigSubComment(DMXConfigCommentPtr comment)
+{
+ return dmxConfigCreateSub(dmxConfigComment, comment, NULL, NULL, NULL,
+ NULL);
+}
+
+DMXConfigSubPtr dmxConfigSubDisplay(DMXConfigDisplayPtr display)
+{
+ return dmxConfigCreateSub(dmxConfigDisplay, NULL, display, NULL, NULL,
+ NULL);
+}
+
+DMXConfigSubPtr dmxConfigSubWall(DMXConfigWallPtr wall)
+{
+ return dmxConfigCreateSub(dmxConfigWall, NULL, NULL, wall, NULL, NULL);
+}
+
+DMXConfigSubPtr dmxConfigSubOption(DMXConfigOptionPtr option)
+{
+ return dmxConfigCreateSub(dmxConfigOption, NULL, NULL, NULL, option, NULL);
+}
+
+DMXConfigSubPtr dmxConfigSubParam(DMXConfigParamPtr param)
+{
+ return dmxConfigCreateSub(dmxConfigParam, NULL, NULL, NULL, NULL, param);
+}
+
+extern DMXConfigSubPtr dmxConfigAddSub(DMXConfigSubPtr head,
+ DMXConfigSubPtr sub)
+{
+ DMXConfigSubPtr pt;
+
+ if (!head) return sub;
+ for (pt = head; pt->next; pt = pt->next);
+ pt->next = sub;
+ return head;
+}
+
+DMXConfigVirtualPtr dmxConfigCreateVirtual(DMXConfigTokenPtr pStart,
+ DMXConfigStringPtr pName,
+ DMXConfigPairPtr pDim,
+ DMXConfigTokenPtr pOpen,
+ DMXConfigSubPtr pSubentry,
+ DMXConfigTokenPtr pClose)
+{
+ DMXConfigVirtualPtr pVirtual = dmxConfigAlloc(sizeof(*pVirtual));
+
+ pVirtual->start = pStart;
+ pVirtual->vname = pName;
+ pVirtual->dim = pDim;
+ pVirtual->open = pOpen;
+ pVirtual->subentry = pSubentry;
+ pVirtual->close = pClose;
+
+ pVirtual->name = pName ? pName->string : NULL;
+ pVirtual->width = pDim ? pDim->x : 0;
+ pVirtual->height = pDim ? pDim->y : 0;
+
+ return pVirtual;
+}
+
+void dmxConfigFreeVirtual(DMXConfigVirtualPtr virtual)
+{
+ dmxConfigFreeToken(virtual->start);
+ dmxConfigFreeString(virtual->vname);
+ dmxConfigFreePair(virtual->dim);
+ dmxConfigFreeToken(virtual->open);
+ dmxConfigFreeSub(virtual->subentry);
+ dmxConfigFreeToken(virtual->close);
+ dmxConfigFree(virtual);
+}
+
+DMXConfigEntryPtr dmxConfigCreateEntry(DMXConfigType type,
+ DMXConfigCommentPtr comment,
+ DMXConfigVirtualPtr virtual)
+{
+ DMXConfigEntryPtr pEntry = dmxConfigAlloc(sizeof(*pEntry));
+ pEntry->type = type;
+ switch (type) {
+ case dmxConfigComment: pEntry->comment = comment; break;
+ case dmxConfigVirtual: pEntry->virtual = virtual; break;
+ default: dmxConfigLog("Type %d not supported in entry\n", type); break;
+ }
+ return pEntry;
+}
+
+void dmxConfigFreeEntry(DMXConfigEntryPtr entry)
+{
+ DMXConfigEntryPtr pt;
+
+ for (pt = entry; pt; pt = pt->next) {
+ switch (pt->type) {
+ case dmxConfigComment: dmxConfigFreeComment(pt->comment); break;
+ case dmxConfigVirtual: dmxConfigFreeVirtual(pt->virtual); break;
+ default:
+ dmxConfigLog("Type %d not supported in entry\n", pt->type);
+ break;
+ }
+ }
+ dmxConfigFree(entry);
+}
+
+DMXConfigEntryPtr dmxConfigAddEntry(DMXConfigEntryPtr head,
+ DMXConfigType type,
+ DMXConfigCommentPtr comment,
+ DMXConfigVirtualPtr virtual)
+{
+ DMXConfigEntryPtr child = dmxConfigCreateEntry(type, comment, virtual);
+ DMXConfigEntryPtr pt;
+
+ if (!head) return child;
+
+ for (pt = head; pt->next; pt = pt->next);
+ pt->next = child;
+
+ return head;
+}
+
+DMXConfigEntryPtr dmxConfigEntryComment(DMXConfigCommentPtr comment)
+{
+ return dmxConfigCreateEntry(dmxConfigComment, comment, NULL);
+}
+
+DMXConfigEntryPtr dmxConfigEntryVirtual(DMXConfigVirtualPtr virtual)
+{
+ return dmxConfigCreateEntry(dmxConfigVirtual, NULL, virtual);
+}
diff --git a/hw/dmx/config/dmxparse.h b/hw/dmx/config/dmxparse.h
new file mode 100644
index 0000000..de81d23
--- /dev/null
+++ b/hw/dmx/config/dmxparse.h
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to DMX configuration file parser. \see dmxparse.c */
+
+#ifndef _DMXPARSE_H_
+#define _DMXPARSE_H_
+
+#include <stdio.h> /* For FILE */
+
+/** Stores tokens not stored in other structures (e.g., keywords and ;) */
+typedef struct _DMXConfigToken {
+ int token;
+ int line;
+ const char *comment;
+} DMXConfigToken, *DMXConfigTokenPtr;
+
+/** Stores parsed strings. */
+typedef struct _DMXConfigString {
+ int token;
+ int line;
+ const char *comment;
+ const char *string;
+ struct _DMXConfigString *next;
+} DMXConfigString, *DMXConfigStringPtr;
+
+/** Stores parsed numbers. */
+typedef struct _DMXConfigNumber {
+ int token;
+ int line;
+ const char *comment;
+ int number;
+} DMXConfigNumber, *DMXConfigNumberPtr;
+
+/** Stores parsed pairs (e.g., x y) */
+typedef struct _DMXConfigPair {
+ int token;
+ int line;
+ const char *comment;
+ int x;
+ int y;
+ int xsign;
+ int ysign;
+} DMXConfigPair, *DMXConfigPairPtr;
+
+/** Stores parsed comments not stored with a token. */
+typedef struct _DMXConfigComment {
+ int token;
+ int line;
+ const char *comment;
+} DMXConfigComment, *DMXConfigCommentPtr;
+
+typedef enum {
+ dmxConfigComment,
+ dmxConfigVirtual,
+ dmxConfigDisplay,
+ dmxConfigWall,
+ dmxConfigOption,
+ dmxConfigParam
+} DMXConfigType;
+
+/** Stores a geometry specification. */
+typedef struct _DMXConfigPartDim {
+ DMXConfigPairPtr dim;
+ DMXConfigPairPtr offset;
+} DMXConfigPartDim, *DMXConfigPartDimPtr;
+
+/** Stores a pair of geometry specifications. */
+typedef struct _DMXConfigFullDim {
+ DMXConfigPartDimPtr scrn;
+ DMXConfigPartDimPtr root;
+} DMXConfigFullDim, *DMXConfigFullDimPtr;
+
+/** Stores parsed display information. */
+typedef struct _DMXConfigDisplay {
+ /* Summary information */
+ const char *name;
+ /* Screen Window Geometry */
+ int scrnWidth, scrnHeight;
+ int scrnX, scrnY;
+ int scrnXSign, scrnYSign;
+ /* Root Window Geometry */
+ int rootWidth, rootHeight;
+ int rootX, rootY;
+ int rootXSign, rootYSign;
+ /* Origin in global space */
+ int rootXOrigin, rootYOrigin;
+
+ /* Raw configuration information */
+ DMXConfigTokenPtr start;
+ DMXConfigStringPtr dname;
+ DMXConfigFullDimPtr dim;
+ DMXConfigPairPtr origin;
+ DMXConfigTokenPtr end;
+} DMXConfigDisplay, *DMXConfigDisplayPtr;
+
+/** Stores parsed wall information. */
+typedef struct _DMXConfigWall {
+ /* Summary information */
+ int width, height; /* dimensions of displays */
+ int xwall, ywall; /* dimensions of wall, in tiles */
+
+
+ /* Raw configuration informaiton */
+ DMXConfigTokenPtr start;
+ DMXConfigPairPtr wallDim;
+ DMXConfigPairPtr displayDim;
+ DMXConfigStringPtr nameList;
+ DMXConfigTokenPtr end;
+} DMXConfigWall, *DMXConfigWallPtr;
+
+/** Stores parsed option information. */
+typedef struct _DMXConfigOption {
+ /* Summary information */
+ char *string;
+
+ /* Raw configuration informaiton */
+ DMXConfigTokenPtr start;
+ DMXConfigStringPtr option;
+ DMXConfigTokenPtr end;
+} DMXConfigOption, *DMXConfigOptionPtr;
+
+/** Stores parsed param information. */
+typedef struct _DMXConfigParam {
+ int argc;
+ const char **argv;
+
+ DMXConfigTokenPtr start;
+ DMXConfigTokenPtr open;
+ DMXConfigStringPtr param;
+ DMXConfigTokenPtr close;
+ DMXConfigTokenPtr end; /* Either open/close OR end */
+ struct _DMXConfigParam *next;
+} DMXConfigParam, *DMXConfigParamPtr;
+
+/** Stores options under an entry (subentry). */
+typedef struct _DMXConfigSub {
+ DMXConfigType type;
+ DMXConfigCommentPtr comment;
+ DMXConfigDisplayPtr display;
+ DMXConfigWallPtr wall;
+ DMXConfigOptionPtr option;
+ DMXConfigParamPtr param;
+ struct _DMXConfigSub *next;
+} DMXConfigSub, *DMXConfigSubPtr;
+
+/** Stores parsed virtual information. */
+typedef struct _DMXConfigVirtual {
+ /* Summary information */
+ const char *name;
+ int width, height;
+
+ /* Raw configuration information */
+ DMXConfigTokenPtr start;
+ DMXConfigStringPtr vname;
+ DMXConfigPairPtr dim;
+ DMXConfigTokenPtr open;
+ DMXConfigSubPtr subentry;
+ DMXConfigTokenPtr close;
+} DMXConfigVirtual, *DMXConfigVirtualPtr;
+
+/** Heads entry storage. */
+typedef struct _DMXConfigEntry {
+ DMXConfigType type;
+ DMXConfigCommentPtr comment;
+ DMXConfigVirtualPtr virtual;
+ struct _DMXConfigEntry *next;
+} DMXConfigEntry, *DMXConfigEntryPtr;
+
+extern DMXConfigEntryPtr dmxConfigEntry;
+
+extern int yylex(void);
+extern int yydebug;
+extern void yyerror(const char *message);
+
+extern void dmxConfigLog(const char *format, ...);
+extern void *dmxConfigAlloc(unsigned long bytes);
+extern void *dmxConfigRealloc(void *orig,
+ unsigned long orig_bytes,
+ unsigned long bytes);
+extern const char *dmxConfigCopyString(const char *string,
+ int length);
+extern void dmxConfigFree(void *area);
+extern DMXConfigTokenPtr dmxConfigCreateToken(int token, int line,
+ const char *comment);
+extern void dmxConfigFreeToken(DMXConfigTokenPtr p);
+extern DMXConfigStringPtr dmxConfigCreateString(int token, int line,
+ const char *comment,
+ const char *string);
+extern void dmxConfigFreeString(DMXConfigStringPtr p);
+extern DMXConfigNumberPtr dmxConfigCreateNumber(int token, int line,
+ const char *comment,
+ int number);
+extern void dmxConfigFreeNumber(DMXConfigNumberPtr p);
+extern DMXConfigPairPtr dmxConfigCreatePair(int token, int line,
+ const char *comment,
+ int x, int y,
+ int xsign, int ysign);
+extern void dmxConfigFreePair(DMXConfigPairPtr p);
+extern DMXConfigCommentPtr dmxConfigCreateComment(int token, int line,
+ const char *comment);
+extern void dmxConfigFreeComment(DMXConfigCommentPtr p);
+extern DMXConfigPartDimPtr dmxConfigCreatePartDim(DMXConfigPairPtr pDim,
+ DMXConfigPairPtr pOffset);
+extern void dmxConfigFreePartDim(DMXConfigPartDimPtr p);
+extern DMXConfigFullDimPtr dmxConfigCreateFullDim(DMXConfigPartDimPtr pScrn,
+ DMXConfigPartDimPtr pRoot);
+extern void dmxConfigFreeFullDim(DMXConfigFullDimPtr p);
+extern DMXConfigDisplayPtr dmxConfigCreateDisplay(DMXConfigTokenPtr pStart,
+ DMXConfigStringPtr pName,
+ DMXConfigFullDimPtr pDim,
+ DMXConfigPairPtr pOrigin,
+ DMXConfigTokenPtr pEnd);
+extern void dmxConfigFreeDisplay(DMXConfigDisplayPtr p);
+extern DMXConfigWallPtr dmxConfigCreateWall(DMXConfigTokenPtr pStart,
+ DMXConfigPairPtr pWallDim,
+ DMXConfigPairPtr pDisplayDim,
+ DMXConfigStringPtr pNameList,
+ DMXConfigTokenPtr pEnd);
+extern void dmxConfigFreeWall(DMXConfigWallPtr p);
+extern DMXConfigOptionPtr dmxConfigCreateOption(DMXConfigTokenPtr pStart,
+ DMXConfigStringPtr pOption,
+ DMXConfigTokenPtr pEnd);
+extern void dmxConfigFreeOption(DMXConfigOptionPtr p);
+extern DMXConfigParamPtr dmxConfigCreateParam(DMXConfigTokenPtr pStart,
+ DMXConfigTokenPtr pOpen,
+ DMXConfigStringPtr pParam,
+ DMXConfigTokenPtr pClose,
+ DMXConfigTokenPtr pEnd);
+extern void dmxConfigFreeParam(DMXConfigParamPtr p);
+extern const char **dmxConfigLookupParam(DMXConfigParamPtr p,
+ const char *key,
+ int *argc);
+extern DMXConfigSubPtr dmxConfigCreateSub(DMXConfigType type,
+ DMXConfigCommentPtr comment,
+ DMXConfigDisplayPtr display,
+ DMXConfigWallPtr wall,
+ DMXConfigOptionPtr option,
+ DMXConfigParamPtr param);
+extern void dmxConfigFreeSub(DMXConfigSubPtr sub);
+extern DMXConfigSubPtr dmxConfigSubComment(DMXConfigCommentPtr comment);
+extern DMXConfigSubPtr dmxConfigSubDisplay(DMXConfigDisplayPtr display);
+extern DMXConfigSubPtr dmxConfigSubWall(DMXConfigWallPtr wall);
+extern DMXConfigSubPtr dmxConfigSubOption(DMXConfigOptionPtr option);
+extern DMXConfigSubPtr dmxConfigSubParam(DMXConfigParamPtr param);
+extern DMXConfigSubPtr dmxConfigAddSub(DMXConfigSubPtr head,
+ DMXConfigSubPtr sub);
+extern DMXConfigVirtualPtr dmxConfigCreateVirtual(DMXConfigTokenPtr pStart,
+ DMXConfigStringPtr pName,
+ DMXConfigPairPtr pDim,
+ DMXConfigTokenPtr pOpen,
+ DMXConfigSubPtr pSubentry,
+ DMXConfigTokenPtr pClose);
+extern void dmxConfigFreeVirtual(DMXConfigVirtualPtr virtual);
+extern DMXConfigEntryPtr dmxConfigCreateEntry(DMXConfigType type,
+ DMXConfigCommentPtr comment,
+ DMXConfigVirtualPtr virtual);
+extern void dmxConfigFreeEntry(DMXConfigEntryPtr entry);
+extern DMXConfigEntryPtr dmxConfigAddEntry(DMXConfigEntryPtr head,
+ DMXConfigType type,
+ DMXConfigCommentPtr comment,
+ DMXConfigVirtualPtr virtual);
+extern DMXConfigEntryPtr dmxConfigEntryComment(DMXConfigCommentPtr comment);
+extern DMXConfigEntryPtr dmxConfigEntryVirtual(DMXConfigVirtualPtr virtual);
+
+#endif
diff --git a/hw/dmx/config/dmxprint.c b/hw/dmx/config/dmxprint.c
new file mode 100644
index 0000000..599ebf5
--- /dev/null
+++ b/hw/dmx/config/dmxprint.c
@@ -0,0 +1,455 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This file provides support routines and helper functions to be used
+ * to pretty-print DMX configurations.
+ *
+ * Because the DMX configuration file parsing should be capable of being
+ * used in a stand-alone fashion (i.e., independent from the DMX server
+ * source tree), no dependencies on other DMX routines are made. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxconfig.h"
+#include "dmxparse.h"
+#include "dmxprint.h"
+#include "parser.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <ctype.h>
+
+static FILE *str = NULL;
+static int indent = 0;
+static int pos = 0;
+
+/** Stack of indentation information used for pretty-printing
+ * configuration information. */
+static struct stack {
+ int base;
+ int comment;
+ int step;
+ struct stack *next;
+} *stack, initialStack = { 0, 0, 4, NULL };
+
+static void dmxConfigIndent(void)
+{
+ int i;
+ if (indent < 0) indent = 0;
+ if (indent > 40) indent = 40;
+ for (i = 0; i < indent; i++) fprintf(str, " ");
+}
+
+static void dmxConfigNewline(void)
+{
+ if (pos) fprintf(str, "\n");
+ pos = 0;
+}
+
+static void dmxConfigPushState(int base, int comment, int step)
+{
+ struct stack *new = dmxConfigAlloc(sizeof(*new));
+ new->base = base;
+ new->comment = comment;
+ new->step = step;
+ new->next = stack;
+ stack = new;
+ indent = base;
+ dmxConfigNewline();
+}
+
+static void dmxConfigPushComment(void)
+{
+ if (stack) indent = stack->comment;
+}
+
+static void dmxConfigPushStep(void)
+{
+ if (stack) indent = stack->step;
+}
+
+static void dmxConfigPopState(void)
+{
+ struct stack *old = stack;
+
+ if (!stack) return;
+ indent = old->base;
+ stack = old->next;
+ if (!stack) dmxConfigLog("Stack underflow\n");
+ dmxConfigFree(old);
+ dmxConfigNewline();
+}
+
+static void dmxConfigOutput(int addSpace, int doNewline, const char *comment,
+ const char *format, ...)
+{
+ va_list args;
+
+ if (!pos) dmxConfigIndent();
+ else if (addSpace) fprintf(str, " ");
+
+ if (format) {
+ va_start(args, format);
+ /* RATS: This hasn't been audited -- it
+ * could probably result in a buffer
+ * overflow. */
+ pos += vfprintf(str, format, args); /* assumes no newlines! */
+ va_end(args);
+ }
+
+ if (comment) {
+ if (pos) fprintf(str, " ");
+ pos += fprintf(str, "#%s", comment);
+ dmxConfigNewline();
+ dmxConfigPushComment();
+ } else if (doNewline) dmxConfigNewline();
+}
+
+static void dmxConfigPrintComment(DMXConfigCommentPtr p)
+{
+ dmxConfigOutput(1, 1, p->comment, NULL);
+}
+
+static void dmxConfigPrintTokenFlag(DMXConfigTokenPtr p, int flag)
+{
+ if (!p) return;
+ switch (p->token) {
+ case T_VIRTUAL:
+ dmxConfigPushState(0, 4, 4);
+ dmxConfigOutput(0, 0, p->comment, "virtual");
+ break;
+ case T_DISPLAY:
+ dmxConfigPushState(4, 12, 16);
+ dmxConfigOutput(0, 0, p->comment, "display");
+ break;
+ case T_WALL:
+ dmxConfigPushState(4, 12, 16);
+ dmxConfigOutput(0, 0, p->comment, "wall");
+ break;
+ case T_OPTION:
+ dmxConfigPushState(4, 12, 16);
+ dmxConfigOutput(0, 0, p->comment, "option");
+ break;
+ case T_PARAM:
+ dmxConfigPushState(4, 8, 12);
+ dmxConfigOutput(0, 0, p->comment, "param");
+ break;
+ case ';':
+ dmxConfigOutput(0, 1, p->comment, ";");
+ if (flag) dmxConfigPopState();
+ break;
+ case '{':
+ dmxConfigOutput(1, 1, p->comment, "{");
+ dmxConfigPushStep();
+ break;
+ case '}':
+ if (flag) dmxConfigPopState();
+ dmxConfigOutput(0, 1, p->comment, "}");
+ break;
+ case '/':
+ dmxConfigOutput(1, 0, NULL, "/");
+ break;
+ default:
+ dmxConfigLog("unknown token %d on line %d\n", p->token, p->line);
+ }
+}
+
+static void dmxConfigPrintToken(DMXConfigTokenPtr p)
+{
+ dmxConfigPrintTokenFlag(p, 1);
+}
+
+static void dmxConfigPrintTokenNopop(DMXConfigTokenPtr p)
+{
+ dmxConfigPrintTokenFlag(p, 0);
+}
+
+static int dmxConfigPrintQuotedString(const char *s)
+{
+ const char *pt;
+
+ if (!s || !s[0]) return 1; /* Quote empty string */
+ for (pt = s; *pt; ++pt) if (isspace(*pt)) return 1;
+ return 0;
+}
+
+static void dmxConfigPrintString(DMXConfigStringPtr p, int quote)
+{
+ DMXConfigStringPtr pt;
+
+ if (!p) return;
+ for (pt = p; pt; pt = pt->next) {
+ if (quote && dmxConfigPrintQuotedString(pt->string)) {
+ dmxConfigOutput(1, 0, pt->comment, "\"%s\"",
+ pt->string ? pt->string : "");
+ } else
+ dmxConfigOutput(1, 0, pt->comment, "%s",
+ pt->string ? pt->string : "");
+ }
+}
+
+static int dmxConfigPrintPair(DMXConfigPairPtr p, int addSpace)
+{
+ const char *format = NULL;
+
+ if (!p) return 0;
+ switch (p->token) {
+ case T_ORIGIN: format = "@%dx%d"; break;
+ case T_DIMENSION: format = "%dx%d"; break;
+ case T_OFFSET: format = "%c%d%c%d"; break;
+ }
+ if (p->token == T_OFFSET) {
+ if (!p->comment && !p->x && !p->y && p->xsign >= 0 && p->ysign >= 0)
+ return 0;
+ dmxConfigOutput(addSpace, 0, p->comment, format,
+ p->xsign < 0 ? '-' : '+', p->x,
+ p->ysign < 0 ? '-' : '+', p->y);
+ } else {
+ if (!p->comment && !p->x && !p->y) return 0;
+ dmxConfigOutput(addSpace, 0, p->comment, format, p->x, p->y);
+ }
+ return 1;
+}
+
+static void dmxConfigPrintDisplay(DMXConfigDisplayPtr p)
+{
+ DMXConfigToken dummyStart = { T_DISPLAY, 0, NULL };
+ DMXConfigToken dummyEnd = { ';', 0, NULL };
+ DMXConfigToken dummySep = { '/', 0, NULL };
+ DMXConfigString dummyName = { T_STRING, 0, NULL, NULL, NULL };
+ DMXConfigPair dummySDim = { T_DIMENSION, 0, NULL, 0, 0, 0, 0 };
+ DMXConfigPair dummySOffset = { T_OFFSET, 0, NULL, 0, 0, 0, 0 };
+ DMXConfigPair dummyRDim = { T_DIMENSION, 0, NULL, 0, 0, 0, 0 };
+ DMXConfigPair dummyROffset = { T_OFFSET, 0, NULL, 0, 0, 0, 0 };
+ DMXConfigPair dummyOrigin = { T_ORIGIN, 0, NULL, 0, 0, 0, 0 };
+ int output;
+
+ if (p->dname) p->dname->string = p->name;
+ else dummyName.string = p->name;
+
+ if (p->dim && p->dim->scrn && p->dim->scrn->dim) {
+ p->dim->scrn->dim->x = p->scrnWidth;
+ p->dim->scrn->dim->y = p->scrnHeight;
+ } else {
+ dummySDim.x = p->scrnWidth;
+ dummySDim.y = p->scrnHeight;
+ }
+
+ if (p->dim && p->dim->scrn && p->dim->scrn->offset) {
+ p->dim->scrn->offset->x = p->scrnX;
+ p->dim->scrn->offset->y = p->scrnY;
+ } else {
+ dummySOffset.x = p->scrnX;
+ dummySOffset.y = p->scrnY;
+ }
+
+ if (p->dim && p->dim->root && p->dim->root->dim) {
+ p->dim->root->dim->x = p->rootWidth;
+ p->dim->root->dim->y = p->rootHeight;
+ } else {
+ dummyRDim.x = p->rootWidth;
+ dummyRDim.y = p->rootHeight;
+ }
+
+ if (p->dim && p->dim->root && p->dim->root->offset) {
+ p->dim->root->offset->x = p->rootX;
+ p->dim->root->offset->y = p->rootY;
+ } else {
+ dummyROffset.x = p->rootX;
+ dummyROffset.y = p->rootY;
+ }
+
+ if (p->origin) {
+ p->origin->x = p->rootXOrigin, p->origin->y = p->rootYOrigin;
+ p->origin->xsign = p->rootXSign, p->origin->ysign = p->rootYSign;
+ } else {
+ dummyOrigin.x = p->rootXOrigin, dummyOrigin.y = p->rootYOrigin;
+ dummyOrigin.xsign = p->rootXSign, dummyOrigin.ysign = p->rootYSign;
+ }
+
+ dmxConfigPrintToken(p->start ? p->start : &dummyStart);
+ dmxConfigPrintString(p->dname ? p->dname : &dummyName, 1);
+
+ if (p->dim && p->dim->scrn && p->dim->scrn->dim)
+ output = dmxConfigPrintPair(p->dim->scrn->dim, 1);
+ else
+ output = dmxConfigPrintPair(&dummySDim, 1);
+ if (p->dim && p->dim->scrn && p->dim->scrn->offset)
+ dmxConfigPrintPair(p->dim->scrn->offset, !output);
+ else
+ dmxConfigPrintPair(&dummySOffset, !output);
+
+ if (p->scrnWidth != p->rootWidth
+ || p->scrnHeight != p->rootHeight
+ || p->rootX
+ || p->rootY) {
+ dmxConfigPrintToken(&dummySep);
+ if (p->dim && p->dim->root && p->dim->root->dim)
+ output = dmxConfigPrintPair(p->dim->root->dim, 1);
+ else
+ output = dmxConfigPrintPair(&dummyRDim, 1);
+ if (p->dim && p->dim->root && p->dim->root->offset)
+ dmxConfigPrintPair(p->dim->root->offset, !output);
+ else
+ dmxConfigPrintPair(&dummyROffset, !output);
+ }
+
+ dmxConfigPrintPair(p->origin ? p->origin : &dummyOrigin, 1);
+ dmxConfigPrintToken(p->end ? p->end : &dummyEnd);
+}
+
+static void dmxConfigPrintWall(DMXConfigWallPtr p)
+{
+ dmxConfigPrintToken(p->start);
+ dmxConfigPrintPair(p->wallDim, 1);
+ dmxConfigPrintPair(p->displayDim, 1);
+ dmxConfigPrintString(p->nameList, 1);
+ dmxConfigPrintToken(p->end);
+}
+
+static void dmxConfigPrintOption(DMXConfigOptionPtr p)
+{
+ DMXConfigToken dummyStart = { T_OPTION, 0, NULL };
+ DMXConfigString dummyOption = { T_STRING, 0, NULL, NULL, NULL };
+ DMXConfigToken dummyEnd = { ';', 0, NULL };
+
+ dummyOption.string = p->string;
+
+ dmxConfigPrintToken(p->start ? p->start : &dummyStart);
+ dmxConfigPrintString(&dummyOption, 0);
+ dmxConfigPrintToken(p->end ? p->end : &dummyEnd);
+}
+
+static void dmxConfigPrintParam(DMXConfigParamPtr p)
+{
+ if (!p) return;
+ if (p->start) {
+ if (p->open && p->close) {
+ dmxConfigPrintToken(p->start);
+ dmxConfigPrintToken(p->open);
+ dmxConfigPrintParam(p->next);
+ dmxConfigPrintToken(p->close);
+ } else if (p->end && p->param) {
+ dmxConfigPrintToken(p->start);
+ dmxConfigPrintString(p->param, 1);
+ dmxConfigPrintToken(p->end);
+ } else
+ dmxConfigLog("dmxConfigPrintParam: cannot handle format (a)\n");
+ } else if (p->end && p->param) {
+ dmxConfigPrintString(p->param, 1);
+ dmxConfigPrintTokenNopop(p->end);
+ dmxConfigPrintParam(p->next);
+ } else
+ dmxConfigLog("dmxConfigPrintParam: cannot handle format (b)\n");
+}
+
+static void dmxConfigPrintSub(DMXConfigSubPtr p)
+{
+ DMXConfigSubPtr pt;
+
+ if (!p) return;
+ for (pt = p; pt; pt = pt->next) {
+ switch (pt->type) {
+ case dmxConfigComment: dmxConfigPrintComment(pt->comment); break;
+ case dmxConfigDisplay: dmxConfigPrintDisplay(pt->display); break;
+ case dmxConfigWall: dmxConfigPrintWall(pt->wall); break;
+ case dmxConfigOption: dmxConfigPrintOption(pt->option); break;
+ case dmxConfigParam: dmxConfigPrintParam(pt->param); break;
+ default:
+ dmxConfigLog("dmxConfigPrintSub:"
+ " cannot handle type %d in subentry\n", pt->type);
+ }
+ }
+}
+
+static void dmxConfigPrintVirtual(DMXConfigVirtualPtr p)
+{
+ DMXConfigToken dummyStart = { T_VIRTUAL, 0, NULL };
+ DMXConfigToken dummyOpen = { '{', 0, NULL };
+ DMXConfigToken dummyClose = { '}', 0, NULL };
+ DMXConfigString dummyName = { T_STRING, 0, NULL, NULL, NULL };
+ DMXConfigPair dummyDim = { T_DIMENSION, 0, NULL, 0, 0 };
+
+ if (p->vname) p->vname->string = p->name;
+ else dummyName.string = p->name;
+
+ if (p->dim) p->dim->x = p->width, p->dim->y = p->height;
+ else dummyDim.x = p->width, dummyDim.y = p->height;
+
+
+ dmxConfigPrintToken(p->start ? p->start : &dummyStart);
+ dmxConfigPrintString(p->vname ? p->vname : &dummyName, 1);
+ dmxConfigPrintPair(p->dim ? p->dim : &dummyDim, 1);
+ dmxConfigPrintToken(p->open ? p->open : &dummyOpen);
+ dmxConfigPrintSub(p->subentry);
+ dmxConfigPrintToken(p->close ? p->close : &dummyClose);
+}
+
+/** The configuration information in \a entry will be pretty-printed to
+ * the \a stream. If \a stream is NULL, then stdout will be used. */
+void dmxConfigPrint(FILE *stream, DMXConfigEntryPtr entry)
+{
+ DMXConfigEntryPtr pt;
+
+ if (!stream) str = stdout;
+ else str = stream;
+
+ stack = &initialStack;
+
+ for (pt = entry; pt; pt = pt->next) {
+ switch (pt->type) {
+ case dmxConfigComment: dmxConfigPrintComment(pt->comment); break;
+ case dmxConfigVirtual: dmxConfigPrintVirtual(pt->virtual); break;
+ default:
+ dmxConfigLog("dmxConfigPrint: cannot handle type %d in entry\n",
+ pt->type);
+ }
+ }
+ if (pos) dmxConfigNewline();
+}
+
+/** The configuration information in \a p will be pretty-printed to the
+ * \a stream. If \a stream is NULL, then stdout will be used. */
+void dmxConfigVirtualPrint(FILE *stream, DMXConfigVirtualPtr p)
+{
+ if (!stream) str = stdout;
+ else str = stream;
+
+ stack = &initialStack;
+
+ dmxConfigPrintVirtual(p);
+ if (pos) dmxConfigNewline();
+}
diff --git a/hw/dmx/config/dmxprint.h b/hw/dmx/config/dmxprint.h
new file mode 100644
index 0000000..d162dea
--- /dev/null
+++ b/hw/dmx/config/dmxprint.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to DMX configuration file pretty-printer. \see dmxprint.c */
+
+#ifndef _DMXPRINT_H_
+#define _DMXPRINT_H_
+
+void dmxConfigPrint(FILE *str, DMXConfigEntryPtr entry);
+void dmxConfigVirtualPrint(FILE *str, DMXConfigVirtualPtr p);
+
+#endif
diff --git a/hw/dmx/config/dmxtodmx.c b/hw/dmx/config/dmxtodmx.c
new file mode 100644
index 0000000..0d4ee4c
--- /dev/null
+++ b/hw/dmx/config/dmxtodmx.c
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ * This is a simple filter for testing.
+ */
+
+#include "dmxconfig.h"
+#include "dmxparse.h"
+#include "dmxprint.h"
+#include "dmxcompat.h"
+
+extern int yyparse(void);
+extern FILE *yyin;
+
+int main(int argc, char **argv)
+{
+ yydebug = 0;
+ yyparse();
+ dmxConfigPrint(stdout, dmxConfigEntry);
+ return 0;
+}
diff --git a/hw/dmx/config/man/Makefile.am b/hw/dmx/config/man/Makefile.am
new file mode 100644
index 0000000..9bb62a4
--- /dev/null
+++ b/hw/dmx/config/man/Makefile.am
@@ -0,0 +1,2 @@
+include $(top_srcdir)/manpages.am
+appman_PRE = xdmxconfig.man vdltodmx.man dmxtodmx.man
diff --git a/hw/dmx/config/man/Makefile.in b/hw/dmx/config/man/Makefile.in
new file mode 100644
index 0000000..a317027
--- /dev/null
+++ b/hw/dmx/config/man/Makefile.in
@@ -0,0 +1,698 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/manpages.am
+subdir = hw/dmx/config/man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(appmandir)" "$(DESTDIR)$(drivermandir)" \
+ "$(DESTDIR)$(filemandir)"
+DATA = $(appman_DATA) $(driverman_DATA) $(fileman_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+
+# Add server specific man pages string substitution from XORG_MANPAGE_SECTIONS
+# 's|/,|/, |g' will add a space to help font path formatting
+MAN_SUBSTS = @MAN_SUBSTS@ -e 's|__logdir__|$(logdir)|g' -e \
+ 's|__datadir__|$(datadir)|g' -e 's|__mandir__|$(mandir)|g' -e \
+ 's|__sysconfdir__|$(sysconfdir)|g' -e \
+ 's|__xconfigdir__|$(__XCONFIGDIR__)|g' -e \
+ 's|__xkbdir__|$(XKB_BASE_DIRECTORY)|g' -e \
+ 's|__laucnd_id_prefix__|$(LAUNCHD_ID_PREFIX)|g' -e \
+ 's|__modulepath__|$(DEFAULT_MODULE_PATH)|g' -e \
+ 's|__default_font_path__|$(COMPILEDDEFAULTFONTPATH)|g' -e \
+ '\|$(COMPILEDDEFAULTFONTPATH)| s|/,|/, |g'
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+appmandir = $(APP_MAN_DIR)
+#appman_PRE = list of application man page files set by calling Makefile.am
+appman_DATA = $(appman_PRE:man=$(APP_MAN_SUFFIX))
+drivermandir = $(DRIVER_MAN_DIR)
+#driverman_PRE = list of driver man page files set by calling Makefile.am
+driverman_DATA = $(driverman_PRE:man=$(DRIVER_MAN_SUFFIX))
+filemandir = $(FILE_MAN_DIR)
+#fileman_PRE = list of file man page files set by calling Makefile.am
+fileman_DATA = $(fileman_PRE:man=$(FILE_MAN_SUFFIX))
+
+# The calling Makefile should only contain man page targets
+# Otherwise the following three global variables may conflict
+EXTRA_DIST = $(appman_PRE) $(driverman_PRE) $(fileman_PRE)
+CLEANFILES = $(appman_DATA) $(driverman_DATA) $(fileman_DATA)
+SUFFIXES = .$(APP_MAN_SUFFIX) .$(DRIVER_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man
+appman_PRE = xdmxconfig.man vdltodmx.man dmxtodmx.man
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .$(APP_MAN_SUFFIX) .$(DRIVER_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/manpages.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/config/man/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/config/man/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appmanDATA: $(appman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appmandir)" || $(MKDIR_P) "$(DESTDIR)$(appmandir)"
+ @list='$(appman_DATA)'; test -n "$(appmandir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appmandir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appmandir)" || exit $$?; \
+ done
+
+uninstall-appmanDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(appman_DATA)'; test -n "$(appmandir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appmandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appmandir)" && rm -f $$files
+install-drivermanDATA: $(driverman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(drivermandir)" || $(MKDIR_P) "$(DESTDIR)$(drivermandir)"
+ @list='$(driverman_DATA)'; test -n "$(drivermandir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(drivermandir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(drivermandir)" || exit $$?; \
+ done
+
+uninstall-drivermanDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(driverman_DATA)'; test -n "$(drivermandir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(drivermandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(drivermandir)" && rm -f $$files
+install-filemanDATA: $(fileman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(filemandir)" || $(MKDIR_P) "$(DESTDIR)$(filemandir)"
+ @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(filemandir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(filemandir)" || exit $$?; \
+ done
+
+uninstall-filemanDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(filemandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(filemandir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(appmandir)" "$(DESTDIR)$(drivermandir)" "$(DESTDIR)$(filemandir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-appmanDATA install-drivermanDATA \
+ install-filemanDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-appmanDATA uninstall-drivermanDATA \
+ uninstall-filemanDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-appmanDATA install-data install-data-am \
+ install-drivermanDATA install-dvi install-dvi-am install-exec \
+ install-exec-am install-filemanDATA install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-appmanDATA \
+ uninstall-drivermanDATA uninstall-filemanDATA
+
+
+.man.$(APP_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+.man.$(DRIVER_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+.man.$(FILE_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/config/man/dmxtodmx.man b/hw/dmx/config/man/dmxtodmx.man
new file mode 100644
index 0000000..68c7f5b
--- /dev/null
+++ b/hw/dmx/config/man/dmxtodmx.man
@@ -0,0 +1,41 @@
+.\" $XFree86$
+.\" Copyright 2002 Red Hat Inc., Durham, North Carolina.
+.\" All Rights Reserved.
+.\"
+.\" Permission is hereby granted, free of charge, to any person obtaining
+.\" a copy of this software and associated documentation files (the
+.\" "Software"), to deal in the Software without restriction, including
+.\" without limitation on the rights to use, copy, modify, merge,
+.\" publish, distribute, sublicense, and/or sell copies of the Software,
+.\" and to permit persons to whom the Software is furnished to do so,
+.\" subject to the following conditions:
+.\"
+.\" The above copyright notice and this permission notice (including the
+.\" next paragraph) shall be included in all copies or substantial
+.\" portions of the Software.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+.\" NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+.\" BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+.\" ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+.\" CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+.\" SOFTWARE.
+.\"
+.\" Authors:
+.\" Rickard E. (Rik) Faith <faith@redhat.com>
+.\"
+.TH dmxtodmx 1 __vendorversion__
+.SH NAME
+dmxtodmx - dmx configuration file parser and printer
+.SH SYNOPSIS
+.B dmxtodmx
+.SH DESCRIPTION
+.I dmxtodmx
+reads the standard input, parsing a configuration file for the
+.I Xdmx
+distributed multi-head X server. After a successful parse, the file is
+pretty-printed to standard output.
+.SH "SEE ALSO"
+Xdmx(1), vdltodmx(1), xdmxconfig(1)
diff --git a/hw/dmx/config/man/vdltodmx.man b/hw/dmx/config/man/vdltodmx.man
new file mode 100644
index 0000000..b733db7
--- /dev/null
+++ b/hw/dmx/config/man/vdltodmx.man
@@ -0,0 +1,95 @@
+.\" $XFree86$
+.\" Copyright 2002 Red Hat Inc., Durham, North Carolina.
+.\" All Rights Reserved.
+.\"
+.\" Permission is hereby granted, free of charge, to any person obtaining
+.\" a copy of this software and associated documentation files (the
+.\" "Software"), to deal in the Software without restriction, including
+.\" without limitation on the rights to use, copy, modify, merge,
+.\" publish, distribute, sublicense, and/or sell copies of the Software,
+.\" and to permit persons to whom the Software is furnished to do so,
+.\" subject to the following conditions:
+.\"
+.\" The above copyright notice and this permission notice (including the
+.\" next paragraph) shall be included in all copies or substantial
+.\" portions of the Software.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+.\" NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+.\" BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+.\" ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+.\" CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+.\" SOFTWARE.
+.\"
+.\" Authors:
+.\" Rickard E. (Rik) Faith <faith@redhat.com>
+.\"
+.TH vdltodmx 1 __vendorversion__
+.SH NAME
+vdltodmx - dmx configuration file parser and printer
+.SH SYNOPSIS
+.B vdltodmx
+.I infile
+.I outfile
+.SH DESCRIPTION
+.I vdltodmx
+reads the input file, which should be in VDL configuration file format.
+After a successful parse, a file in Xdmx configuration file format is
+written to the output file.
+.P
+The VDL file format is used with
+.IR xmovie ,
+which is available from
+http://www.llnl.gov/icc/lc/img/xmovie/xmovie.html
+.SH EXAMPLE
+Given the following VDL-format file:
+.RS
+.nf
+0
+2
+#
+#
+2560 2048 Left two-thirds [restrict=*:2]
+2
+:2.1 1280 2048 0 0 0 0
+:2.2 1280 2048 1280 0 0 0
+4
+1280 1024 0 0
+1280 1024 0 1024
+1280 1024 1280 0
+1280 1024 1280 1024
+#
+2560 2048 Right two-thirds [restrict=*:2]
+2
+:2.2 1280 2048 0 0 0 0
+:2.3 1280 2048 1280 0 0 0
+4
+1280 1024 1280 0
+1280 1024 1280 1024
+1280 1024 2560 0
+1280 1024 2560 1024
+.fi
+.RE
+the following DMX-format file will be produced:
+.RS
+.nf
+#
+#
+virtual "Left two-thirds" 2560x2048 {
+ display :2.1 1280x2048;
+ display :2.2 1280x2048 @1280x0;
+}
+#
+virtual "Right two-thirds" 2560x2048 {
+ display :2.2 1280x2048;
+ display :2.3 1280x2048 @1280x0;
+}
+.fi
+.RE
+.SH BUGS
+If the VDL file is not in the expected format, the program will probably
+dump core.
+.SH "SEE ALSO"
+Xdmx(1), xdmxconfig(1), vdl(3), xmovie(1)
diff --git a/hw/dmx/config/man/xdmxconfig.man b/hw/dmx/config/man/xdmxconfig.man
new file mode 100644
index 0000000..dcceea0
--- /dev/null
+++ b/hw/dmx/config/man/xdmxconfig.man
@@ -0,0 +1,63 @@
+.\" $XFree86$
+.\" Copyright 2002 Red Hat Inc., Durham, North Carolina.
+.\" All Rights Reserved.
+.\"
+.\" Permission is hereby granted, free of charge, to any person obtaining
+.\" a copy of this software and associated documentation files (the
+.\" "Software"), to deal in the Software without restriction, including
+.\" without limitation on the rights to use, copy, modify, merge,
+.\" publish, distribute, sublicense, and/or sell copies of the Software,
+.\" and to permit persons to whom the Software is furnished to do so,
+.\" subject to the following conditions:
+.\"
+.\" The above copyright notice and this permission notice (including the
+.\" next paragraph) shall be included in all copies or substantial
+.\" portions of the Software.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+.\" NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+.\" BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+.\" ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+.\" CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+.\" SOFTWARE.
+.\"
+.\" Authors:
+.\" Rickard E. (Rik) Faith <faith@redhat.com>
+.\"
+.TH xdmxconfig 1 __vendorversion__
+.SH NAME
+xdmxconfig - a graphical configuration tool for Xdmx configuration files
+.SH SYNOPSIS
+.B xdmxconfig
+[filename]
+.SH DESCRIPTION
+.I xdmxconfig
+reads, edits, and writes configuration files for the Xdmx server. The
+grammar for the configuration file is specified in the Xdmx(1) manual
+page.
+.PP
+To start from scratch, create a "New Global" and specify the name and
+overall dimensions for the configuration. Then use "New Display" to
+enter more displays.
+.PP
+If there is more than one configuration, the configuration name button
+will bring up a selection menu.
+.PP
+In the right-hand pannel, the left mouse button will move the
+highlighted display at "tool resolution"; the middle mouse button will
+move the highlighted display by a single pixel (at "wall resolution");
+and the right mouse button will bring up a menu allowing the highlighted
+display to be edited or deleted. The arrow keys will also move the
+highlighted display by a single pixel.
+.SH BUGS
+Currently, entries with the
+.B wall
+keyword are not editable, but will be preserved in the new output file.
+The tool will quit when requested by the user, even if a configuration
+file has not been written out (i.e., without warning). The menu
+interaction should be improved (menu entries that don't currently work
+should be greyed-out, for example). The Help button does not work.
+.SH "SEE ALSO"
+Xdmx(1), vdltodmx(1)
diff --git a/hw/dmx/config/parser.c b/hw/dmx/config/parser.c
new file mode 100644
index 0000000..8af21bd
--- /dev/null
+++ b/hw/dmx/config/parser.c
@@ -0,0 +1,1995 @@
+/* A Bison parser, made by GNU Bison 2.4.3. */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2009, 2010 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.4.3"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+/* Using locations. */
+#define YYLSP_NEEDED 0
+
+
+
+/* Copy the first part of user declarations. */
+
+/* Line 189 of yacc.c */
+#line 35 "parser.y"
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxparse.h"
+#include <string.h>
+#include <stdlib.h>
+#define YYDEBUG 1
+#define YYERROR_VERBOSE
+#define YY_USE_PROTOS
+
+DMXConfigEntryPtr dmxConfigEntry = NULL;
+#define APPEND(type, h, t) \
+{ \
+ type pt; \
+ for (pt = h; pt->next; pt = pt->next); \
+ pt->next = t; \
+}
+
+
+/* Line 189 of yacc.c */
+#line 94 "parser.c"
+
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table. */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ T_VIRTUAL = 258,
+ T_DISPLAY = 259,
+ T_WALL = 260,
+ T_OPTION = 261,
+ T_PARAM = 262,
+ T_STRING = 263,
+ T_DIMENSION = 264,
+ T_OFFSET = 265,
+ T_ORIGIN = 266,
+ T_COMMENT = 267,
+ T_LINE_COMMENT = 268
+ };
+#endif
+/* Tokens. */
+#define T_VIRTUAL 258
+#define T_DISPLAY 259
+#define T_WALL 260
+#define T_OPTION 261
+#define T_PARAM 262
+#define T_STRING 263
+#define T_DIMENSION 264
+#define T_OFFSET 265
+#define T_ORIGIN 266
+#define T_COMMENT 267
+#define T_LINE_COMMENT 268
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c */
+#line 56 "parser.y"
+
+ DMXConfigTokenPtr token;
+ DMXConfigStringPtr string;
+ DMXConfigNumberPtr number;
+ DMXConfigPairPtr pair;
+ DMXConfigFullDimPtr fdim;
+ DMXConfigPartDimPtr pdim;
+ DMXConfigDisplayPtr display;
+ DMXConfigWallPtr wall;
+ DMXConfigOptionPtr option;
+ DMXConfigParamPtr param;
+ DMXConfigCommentPtr comment;
+ DMXConfigSubPtr subentry;
+ DMXConfigVirtualPtr virtual;
+ DMXConfigEntryPtr entry;
+
+
+
+/* Line 214 of yacc.c */
+#line 175 "parser.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations. */
+
+
+/* Line 264 of yacc.c */
+#line 187 "parser.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(msgid) dgettext ("bison-runtime", msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined _STDLIB_H \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef _STDLIB_H
+# define _STDLIB_H 1
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 13
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 106
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 18
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 25
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 59
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 95
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 268
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 6, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 2, 4, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 5, 7, 10, 12, 14, 19, 25,
+ 31, 38, 40, 43, 45, 47, 49, 51, 53, 57,
+ 61, 66, 68, 71, 74, 77, 79, 81, 85, 88,
+ 90, 96, 101, 106, 111, 115, 119, 122, 128, 133,
+ 137, 139, 142, 144, 147, 149, 152, 154, 157, 159,
+ 162, 164, 167, 169, 172, 174, 177, 179, 182, 184
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 19, 0, -1, 20, -1, 21, -1, 20, 21, -1,
+ 22, -1, 17, -1, 7, 39, 23, 40, -1, 7,
+ 35, 39, 23, 40, -1, 7, 34, 39, 23, 40,
+ -1, 7, 34, 35, 39, 23, 40, -1, 24, -1,
+ 23, 24, -1, 17, -1, 31, -1, 32, -1, 25,
+ -1, 26, -1, 10, 42, 38, -1, 11, 42, 38,
+ -1, 11, 39, 27, 40, -1, 28, -1, 27, 28,
+ -1, 42, 38, -1, 35, 36, -1, 35, -1, 36,
+ -1, 29, 6, 29, -1, 6, 29, -1, 29, -1,
+ 33, 34, 30, 37, 38, -1, 33, 30, 37, 38,
+ -1, 33, 34, 37, 38, -1, 33, 34, 30, 38,
+ -1, 33, 30, 38, -1, 33, 34, 38, -1, 33,
+ 38, -1, 41, 35, 35, 42, 38, -1, 41, 35,
+ 42, 38, -1, 41, 42, 38, -1, 8, -1, 8,
+ 16, -1, 12, -1, 12, 16, -1, 13, -1, 13,
+ 16, -1, 14, -1, 14, 16, -1, 15, -1, 15,
+ 16, -1, 5, -1, 5, 16, -1, 3, -1, 3,
+ 16, -1, 4, -1, 4, 16, -1, 9, -1, 9,
+ 16, -1, 34, -1, 42, 34, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint8 yyrline[] =
+{
+ 0, 95, 95, 98, 99, 102, 103, 106, 108, 110,
+ 112, 116, 117, 120, 121, 122, 123, 124, 127, 131,
+ 133, 139, 140, 143, 147, 149, 151, 155, 157, 159,
+ 163, 165, 167, 170, 172, 174, 176, 180, 182, 184,
+ 188, 189, 192, 193, 196, 197, 200, 201, 204, 205,
+ 208, 209, 212, 213, 216, 217, 220, 221, 224, 225
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "'{'", "'}'", "';'", "'/'", "T_VIRTUAL",
+ "T_DISPLAY", "T_WALL", "T_OPTION", "T_PARAM", "T_STRING", "T_DIMENSION",
+ "T_OFFSET", "T_ORIGIN", "T_COMMENT", "T_LINE_COMMENT", "$accept",
+ "Program", "EntryList", "Entry", "Virtual", "SubList", "Sub",
+ "OptionEntry", "ParamEntry", "ParamList", "Param", "PartialDim",
+ "FullDim", "DisplayEntry", "WallEntry", "Display", "Name", "Dimension",
+ "Offset", "Origin", "Terminal", "Open", "Close", "Wall", "NameList", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 123, 125, 59, 47, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 267, 268
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 18, 19, 20, 20, 21, 21, 22, 22, 22,
+ 22, 23, 23, 24, 24, 24, 24, 24, 25, 26,
+ 26, 27, 27, 28, 29, 29, 29, 30, 30, 30,
+ 31, 31, 31, 31, 31, 31, 31, 32, 32, 32,
+ 33, 33, 34, 34, 35, 35, 36, 36, 37, 37,
+ 38, 38, 39, 39, 40, 40, 41, 41, 42, 42
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 1, 1, 2, 1, 1, 4, 5, 5,
+ 6, 1, 2, 1, 1, 1, 1, 1, 3, 3,
+ 4, 1, 2, 2, 2, 1, 1, 3, 2, 1,
+ 5, 4, 4, 4, 3, 3, 2, 5, 4, 3,
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
+ 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 0, 0, 6, 0, 2, 3, 5, 52, 42, 44,
+ 0, 0, 0, 1, 4, 53, 43, 45, 0, 0,
+ 0, 40, 56, 0, 0, 13, 0, 11, 16, 17,
+ 14, 15, 0, 0, 0, 0, 0, 41, 57, 58,
+ 0, 0, 0, 54, 12, 7, 50, 0, 46, 29,
+ 0, 0, 25, 26, 36, 0, 0, 0, 9, 8,
+ 59, 18, 0, 21, 0, 19, 55, 51, 28, 47,
+ 0, 48, 0, 34, 0, 0, 35, 24, 0, 0,
+ 39, 10, 22, 20, 23, 27, 49, 31, 0, 33,
+ 32, 0, 38, 30, 37
+};
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int8 yydefgoto[] =
+{
+ -1, 3, 4, 5, 6, 26, 27, 28, 29, 62,
+ 63, 49, 50, 30, 31, 32, 39, 52, 53, 72,
+ 54, 12, 45, 33, 64
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -32
+static const yytype_int8 yypact[] =
+{
+ -3, 41, -32, 22, -3, -32, -32, 12, 35, 46,
+ 5, 62, 75, -32, -32, -32, -32, -32, 62, 75,
+ 75, 51, 54, 59, 18, -32, 65, -32, -32, -32,
+ -32, -32, 88, 37, 75, 65, 65, -32, -32, -32,
+ 86, 59, 86, 61, -32, -32, 79, -4, 80, 28,
+ 31, 74, 67, -32, -32, 37, 86, 65, -32, -32,
+ -32, -32, 56, -32, 86, -32, -32, -32, -32, -32,
+ -4, 81, 94, -32, 31, 94, -32, -32, 59, 86,
+ -32, -32, -32, -32, -32, -32, -32, -32, 94, -32,
+ -32, 86, -32, -32, -32
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -32, -32, -32, 99, -32, 6, -19, -32, -32, -32,
+ 42, -28, 55, -32, -32, -32, -1, 2, 53, -31,
+ -27, 48, -30, -32, -22
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If zero, do what YYDEFACT says.
+ If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+ 10, 40, 42, 11, 1, 58, 59, 44, 7, 9,
+ 48, 56, 18, 61, 2, 65, 44, 44, 9, 68,
+ 75, 7, 13, 73, 76, 35, 36, 81, 15, 80,
+ 8, 51, 83, 79, 70, 55, 46, 84, 44, 60,
+ 57, 60, 85, 88, 7, 87, 71, 89, 90, 8,
+ 9, 16, 92, 8, 9, 60, 91, 78, 19, 20,
+ 43, 93, 17, 60, 94, 7, 34, 37, 8, 43,
+ 38, 8, 41, 21, 22, 23, 24, 66, 60, 46,
+ 47, 48, 25, 21, 22, 23, 24, 9, 48, 71,
+ 60, 46, 25, 46, 47, 67, 69, 86, 8, 46,
+ 8, 9, 48, 14, 82, 77, 74
+};
+
+static const yytype_uint8 yycheck[] =
+{
+ 1, 23, 24, 1, 7, 35, 36, 26, 3, 13,
+ 14, 33, 10, 40, 17, 42, 35, 36, 13, 47,
+ 51, 3, 0, 50, 51, 19, 20, 57, 16, 56,
+ 12, 32, 62, 55, 6, 33, 5, 64, 57, 40,
+ 34, 42, 70, 74, 3, 72, 15, 74, 75, 12,
+ 13, 16, 79, 12, 13, 56, 78, 55, 10, 11,
+ 4, 88, 16, 64, 91, 3, 18, 16, 12, 4,
+ 16, 12, 24, 8, 9, 10, 11, 16, 79, 5,
+ 6, 14, 17, 8, 9, 10, 11, 13, 14, 15,
+ 91, 5, 17, 5, 6, 16, 16, 16, 12, 5,
+ 12, 13, 14, 4, 62, 52, 51
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 7, 17, 19, 20, 21, 22, 3, 12, 13,
+ 34, 35, 39, 0, 21, 16, 16, 16, 35, 39,
+ 39, 8, 9, 10, 11, 17, 23, 24, 25, 26,
+ 31, 32, 33, 41, 39, 23, 23, 16, 16, 34,
+ 42, 39, 42, 4, 24, 40, 5, 6, 14, 29,
+ 30, 34, 35, 36, 38, 35, 42, 23, 40, 40,
+ 34, 38, 27, 28, 42, 38, 16, 16, 29, 16,
+ 6, 15, 37, 38, 30, 37, 38, 36, 35, 42,
+ 38, 40, 28, 40, 38, 29, 16, 38, 37, 38,
+ 38, 42, 38, 38, 38
+};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ yytoken = YYTRANSLATE (yychar); \
+ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+ If N is 0, then set CURRENT to the empty location which ends
+ the previous symbol: RHS[0] (always defined). */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N) \
+ do \
+ if (YYID (N)) \
+ { \
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
+ } \
+ else \
+ { \
+ (Current).first_line = (Current).last_line = \
+ YYRHSLOC (Rhs, 0).last_line; \
+ (Current).first_column = (Current).last_column = \
+ YYRHSLOC (Rhs, 0).last_column; \
+ } \
+ while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+ This macro was not mandated originally: define only if we know
+ we won't break user code: when these are the locations we know. */
+
+#ifndef YY_LOCATION_PRINT
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
+# define YY_LOCATION_PRINT(File, Loc) \
+ fprintf (File, "%d.%d-%d.%d", \
+ (Loc).first_line, (Loc).first_column, \
+ (Loc).last_line, (Loc).last_column)
+# else
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested. */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
+{
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
+}
+
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
+{
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
+
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+ YYCHAR while in state YYSTATE. Return the number of bytes copied,
+ including the terminating null byte. If YYRESULT is null, do not
+ copy anything; just return the number of bytes that would be
+ copied. As a special case, return 0 if an ordinary "syntax error"
+ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
+ size calculation. */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+ int yyn = yypact[yystate];
+
+ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+ return 0;
+ else
+ {
+ int yytype = YYTRANSLATE (yychar);
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ int yysize_overflow = 0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ int yyx;
+
+# if 0
+ /* This is so xgettext sees the translatable formats that are
+ constructed on the fly. */
+ YY_("syntax error, unexpected %s");
+ YY_("syntax error, unexpected %s, expecting %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+ char *yyfmt;
+ char const *yyf;
+ static char const yyunexpected[] = "syntax error, unexpected %s";
+ static char const yyexpecting[] = ", expecting %s";
+ static char const yyor[] = " or %s";
+ char yyformat[sizeof yyunexpected
+ + sizeof yyexpecting - 1
+ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+ * (sizeof yyor - 1))];
+ char const *yyprefix = yyexpecting;
+
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yycount = 1;
+
+ yyarg[0] = yytname[yytype];
+ yyfmt = yystpcpy (yyformat, yyunexpected);
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ yyformat[sizeof yyunexpected - 1] = '\0';
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+ yyfmt = yystpcpy (yyfmt, yyprefix);
+ yyprefix = yyor;
+ }
+
+ yyf = YY_(yyformat);
+ yysize1 = yysize + yystrlen (yyf);
+ yysize_overflow |= (yysize1 < yysize);
+ yysize = yysize1;
+
+ if (yysize_overflow)
+ return YYSIZE_MAXIMUM;
+
+ if (yyresult)
+ {
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ char *yyp = yyresult;
+ int yyi = 0;
+ while ((*yyp = *yyf) != '\0')
+ {
+ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+ {
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyf += 2;
+ }
+ else
+ {
+ yyp++;
+ yyf++;
+ }
+ }
+ }
+ return yysize;
+ }
+}
+#endif /* YYERROR_VERBOSE */
+
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {
+
+ default:
+ break;
+ }
+}
+
+/* Prevent warnings from -Wmissing-prototypes. */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol. */
+int yychar;
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse. |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yytoken = 0;
+ yyss = yyssa;
+ yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+
+ /* Initialize stack pointers.
+ Waste one element of value and location stack
+ so that they stay on the same level as the state stack.
+ The wasted elements are never initialized. */
+ yyssp = yyss;
+ yyvsp = yyvs;
+
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ *++yyvsp = yylval;
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
+yyreduce:
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
+ {
+ case 2:
+
+/* Line 1464 of yacc.c */
+#line 95 "parser.y"
+ { dmxConfigEntry = (yyvsp[(1) - (1)].entry); }
+ break;
+
+ case 4:
+
+/* Line 1464 of yacc.c */
+#line 99 "parser.y"
+ { APPEND(DMXConfigEntryPtr,(yyvsp[(1) - (2)].entry),(yyvsp[(2) - (2)].entry)); (yyval.entry) = (yyvsp[(1) - (2)].entry); }
+ break;
+
+ case 5:
+
+/* Line 1464 of yacc.c */
+#line 102 "parser.y"
+ { (yyval.entry) = dmxConfigEntryVirtual((yyvsp[(1) - (1)].virtual)); }
+ break;
+
+ case 6:
+
+/* Line 1464 of yacc.c */
+#line 103 "parser.y"
+ { (yyval.entry) = dmxConfigEntryComment((yyvsp[(1) - (1)].comment)); }
+ break;
+
+ case 7:
+
+/* Line 1464 of yacc.c */
+#line 107 "parser.y"
+ { (yyval.virtual) = dmxConfigCreateVirtual((yyvsp[(1) - (4)].token), NULL, NULL, (yyvsp[(2) - (4)].token), (yyvsp[(3) - (4)].subentry), (yyvsp[(4) - (4)].token)); }
+ break;
+
+ case 8:
+
+/* Line 1464 of yacc.c */
+#line 109 "parser.y"
+ { (yyval.virtual) = dmxConfigCreateVirtual((yyvsp[(1) - (5)].token), NULL, (yyvsp[(2) - (5)].pair), (yyvsp[(3) - (5)].token), (yyvsp[(4) - (5)].subentry), (yyvsp[(5) - (5)].token)); }
+ break;
+
+ case 9:
+
+/* Line 1464 of yacc.c */
+#line 111 "parser.y"
+ { (yyval.virtual) = dmxConfigCreateVirtual((yyvsp[(1) - (5)].token), (yyvsp[(2) - (5)].string), NULL, (yyvsp[(3) - (5)].token), (yyvsp[(4) - (5)].subentry), (yyvsp[(5) - (5)].token)); }
+ break;
+
+ case 10:
+
+/* Line 1464 of yacc.c */
+#line 113 "parser.y"
+ { (yyval.virtual) = dmxConfigCreateVirtual((yyvsp[(1) - (6)].token), (yyvsp[(2) - (6)].string), (yyvsp[(3) - (6)].pair), (yyvsp[(4) - (6)].token), (yyvsp[(5) - (6)].subentry), (yyvsp[(6) - (6)].token) ); }
+ break;
+
+ case 12:
+
+/* Line 1464 of yacc.c */
+#line 117 "parser.y"
+ { APPEND(DMXConfigSubPtr,(yyvsp[(1) - (2)].subentry),(yyvsp[(2) - (2)].subentry)); (yyval.subentry) = (yyvsp[(1) - (2)].subentry); }
+ break;
+
+ case 13:
+
+/* Line 1464 of yacc.c */
+#line 120 "parser.y"
+ { (yyval.subentry) = dmxConfigSubComment((yyvsp[(1) - (1)].comment)); }
+ break;
+
+ case 14:
+
+/* Line 1464 of yacc.c */
+#line 121 "parser.y"
+ { (yyval.subentry) = dmxConfigSubDisplay((yyvsp[(1) - (1)].display)); }
+ break;
+
+ case 15:
+
+/* Line 1464 of yacc.c */
+#line 122 "parser.y"
+ { (yyval.subentry) = dmxConfigSubWall((yyvsp[(1) - (1)].wall)); }
+ break;
+
+ case 16:
+
+/* Line 1464 of yacc.c */
+#line 123 "parser.y"
+ { (yyval.subentry) = dmxConfigSubOption((yyvsp[(1) - (1)].option)); }
+ break;
+
+ case 17:
+
+/* Line 1464 of yacc.c */
+#line 124 "parser.y"
+ { (yyval.subentry) = dmxConfigSubParam((yyvsp[(1) - (1)].param)); }
+ break;
+
+ case 18:
+
+/* Line 1464 of yacc.c */
+#line 128 "parser.y"
+ { (yyval.option) = dmxConfigCreateOption((yyvsp[(1) - (3)].token), (yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].token)); }
+ break;
+
+ case 19:
+
+/* Line 1464 of yacc.c */
+#line 132 "parser.y"
+ { (yyval.param) = dmxConfigCreateParam((yyvsp[(1) - (3)].token), NULL, (yyvsp[(2) - (3)].string), NULL, (yyvsp[(3) - (3)].token)); }
+ break;
+
+ case 20:
+
+/* Line 1464 of yacc.c */
+#line 134 "parser.y"
+ { (yyval.param) = dmxConfigCreateParam((yyvsp[(1) - (4)].token), (yyvsp[(2) - (4)].token), NULL, (yyvsp[(4) - (4)].token), NULL);
+ (yyval.param)->next = (yyvsp[(3) - (4)].param);
+ }
+ break;
+
+ case 22:
+
+/* Line 1464 of yacc.c */
+#line 140 "parser.y"
+ { APPEND(DMXConfigParamPtr,(yyvsp[(1) - (2)].param),(yyvsp[(2) - (2)].param)); (yyval.param) = (yyvsp[(1) - (2)].param); }
+ break;
+
+ case 23:
+
+/* Line 1464 of yacc.c */
+#line 144 "parser.y"
+ { (yyval.param) = dmxConfigCreateParam(NULL, NULL, (yyvsp[(1) - (2)].string), NULL, (yyvsp[(2) - (2)].token)); }
+ break;
+
+ case 24:
+
+/* Line 1464 of yacc.c */
+#line 148 "parser.y"
+ { (yyval.pdim) = dmxConfigCreatePartDim((yyvsp[(1) - (2)].pair), (yyvsp[(2) - (2)].pair)); }
+ break;
+
+ case 25:
+
+/* Line 1464 of yacc.c */
+#line 150 "parser.y"
+ { (yyval.pdim) = dmxConfigCreatePartDim((yyvsp[(1) - (1)].pair), NULL); }
+ break;
+
+ case 26:
+
+/* Line 1464 of yacc.c */
+#line 152 "parser.y"
+ { (yyval.pdim) = dmxConfigCreatePartDim(NULL, (yyvsp[(1) - (1)].pair)); }
+ break;
+
+ case 27:
+
+/* Line 1464 of yacc.c */
+#line 156 "parser.y"
+ { (yyval.fdim) = dmxConfigCreateFullDim((yyvsp[(1) - (3)].pdim), (yyvsp[(3) - (3)].pdim)); }
+ break;
+
+ case 28:
+
+/* Line 1464 of yacc.c */
+#line 158 "parser.y"
+ { (yyval.fdim) = dmxConfigCreateFullDim(NULL, (yyvsp[(2) - (2)].pdim)); }
+ break;
+
+ case 29:
+
+/* Line 1464 of yacc.c */
+#line 160 "parser.y"
+ { (yyval.fdim) = dmxConfigCreateFullDim((yyvsp[(1) - (1)].pdim), NULL); }
+ break;
+
+ case 30:
+
+/* Line 1464 of yacc.c */
+#line 164 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (5)].token), (yyvsp[(2) - (5)].string), (yyvsp[(3) - (5)].fdim), (yyvsp[(4) - (5)].pair), (yyvsp[(5) - (5)].token)); }
+ break;
+
+ case 31:
+
+/* Line 1464 of yacc.c */
+#line 166 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (4)].token), NULL, (yyvsp[(2) - (4)].fdim), (yyvsp[(3) - (4)].pair), (yyvsp[(4) - (4)].token)); }
+ break;
+
+ case 32:
+
+/* Line 1464 of yacc.c */
+#line 168 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (4)].token), (yyvsp[(2) - (4)].string), NULL, (yyvsp[(3) - (4)].pair), (yyvsp[(4) - (4)].token)); }
+ break;
+
+ case 33:
+
+/* Line 1464 of yacc.c */
+#line 171 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (4)].token), (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].fdim), NULL, (yyvsp[(4) - (4)].token)); }
+ break;
+
+ case 34:
+
+/* Line 1464 of yacc.c */
+#line 173 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (3)].token), NULL, (yyvsp[(2) - (3)].fdim), NULL, (yyvsp[(3) - (3)].token)); }
+ break;
+
+ case 35:
+
+/* Line 1464 of yacc.c */
+#line 175 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (3)].token), (yyvsp[(2) - (3)].string), NULL, NULL, (yyvsp[(3) - (3)].token)); }
+ break;
+
+ case 36:
+
+/* Line 1464 of yacc.c */
+#line 177 "parser.y"
+ { (yyval.display) = dmxConfigCreateDisplay((yyvsp[(1) - (2)].token), NULL, NULL, NULL, (yyvsp[(2) - (2)].token)); }
+ break;
+
+ case 37:
+
+/* Line 1464 of yacc.c */
+#line 181 "parser.y"
+ { (yyval.wall) = dmxConfigCreateWall((yyvsp[(1) - (5)].token), (yyvsp[(2) - (5)].pair), (yyvsp[(3) - (5)].pair), (yyvsp[(4) - (5)].string), (yyvsp[(5) - (5)].token)); }
+ break;
+
+ case 38:
+
+/* Line 1464 of yacc.c */
+#line 183 "parser.y"
+ { (yyval.wall) = dmxConfigCreateWall((yyvsp[(1) - (4)].token), (yyvsp[(2) - (4)].pair), NULL, (yyvsp[(3) - (4)].string), (yyvsp[(4) - (4)].token)); }
+ break;
+
+ case 39:
+
+/* Line 1464 of yacc.c */
+#line 185 "parser.y"
+ { (yyval.wall) = dmxConfigCreateWall((yyvsp[(1) - (3)].token), NULL, NULL, (yyvsp[(2) - (3)].string), (yyvsp[(3) - (3)].token)); }
+ break;
+
+ case 41:
+
+/* Line 1464 of yacc.c */
+#line 189 "parser.y"
+ { (yyval.token) = (yyvsp[(1) - (2)].token); (yyval.token)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 43:
+
+/* Line 1464 of yacc.c */
+#line 193 "parser.y"
+ { (yyval.string) = (yyvsp[(1) - (2)].string); (yyval.string)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 45:
+
+/* Line 1464 of yacc.c */
+#line 197 "parser.y"
+ { (yyval.pair) = (yyvsp[(1) - (2)].pair); (yyval.pair)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 47:
+
+/* Line 1464 of yacc.c */
+#line 201 "parser.y"
+ { (yyval.pair) = (yyvsp[(1) - (2)].pair); (yyval.pair)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 49:
+
+/* Line 1464 of yacc.c */
+#line 205 "parser.y"
+ { (yyval.pair) = (yyvsp[(1) - (2)].pair); (yyval.pair)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 51:
+
+/* Line 1464 of yacc.c */
+#line 209 "parser.y"
+ { (yyval.token) = (yyvsp[(1) - (2)].token); (yyval.token)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 53:
+
+/* Line 1464 of yacc.c */
+#line 213 "parser.y"
+ { (yyval.token) = (yyvsp[(1) - (2)].token); (yyval.token)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 55:
+
+/* Line 1464 of yacc.c */
+#line 217 "parser.y"
+ { (yyval.token) = (yyvsp[(1) - (2)].token); (yyval.token)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 57:
+
+/* Line 1464 of yacc.c */
+#line 221 "parser.y"
+ { (yyval.token) = (yyvsp[(1) - (2)].token); (yyval.token)->comment = (yyvsp[(2) - (2)].comment)->comment; }
+ break;
+
+ case 59:
+
+/* Line 1464 of yacc.c */
+#line 225 "parser.y"
+ { APPEND(DMXConfigStringPtr, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].string)); (yyval.string) = (yyvsp[(1) - (2)].string); }
+ break;
+
+
+
+/* Line 1464 of yacc.c */
+#line 1786 "parser.c"
+ default: break;
+ }
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+ {
+ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ {
+ YYSIZE_T yyalloc = 2 * yysize;
+ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+ yyalloc = YYSTACK_ALLOC_MAXIMUM;
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+ if (yymsg)
+ yymsg_alloc = yyalloc;
+ else
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ }
+ }
+
+ if (0 < yysize && yysize <= yymsg_alloc)
+ {
+ (void) yysyntax_error (yymsg, yystate, yychar);
+ yyerror (yymsg);
+ }
+ else
+ {
+ yyerror (YY_("syntax error"));
+ if (yysize != 0)
+ goto yyexhaustedlab;
+ }
+ }
+#endif
+ }
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (yyn != YYPACT_NINF)
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ *++yyvsp = yylval;
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
+#endif
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
+ {
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
+ }
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
+}
+
+
+
diff --git a/hw/dmx/config/parser.h b/hw/dmx/config/parser.h
new file mode 100644
index 0000000..d662578
--- /dev/null
+++ b/hw/dmx/config/parser.h
@@ -0,0 +1,104 @@
+/* A Bison parser, made by GNU Bison 2.4.3. */
+
+/* Skeleton interface for Bison's Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2009, 2010 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ T_VIRTUAL = 258,
+ T_DISPLAY = 259,
+ T_WALL = 260,
+ T_OPTION = 261,
+ T_PARAM = 262,
+ T_STRING = 263,
+ T_DIMENSION = 264,
+ T_OFFSET = 265,
+ T_ORIGIN = 266,
+ T_COMMENT = 267,
+ T_LINE_COMMENT = 268
+ };
+#endif
+/* Tokens. */
+#define T_VIRTUAL 258
+#define T_DISPLAY 259
+#define T_WALL 260
+#define T_OPTION 261
+#define T_PARAM 262
+#define T_STRING 263
+#define T_DIMENSION 264
+#define T_OFFSET 265
+#define T_ORIGIN 266
+#define T_COMMENT 267
+#define T_LINE_COMMENT 268
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 1685 of yacc.c */
+#line 56 "parser.y"
+
+ DMXConfigTokenPtr token;
+ DMXConfigStringPtr string;
+ DMXConfigNumberPtr number;
+ DMXConfigPairPtr pair;
+ DMXConfigFullDimPtr fdim;
+ DMXConfigPartDimPtr pdim;
+ DMXConfigDisplayPtr display;
+ DMXConfigWallPtr wall;
+ DMXConfigOptionPtr option;
+ DMXConfigParamPtr param;
+ DMXConfigCommentPtr comment;
+ DMXConfigSubPtr subentry;
+ DMXConfigVirtualPtr virtual;
+ DMXConfigEntryPtr entry;
+
+
+
+/* Line 1685 of yacc.c */
+#line 96 "parser.h"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+extern YYSTYPE yylval;
+
+
diff --git a/hw/dmx/config/parser.y b/hw/dmx/config/parser.y
new file mode 100644
index 0000000..ac24410
--- /dev/null
+++ b/hw/dmx/config/parser.y
@@ -0,0 +1,226 @@
+/* $XFree86$ */
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+%{
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxparse.h"
+#include <string.h>
+#include <stdlib.h>
+#define YYDEBUG 1
+#define YYERROR_VERBOSE
+#define YY_USE_PROTOS
+
+DMXConfigEntryPtr dmxConfigEntry = NULL;
+#define APPEND(type, h, t) \
+{ \
+ type pt; \
+ for (pt = h; pt->next; pt = pt->next); \
+ pt->next = t; \
+}
+%}
+
+%union {
+ DMXConfigTokenPtr token;
+ DMXConfigStringPtr string;
+ DMXConfigNumberPtr number;
+ DMXConfigPairPtr pair;
+ DMXConfigFullDimPtr fdim;
+ DMXConfigPartDimPtr pdim;
+ DMXConfigDisplayPtr display;
+ DMXConfigWallPtr wall;
+ DMXConfigOptionPtr option;
+ DMXConfigParamPtr param;
+ DMXConfigCommentPtr comment;
+ DMXConfigSubPtr subentry;
+ DMXConfigVirtualPtr virtual;
+ DMXConfigEntryPtr entry;
+}
+
+ /* Terminals */
+%token <token> '{' '}' ';' '/' T_VIRTUAL T_DISPLAY T_WALL T_OPTION T_PARAM
+%token <string> T_STRING
+%token <pair> T_DIMENSION T_OFFSET T_ORIGIN
+%token <comment> T_COMMENT T_LINE_COMMENT
+
+ /* Non-termials */
+%type <token> Display Wall Terminal Open Close
+%type <string> NameList Name
+%type <pair> Dimension Offset Origin
+%type <pdim> PartialDim
+%type <fdim> FullDim
+%type <display> DisplayEntry
+%type <option> OptionEntry
+%type <param> ParamEntry ParamList Param
+%type <subentry> SubList Sub
+%type <wall> WallEntry
+%type <virtual> Virtual
+%type <entry> Program EntryList Entry
+
+%%
+
+Program : EntryList { dmxConfigEntry = $1; }
+ ;
+
+EntryList : Entry
+ | EntryList Entry { APPEND(DMXConfigEntryPtr,$1,$2); $$ = $1; }
+ ;
+
+Entry : Virtual { $$ = dmxConfigEntryVirtual($1); }
+ | T_LINE_COMMENT { $$ = dmxConfigEntryComment($1); }
+ ;
+
+Virtual : T_VIRTUAL Open SubList Close
+ { $$ = dmxConfigCreateVirtual($1, NULL, NULL, $2, $3, $4); }
+ | T_VIRTUAL Dimension Open SubList Close
+ { $$ = dmxConfigCreateVirtual($1, NULL, $2, $3, $4, $5); }
+ | T_VIRTUAL Name Open SubList Close
+ { $$ = dmxConfigCreateVirtual($1, $2, NULL, $3, $4, $5); }
+ | T_VIRTUAL Name Dimension Open SubList Close
+ { $$ = dmxConfigCreateVirtual($1, $2, $3, $4, $5, $6 ); }
+ ;
+
+SubList : Sub
+ | SubList Sub { APPEND(DMXConfigSubPtr,$1,$2); $$ = $1; }
+ ;
+
+Sub : T_LINE_COMMENT { $$ = dmxConfigSubComment($1); }
+ | DisplayEntry { $$ = dmxConfigSubDisplay($1); }
+ | WallEntry { $$ = dmxConfigSubWall($1); }
+ | OptionEntry { $$ = dmxConfigSubOption($1); }
+ | ParamEntry { $$ = dmxConfigSubParam($1); }
+ ;
+
+OptionEntry : T_OPTION NameList Terminal
+ { $$ = dmxConfigCreateOption($1, $2, $3); }
+ ;
+
+ParamEntry : T_PARAM NameList Terminal
+ { $$ = dmxConfigCreateParam($1, NULL, $2, NULL, $3); }
+ | T_PARAM Open ParamList Close
+ { $$ = dmxConfigCreateParam($1, $2, NULL, $4, NULL);
+ $$->next = $3;
+ }
+ ;
+
+ParamList : Param
+ | ParamList Param { APPEND(DMXConfigParamPtr,$1,$2); $$ = $1; }
+ ;
+
+Param : NameList Terminal
+ { $$ = dmxConfigCreateParam(NULL, NULL, $1, NULL, $2); }
+ ;
+
+PartialDim : Dimension Offset
+ { $$ = dmxConfigCreatePartDim($1, $2); }
+ | Dimension
+ { $$ = dmxConfigCreatePartDim($1, NULL); }
+ | Offset
+ { $$ = dmxConfigCreatePartDim(NULL, $1); }
+ ;
+
+FullDim : PartialDim '/' PartialDim
+ { $$ = dmxConfigCreateFullDim($1, $3); }
+ | '/' PartialDim
+ { $$ = dmxConfigCreateFullDim(NULL, $2); }
+ | PartialDim
+ { $$ = dmxConfigCreateFullDim($1, NULL); }
+ ;
+
+DisplayEntry : Display Name FullDim Origin Terminal
+ { $$ = dmxConfigCreateDisplay($1, $2, $3, $4, $5); }
+ | Display FullDim Origin Terminal
+ { $$ = dmxConfigCreateDisplay($1, NULL, $2, $3, $4); }
+ | Display Name Origin Terminal
+ { $$ = dmxConfigCreateDisplay($1, $2, NULL, $3, $4); }
+
+ | Display Name FullDim Terminal
+ { $$ = dmxConfigCreateDisplay($1, $2, $3, NULL, $4); }
+ | Display FullDim Terminal
+ { $$ = dmxConfigCreateDisplay($1, NULL, $2, NULL, $3); }
+ | Display Name Terminal
+ { $$ = dmxConfigCreateDisplay($1, $2, NULL, NULL, $3); }
+ | Display Terminal
+ { $$ = dmxConfigCreateDisplay($1, NULL, NULL, NULL, $2); }
+ ;
+
+WallEntry : Wall Dimension Dimension NameList Terminal
+ { $$ = dmxConfigCreateWall($1, $2, $3, $4, $5); }
+ | Wall Dimension NameList Terminal
+ { $$ = dmxConfigCreateWall($1, $2, NULL, $3, $4); }
+ | Wall NameList Terminal
+ { $$ = dmxConfigCreateWall($1, NULL, NULL, $2, $3); }
+ ;
+
+Display : T_DISPLAY
+ | T_DISPLAY T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Name : T_STRING
+ | T_STRING T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Dimension : T_DIMENSION
+ | T_DIMENSION T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Offset : T_OFFSET
+ | T_OFFSET T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Origin : T_ORIGIN
+ | T_ORIGIN T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Terminal : ';'
+ | ';' T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Open : '{'
+ | '{' T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Close : '}'
+ | '}' T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+Wall : T_WALL
+ | T_WALL T_COMMENT { $$ = $1; $$->comment = $2->comment; }
+ ;
+
+NameList : Name
+ | NameList Name { APPEND(DMXConfigStringPtr, $1, $2); $$ = $1; }
+ ;
diff --git a/hw/dmx/config/scanner.c b/hw/dmx/config/scanner.c
new file mode 100644
index 0000000..d6b44b1
--- /dev/null
+++ b/hw/dmx/config/scanner.c
@@ -0,0 +1,2028 @@
+
+#line 3 "scanner.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 35
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
+#endif
+
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
+
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
+
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
+
+#define YY_USE_CONST
+
+#endif /* defined (__STDC__) */
+#endif /* ! __cplusplus */
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN (yy_start) = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START (((yy_start) - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart(yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+extern int yyleng;
+
+extern FILE *yyin, *yyout;
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, (yytext_ptr) )
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
+struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+
+ };
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
+ */
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 0; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart (FILE *input_file );
+void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE yy_create_buffer (FILE *file,int size );
+void yy_delete_buffer (YY_BUFFER_STATE b );
+void yy_flush_buffer (YY_BUFFER_STATE b );
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void yypop_buffer_state (void );
+
+static void yyensure_buffer_stack (void );
+static void yy_load_buffer_state (void );
+static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )
+
+YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len );
+
+void *yyalloc (yy_size_t );
+void *yyrealloc (void *,yy_size_t );
+void yyfree (void * );
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! YY_CURRENT_BUFFER ){\
+ yyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ yy_create_buffer(yyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
+/* Begin user sect3 */
+
+typedef unsigned char YY_CHAR;
+
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+typedef int yy_state_type;
+
+extern int yylineno;
+
+int yylineno = 1;
+
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ (yytext_ptr) = yy_bp; \
+ yyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+ (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 20
+#define YY_END_OF_BUFFER 21
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[73] =
+ { 0,
+ 0, 0, 0, 0, 21, 19, 12, 11, 19, 18,
+ 19, 19, 16, 19, 15, 19, 19, 19, 19, 19,
+ 19, 13, 14, 17, 12, 0, 10, 18, 9, 9,
+ 0, 0, 0, 0, 0, 9, 9, 9, 9, 9,
+ 17, 0, 9, 0, 6, 0, 0, 9, 9, 9,
+ 9, 9, 0, 0, 7, 8, 9, 9, 9, 9,
+ 3, 7, 9, 9, 5, 9, 9, 4, 9, 2,
+ 1, 0
+ } ;
+
+static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 4, 5, 1, 1, 1, 1, 1,
+ 1, 6, 7, 1, 7, 6, 8, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 6, 10, 1,
+ 1, 1, 1, 11, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 1, 1, 1, 1, 6, 1, 12, 6, 6, 13,
+
+ 6, 6, 6, 6, 14, 6, 6, 15, 16, 17,
+ 18, 19, 6, 20, 21, 22, 23, 24, 25, 26,
+ 27, 6, 28, 1, 29, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1
+ } ;
+
+static yyconst flex_int32_t yy_meta[30] =
+ { 0,
+ 1, 1, 2, 1, 1, 3, 3, 3, 3, 1,
+ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 1, 1
+ } ;
+
+static yyconst flex_int16_t yy_base[77] =
+ { 0,
+ 0, 101, 0, 100, 104, 107, 101, 107, 98, 0,
+ 0, 92, 0, 28, 107, 29, 86, 80, 86, 83,
+ 84, 107, 107, 0, 93, 90, 89, 0, 0, 32,
+ 30, 31, 33, 34, 42, 71, 69, 70, 69, 73,
+ 0, 43, 44, 46, 78, 45, 77, 66, 70, 71,
+ 60, 66, 50, 56, 70, 67, 58, 52, 53, 44,
+ 0, 57, 52, 46, 0, 50, 34, 0, 45, 0,
+ 0, 107, 71, 74, 46, 77
+ } ;
+
+static yyconst flex_int16_t yy_def[77] =
+ { 0,
+ 72, 1, 1, 1, 72, 72, 72, 72, 73, 74,
+ 75, 75, 75, 72, 72, 72, 75, 75, 75, 75,
+ 75, 72, 72, 76, 72, 73, 72, 74, 75, 75,
+ 72, 72, 72, 72, 72, 75, 75, 75, 75, 75,
+ 76, 72, 75, 72, 72, 72, 72, 75, 75, 75,
+ 75, 75, 72, 72, 75, 72, 75, 75, 75, 75,
+ 75, 72, 75, 75, 75, 75, 75, 75, 75, 75,
+ 75, 0, 72, 72, 72, 72
+ } ;
+
+static yyconst flex_int16_t yy_nxt[137] =
+ { 0,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 11, 17, 11, 11, 11, 11, 18, 19, 11,
+ 11, 11, 11, 20, 21, 11, 11, 22, 23, 31,
+ 34, 31, 31, 42, 44, 34, 32, 35, 43, 32,
+ 30, 45, 35, 46, 42, 54, 46, 44, 29, 53,
+ 35, 54, 55, 33, 45, 33, 33, 54, 62, 71,
+ 70, 69, 68, 67, 62, 62, 66, 47, 65, 64,
+ 47, 26, 63, 26, 28, 56, 28, 41, 55, 41,
+ 61, 60, 59, 58, 57, 56, 45, 52, 51, 50,
+ 49, 48, 26, 27, 25, 40, 39, 38, 37, 36,
+
+ 30, 27, 25, 72, 24, 24, 5, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72
+ } ;
+
+static yyconst flex_int16_t yy_chk[137] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 14,
+ 16, 31, 32, 30, 33, 34, 14, 16, 30, 32,
+ 30, 33, 34, 35, 42, 43, 46, 44, 75, 42,
+ 35, 53, 43, 14, 44, 31, 32, 54, 53, 69,
+ 67, 66, 64, 63, 54, 62, 60, 35, 59, 58,
+ 46, 73, 57, 73, 74, 56, 74, 76, 55, 76,
+ 52, 51, 50, 49, 48, 47, 45, 40, 39, 38,
+ 37, 36, 27, 26, 25, 21, 20, 19, 18, 17,
+
+ 12, 9, 7, 5, 4, 2, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72, 72, 72, 72, 72,
+ 72, 72, 72, 72, 72, 72
+ } ;
+
+static yy_state_type yy_last_accepting_state;
+static char *yy_last_accepting_cpos;
+
+extern int yy_flex_debug;
+int yy_flex_debug = 0;
+
+/* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+#define REJECT reject_used_but_not_detected
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "scanner.l"
+/* $XFree86$ */
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+#line 36 "scanner.l"
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxparse.h"
+#include "parser.h"
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+static int getdimension(int token, const char *text, int leng);
+static int getstring(int token, const char *text, int leng);
+static int gettoken(int token, const char *text, int leng);
+static int getcomment(int token, const char *text, int leng);
+static int lineno = 1;
+
+#line 548 "scanner.c"
+
+#define INITIAL 0
+#define OTHER 1
+
+#ifndef YY_NO_UNISTD_H
+/* Special case for "unistd.h", since it is non-ANSI. We include it way
+ * down here because we want the user's section 1 to have been scanned first.
+ * The user has a chance to override it with an option.
+ */
+#include <unistd.h>
+#endif
+
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int yylex_destroy (void );
+
+int yyget_debug (void );
+
+void yyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE yyget_extra (void );
+
+void yyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *yyget_in (void );
+
+void yyset_in (FILE * in_str );
+
+FILE *yyget_out (void );
+
+void yyset_out (FILE * out_str );
+
+int yyget_leng (void );
+
+char *yyget_text (void );
+
+int yyget_lineno (void );
+
+void yyset_lineno (int line_number );
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap (void );
+#else
+extern int yywrap (void );
+#endif
+#endif
+
+ static void yyunput (int c,char *buf_ptr );
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char *,yyconst char *,int );
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * );
+#endif
+
+#ifndef YY_NO_INPUT
+
+#ifdef __cplusplus
+static int yyinput (void );
+#else
+static int input (void );
+#endif
+
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+#ifndef ECHO
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+ int c = '*'; \
+ int n; \
+ for ( n = 0; n < max_size && \
+ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+ if ( c == EOF && ferror( yyin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(yyin); \
+ } \
+ }\
+\
+
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+#endif
+
+/* end tables serialization structures and prototypes */
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+#define YY_DECL_IS_OURS 1
+
+extern int yylex (void);
+
+#define YY_DECL int yylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+#define YY_RULE_SETUP \
+ if ( yyleng > 0 ) \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
+ (yytext[yyleng - 1] == '\n'); \
+ YY_USER_ACTION
+
+/** The main scanner function which does all the work.
+ */
+YY_DECL
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+#line 62 "scanner.l"
+
+#line 736 "scanner.c"
+
+ if ( !(yy_init) )
+ {
+ (yy_init) = 1;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
+
+ if ( ! yyin )
+ yyin = stdin;
+
+ if ( ! yyout )
+ yyout = stdout;
+
+ if ( ! YY_CURRENT_BUFFER ) {
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+ yy_cp = (yy_c_buf_p);
+
+ /* Support of yytext. */
+ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+yy_match:
+ do
+ {
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 73 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+ while ( yy_base[yy_current_state] != 107 );
+
+yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+ if ( yy_act == 0 )
+ { /* have to back up */
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ yy_act = yy_accept[yy_current_state];
+ }
+
+ YY_DO_BEFORE_ACTION;
+
+do_action: /* This label is used only to access EOF actions. */
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+case 1:
+YY_RULE_SETUP
+#line 63 "scanner.l"
+return gettoken(T_VIRTUAL, yytext, yyleng);
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 64 "scanner.l"
+return gettoken(T_DISPLAY, yytext, yyleng);
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 65 "scanner.l"
+return gettoken(T_WALL, yytext, yyleng);
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 66 "scanner.l"
+return gettoken(T_OPTION, yytext, yyleng);
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 67 "scanner.l"
+return gettoken(T_PARAM, yytext, yyleng);
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 68 "scanner.l"
+return getdimension(T_DIMENSION, yytext, yyleng);
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 69 "scanner.l"
+return getdimension(T_OFFSET, yytext+1, yyleng-1);
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 70 "scanner.l"
+return getdimension(T_ORIGIN, yytext+1, yyleng-1);
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 71 "scanner.l"
+return getstring(T_STRING, yytext, yyleng);
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 72 "scanner.l"
+return getstring(T_STRING, yytext+1, yyleng-2);
+ YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+#line 73 "scanner.l"
+++lineno;
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 74 "scanner.l"
+
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 75 "scanner.l"
+return gettoken(yytext[0], yytext, yyleng);
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 76 "scanner.l"
+return gettoken(yytext[0], yytext, yyleng);
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 77 "scanner.l"
+return gettoken(yytext[0], yytext, yyleng);
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 78 "scanner.l"
+return gettoken(yytext[0], yytext, yyleng);
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 79 "scanner.l"
+return getcomment(T_LINE_COMMENT, yytext, yyleng);
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 80 "scanner.l"
+return getcomment(T_COMMENT, yytext, yyleng);
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 81 "scanner.l"
+return getstring(T_STRING, yytext, yyleng);
+ YY_BREAK
+case YY_STATE_EOF(INITIAL):
+case YY_STATE_EOF(OTHER):
+#line 82 "scanner.l"
+return 0;
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 83 "scanner.l"
+ECHO;
+ YY_BREAK
+#line 926 "scanner.c"
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+ yy_cp = (yy_c_buf_p);
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ (yy_did_buffer_switch_on_eof) = 0;
+
+ if ( yywrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+ yy_current_state = yy_get_previous_state( );
+
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+} /* end of yylex */
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+ int num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), (size_t) num_to_read );
+
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart(yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+}
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+ static yy_state_type yy_get_previous_state (void)
+{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 73 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+}
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
+ register int yy_is_jam;
+ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+ if ( yy_current_state >= 73 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ yy_is_jam = (yy_current_state == 72);
+
+ return yy_is_jam ? 0 : yy_current_state;
+}
+
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
+
+ /* undo effects of setting up yytext */
+ *yy_cp = (yy_hold_char);
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
+
+#ifndef YY_NO_INPUT
+#ifdef __cplusplus
+ static int yyinput (void)
+#else
+ static int input (void)
+#endif
+
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
+
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+ int offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
+
+ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart(yyin );
+
+ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap( ) )
+ return EOF;
+
+ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve yytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
+
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+
+ return c;
+}
+#endif /* ifndef YY_NO_INPUT */
+
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void yyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ yyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ yy_create_buffer(yyin,YY_BUF_SIZE );
+ }
+
+ yy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ yy_load_buffer_state( );
+}
+
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
+ */
+ yyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ yy_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+static void yy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
+
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size )
+{
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer(b,file );
+
+ return b;
+}
+
+/** Destroy the buffer.
+ * @param b a buffer created with yy_create_buffer()
+ *
+ */
+ void yy_delete_buffer (YY_BUFFER_STATE b )
+{
+
+ if ( ! b )
+ return;
+
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yyfree((void *) b->yy_ch_buf );
+
+ yyfree((void *) b );
+}
+
+#ifndef __cplusplus
+extern int isatty (int );
+#endif /* __cplusplus */
+
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a yyrestart() or at EOF.
+ */
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+{
+ int oerrno = errno;
+
+ yy_flush_buffer(b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
+
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
+
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void yy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == YY_CURRENT_BUFFER )
+ yy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ yyensure_buffer_stack();
+
+ /* This block is copied from yy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void yypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ yy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+ }
+}
+
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void yyensure_buffer_stack (void)
+{
+ int num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
+
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
+
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer(b );
+
+ return b;
+}
+
+/** Setup the input buffer state to scan a string. The next call to yylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * yy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
+{
+
+ return yy_scan_bytes(yystr,strlen(yystr) );
+}
+
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
+ * scan from a @e copy of @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len )
+{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = _yybytes_len + 2;
+ buf = (char *) yyalloc(n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
+
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer(buf,n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ yytext[yyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = yytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ yyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
+
+/* Accessor methods (get/set functions) to struct members. */
+
+/** Get the current line number.
+ *
+ */
+int yyget_lineno (void)
+{
+
+ return yylineno;
+}
+
+/** Get the input stream.
+ *
+ */
+FILE *yyget_in (void)
+{
+ return yyin;
+}
+
+/** Get the output stream.
+ *
+ */
+FILE *yyget_out (void)
+{
+ return yyout;
+}
+
+/** Get the length of the current token.
+ *
+ */
+int yyget_leng (void)
+{
+ return yyleng;
+}
+
+/** Get the current token.
+ *
+ */
+
+char *yyget_text (void)
+{
+ return yytext;
+}
+
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void yyset_lineno (int line_number )
+{
+
+ yylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see yy_switch_to_buffer
+ */
+void yyset_in (FILE * in_str )
+{
+ yyin = in_str ;
+}
+
+void yyset_out (FILE * out_str )
+{
+ yyout = out_str ;
+}
+
+int yyget_debug (void)
+{
+ return yy_flex_debug;
+}
+
+void yyset_debug (int bdebug )
+{
+ yy_flex_debug = bdebug ;
+}
+
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from yylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ yyin = stdin;
+ yyout = stdout;
+#else
+ yyin = (FILE *) 0;
+ yyout = (FILE *) 0;
+#endif
+
+ /* For future reference: Set errno on error, since we are called by
+ * yylex_init()
+ */
+ return 0;
+}
+
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ yy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ yypop_buffer_state();
+ }
+
+ /* Destroy the stack itself. */
+ yyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
+
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * yylex() is called, initialization will occur. */
+ yy_init_globals( );
+
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+}
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen (yyconst char * s )
+{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+}
+#endif
+
+void *yyalloc (yy_size_t size )
+{
+ return (void *) malloc( size );
+}
+
+void *yyrealloc (void * ptr, yy_size_t size )
+{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+ * because both ANSI C and C++ allow castless assignment from
+ * any pointer type to void*, and deal with argument conversions
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+}
+
+void yyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
+
+#line 83 "scanner.l"
+
+
+int yywrap(void)
+{
+ return 1;
+}
+
+void yyerror(const char *message)
+{
+ const char *pt, *end;
+ struct _entry {
+ const char *from;
+ const char *to;
+ } *entry, list[] = {
+ { "T_VIRTUAL", "\"virtual\"" },
+ { "T_DISPLAY", "\"display\"" },
+ { "T_WALL", "\"wall\"" },
+ { "T_OPTION", "\"option\"" },
+ { "T_PARAM", "\"param\"" },
+ { "T_DIMENSION", "dimension (e.g., 2x2 or 1024x768)" },
+ { "T_OFFSET", "display offset (e.g., +10-10)" },
+ { "T_ORIGIN", "tile origin (e.g., @1280x1024)" },
+ { "T_STRING", "string" },
+ { "T_COMMENT", "comment (e.g., #...)" },
+ { "T_LINE_COMMENT", "comment (e.g., #...)" },
+ { NULL, NULL }
+ };
+
+ fprintf(stderr, "parse error on line %d at token \"%*.*s\"\n",
+ lineno, yyleng, yyleng, yytext);
+ end = message + strlen(message);
+ for (pt = message; *pt; pt++) {
+ if (pt[0] == 'T' && pt[1] == '_') {
+ const char *next = strchr(pt, ' ');
+ if (!next || !*next) next = strchr(pt, '\0');
+ if (!next) goto bail;
+ --next;
+ if (next-pt == 1 && next[1]
+ && next[2] == '\'' && next[3] == '\'') {
+ fprintf(stderr, "\"%c\"", next[1]);
+ pt += 4;
+ goto cnt;
+ }
+ for (entry = list; entry->from; ++entry) {
+ if (!strncmp(entry->from, pt, strlen(entry->from))) {
+ fprintf(stderr, "%s", entry->to);
+ pt = next;
+ goto cnt;
+ }
+ }
+ } else if (end-pt >= 5 && pt[0] == '\'' && pt[1] == '\'' && pt[3]
+ && pt[4] == '\'' && pt[5] == '\'') {
+ fprintf(stderr, "\"%c\"", pt[3]);
+ pt += 5;
+ } else if (end-pt >= 3 && pt[0] == '\'' && pt[1] && pt[2] == '\'') {
+ fprintf(stderr, "\"%c\"", pt[1]);
+ pt += 3;
+ }
+ bail:
+ putc(*pt, stderr);
+ cnt:
+ ;
+ }
+ fprintf(stderr, "\n");
+ exit( 1 );
+}
+
+static int getdimension(int token, const char *text, int leng)
+{
+ char *endptr;
+ char *tmp = dmxConfigAlloc(leng+1);
+ int x, y;
+
+ strncpy(tmp, text, leng);
+ x = strtol(tmp, &endptr, 10);
+ while (*endptr && !isdigit(*endptr)) ++endptr;
+ y = strtol(endptr, NULL, 10);
+ dmxConfigFree(tmp);
+ yylval.pair = dmxConfigCreatePair(token, lineno, NULL, x, y, 1, 1);
+ return token;
+}
+
+static int getstring(int token, const char *text, int leng)
+{
+ yylval.string = dmxConfigCreateString(token, lineno, NULL,
+ dmxConfigCopyString(leng ? text : "",
+ leng));
+ return token;
+}
+
+static int gettoken(int token, const char *text, int leng)
+{
+ yylval.token = dmxConfigCreateToken(token, lineno, NULL);
+ return token;
+}
+
+static int getcomment(int token, const char *text, int leng)
+{
+ yylval.comment = dmxConfigCreateComment(token, lineno,
+ dmxConfigCopyString(text + 1,
+ leng - 1));
+ return token;
+}
+
diff --git a/hw/dmx/config/scanner.l b/hw/dmx/config/scanner.l
new file mode 100644
index 0000000..cef99d0
--- /dev/null
+++ b/hw/dmx/config/scanner.l
@@ -0,0 +1,184 @@
+/* $XFree86$ */
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+%{
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxparse.h"
+#include "parser.h"
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+static int getdimension(int token, const char *text, int leng);
+static int getstring(int token, const char *text, int leng);
+static int gettoken(int token, const char *text, int leng);
+static int getcomment(int token, const char *text, int leng);
+static int lineno = 1;
+%}
+%s OTHER
+comment #.*
+word ([[:alpha:]_/:\-\+\.\*][[:alnum:]_/:\-\+\.\*]+)
+string \"(([^\"\n])|\"\")*\"
+badstring \"(([^\"\n])|\"\")*
+number [[:digit:]x]+
+dimension [[:digit:]]+[[:blank:]]*x[[:blank:]]*[[:digit:]]+
+offset [+-][[:digit:]]+[[:blank:]]*[+-][[:blank:]]*[[:digit:]]+
+origin @[[:blank:]]*[[:digit:]]+[[:blank:]]*[[:blank:]]*x[[:digit:]]+
+NL \n
+WS [[:blank:]]+
+%%
+virtual return gettoken(T_VIRTUAL, yytext, yyleng);
+display return gettoken(T_DISPLAY, yytext, yyleng);
+wall return gettoken(T_WALL, yytext, yyleng);
+option return gettoken(T_OPTION, yytext, yyleng);
+param return gettoken(T_PARAM, yytext, yyleng);
+{dimension} return getdimension(T_DIMENSION, yytext, yyleng);
+{offset} return getdimension(T_OFFSET, yytext+1, yyleng-1);
+{origin} return getdimension(T_ORIGIN, yytext+1, yyleng-1);
+{word} return getstring(T_STRING, yytext, yyleng);
+{string} return getstring(T_STRING, yytext+1, yyleng-2);
+{NL} ++lineno;
+{WS}
+\{ return gettoken(yytext[0], yytext, yyleng);
+\} return gettoken(yytext[0], yytext, yyleng);
+\; return gettoken(yytext[0], yytext, yyleng);
+\/ return gettoken(yytext[0], yytext, yyleng);
+^{comment} return getcomment(T_LINE_COMMENT, yytext, yyleng);
+{comment} return getcomment(T_COMMENT, yytext, yyleng);
+. return getstring(T_STRING, yytext, yyleng);
+<<EOF>> return 0;
+%%
+int yywrap(void)
+{
+ return 1;
+}
+
+void yyerror(const char *message)
+{
+ const char *pt, *end;
+ struct _entry {
+ const char *from;
+ const char *to;
+ } *entry, list[] = {
+ { "T_VIRTUAL", "\"virtual\"" },
+ { "T_DISPLAY", "\"display\"" },
+ { "T_WALL", "\"wall\"" },
+ { "T_OPTION", "\"option\"" },
+ { "T_PARAM", "\"param\"" },
+ { "T_DIMENSION", "dimension (e.g., 2x2 or 1024x768)" },
+ { "T_OFFSET", "display offset (e.g., +10-10)" },
+ { "T_ORIGIN", "tile origin (e.g., @1280x1024)" },
+ { "T_STRING", "string" },
+ { "T_COMMENT", "comment (e.g., #...)" },
+ { "T_LINE_COMMENT", "comment (e.g., #...)" },
+ { NULL, NULL }
+ };
+
+ fprintf(stderr, "parse error on line %d at token \"%*.*s\"\n",
+ lineno, yyleng, yyleng, yytext);
+ end = message + strlen(message);
+ for (pt = message; *pt; pt++) {
+ if (pt[0] == 'T' && pt[1] == '_') {
+ const char *next = strchr(pt, ' ');
+ if (!next || !*next) next = strchr(pt, '\0');
+ if (!next) goto bail;
+ --next;
+ if (next-pt == 1 && next[1]
+ && next[2] == '\'' && next[3] == '\'') {
+ fprintf(stderr, "\"%c\"", next[1]);
+ pt += 4;
+ goto cnt;
+ }
+ for (entry = list; entry->from; ++entry) {
+ if (!strncmp(entry->from, pt, strlen(entry->from))) {
+ fprintf(stderr, "%s", entry->to);
+ pt = next;
+ goto cnt;
+ }
+ }
+ } else if (end-pt >= 5 && pt[0] == '\'' && pt[1] == '\'' && pt[3]
+ && pt[4] == '\'' && pt[5] == '\'') {
+ fprintf(stderr, "\"%c\"", pt[3]);
+ pt += 5;
+ } else if (end-pt >= 3 && pt[0] == '\'' && pt[1] && pt[2] == '\'') {
+ fprintf(stderr, "\"%c\"", pt[1]);
+ pt += 3;
+ }
+ bail:
+ putc(*pt, stderr);
+ cnt:
+ ;
+ }
+ fprintf(stderr, "\n");
+ exit( 1 );
+}
+
+static int getdimension(int token, const char *text, int leng)
+{
+ char *endptr;
+ char *tmp = dmxConfigAlloc(leng+1);
+ int x, y;
+
+ strncpy(tmp, text, leng);
+ x = strtol(tmp, &endptr, 10);
+ while (*endptr && !isdigit(*endptr)) ++endptr;
+ y = strtol(endptr, NULL, 10);
+ dmxConfigFree(tmp);
+ yylval.pair = dmxConfigCreatePair(token, lineno, NULL, x, y, 1, 1);
+ return token;
+}
+
+static int getstring(int token, const char *text, int leng)
+{
+ yylval.string = dmxConfigCreateString(token, lineno, NULL,
+ dmxConfigCopyString(leng ? text : "",
+ leng));
+ return token;
+}
+
+static int gettoken(int token, const char *text, int leng)
+{
+ yylval.token = dmxConfigCreateToken(token, lineno, NULL);
+ return token;
+}
+
+static int getcomment(int token, const char *text, int leng)
+{
+ yylval.comment = dmxConfigCreateComment(token, lineno,
+ dmxConfigCopyString(text + 1,
+ leng - 1));
+ return token;
+}
diff --git a/hw/dmx/config/test-a.in b/hw/dmx/config/test-a.in
new file mode 100644
index 0000000..8276753
--- /dev/null
+++ b/hw/dmx/config/test-a.in
@@ -0,0 +1 @@
+error
diff --git a/hw/dmx/config/test-a.out b/hw/dmx/config/test-a.out
new file mode 100644
index 0000000..d35b29f
--- /dev/null
+++ b/hw/dmx/config/test-a.out
@@ -0,0 +1,2 @@
+parse error on line 1 at token "error"
+syntax error, unexpected string expecting "virtual" or comment (e.g., #...)
diff --git a/hw/dmx/config/test-b.in b/hw/dmx/config/test-b.in
new file mode 100644
index 0000000..308ec1d
--- /dev/null
+++ b/hw/dmx/config/test-b.in
@@ -0,0 +1 @@
+# comment
diff --git a/hw/dmx/config/test-b.out b/hw/dmx/config/test-b.out
new file mode 100644
index 0000000..308ec1d
--- /dev/null
+++ b/hw/dmx/config/test-b.out
@@ -0,0 +1 @@
+# comment
diff --git a/hw/dmx/config/test-c.in b/hw/dmx/config/test-c.in
new file mode 100644
index 0000000..e07ae5b
--- /dev/null
+++ b/hw/dmx/config/test-c.in
@@ -0,0 +1 @@
+virtual
diff --git a/hw/dmx/config/test-c.out b/hw/dmx/config/test-c.out
new file mode 100644
index 0000000..7390397
--- /dev/null
+++ b/hw/dmx/config/test-c.out
@@ -0,0 +1,2 @@
+parse error on line 2 at token " "
+syntax error, unexpected $end, expecting "{" or string or dimension (e.g., 2x2 or 1024x768)
diff --git a/hw/dmx/config/test-d.in b/hw/dmx/config/test-d.in
new file mode 100644
index 0000000..6827503
--- /dev/null
+++ b/hw/dmx/config/test-d.in
@@ -0,0 +1 @@
+display
diff --git a/hw/dmx/config/test-d.out b/hw/dmx/config/test-d.out
new file mode 100644
index 0000000..f3219b3
--- /dev/null
+++ b/hw/dmx/config/test-d.out
@@ -0,0 +1,2 @@
+parse error on line 1 at token "display"
+syntax error, unexpected "display" expecting "virtual" or comment (e.g., #...)
diff --git a/hw/dmx/config/test-e.in b/hw/dmx/config/test-e.in
new file mode 100644
index 0000000..21dbde9
--- /dev/null
+++ b/hw/dmx/config/test-e.in
@@ -0,0 +1 @@
+display;
diff --git a/hw/dmx/config/test-e.out b/hw/dmx/config/test-e.out
new file mode 100644
index 0000000..f3219b3
--- /dev/null
+++ b/hw/dmx/config/test-e.out
@@ -0,0 +1,2 @@
+parse error on line 1 at token "display"
+syntax error, unexpected "display" expecting "virtual" or comment (e.g., #...)
diff --git a/hw/dmx/config/test-f.in b/hw/dmx/config/test-f.in
new file mode 100644
index 0000000..17f6c63
--- /dev/null
+++ b/hw/dmx/config/test-f.in
@@ -0,0 +1,2 @@
+virtual {
+}
diff --git a/hw/dmx/config/test-f.out b/hw/dmx/config/test-f.out
new file mode 100644
index 0000000..ba3f441
--- /dev/null
+++ b/hw/dmx/config/test-f.out
Binary files differ
diff --git a/hw/dmx/config/test-g.in b/hw/dmx/config/test-g.in
new file mode 100644
index 0000000..453d812
--- /dev/null
+++ b/hw/dmx/config/test-g.in
@@ -0,0 +1,4 @@
+virtual a {
+ display d0:0 1280x1024;
+ display d1:0 1280x1024;
+}
diff --git a/hw/dmx/config/test-g.out b/hw/dmx/config/test-g.out
new file mode 100644
index 0000000..453d812
--- /dev/null
+++ b/hw/dmx/config/test-g.out
@@ -0,0 +1,4 @@
+virtual a {
+ display d0:0 1280x1024;
+ display d1:0 1280x1024;
+}
diff --git a/hw/dmx/config/test-h.in b/hw/dmx/config/test-h.in
new file mode 100644
index 0000000..1193d30
--- /dev/null
+++ b/hw/dmx/config/test-h.in
@@ -0,0 +1,7 @@
+# comment a
+# comment b
+## comment c
+# <-- tab
+# Next comment is empty
+#
+# Non empty
diff --git a/hw/dmx/config/test-h.out b/hw/dmx/config/test-h.out
new file mode 100644
index 0000000..1193d30
--- /dev/null
+++ b/hw/dmx/config/test-h.out
@@ -0,0 +1,7 @@
+# comment a
+# comment b
+## comment c
+# <-- tab
+# Next comment is empty
+#
+# Non empty
diff --git a/hw/dmx/config/test-i.in b/hw/dmx/config/test-i.in
new file mode 100644
index 0000000..b65967e
--- /dev/null
+++ b/hw/dmx/config/test-i.in
@@ -0,0 +1,3 @@
+virtual a {
+ param a b; # comment
+}
diff --git a/hw/dmx/config/test-i.out b/hw/dmx/config/test-i.out
new file mode 100644
index 0000000..b65967e
--- /dev/null
+++ b/hw/dmx/config/test-i.out
@@ -0,0 +1,3 @@
+virtual a {
+ param a b; # comment
+}
diff --git a/hw/dmx/config/test-j.in b/hw/dmx/config/test-j.in
new file mode 100644
index 0000000..cc1cdd0
--- /dev/null
+++ b/hw/dmx/config/test-j.in
@@ -0,0 +1,13 @@
+virtual a {
+ option aaa # bbb
+ aa cc;
+ param { # comment 1
+ a b;
+ c d;
+ x y z; # comment 2
+ }
+ param e f g h; # comment 3
+ param e f g hlskdjflskdfjsd #comment 4
+ flksdjf sldkfjsldkfjsdlf
+ "lsdkfjsldkfjlsdkjflskdjflsdkjfl" "lkjsdlfjsdlfkjsdlfj";
+}
diff --git a/hw/dmx/config/test-j.out b/hw/dmx/config/test-j.out
new file mode 100644
index 0000000..9acaa00
--- /dev/null
+++ b/hw/dmx/config/test-j.out
@@ -0,0 +1,11 @@
+virtual a {
+ option "aaa aa cc";
+ param { # comment 1
+ a b;
+ c d;
+ x y z; # comment 2
+ }
+ param e f g h; # comment 3
+ param e f g hlskdjflskdfjsd #comment 4
+ flksdjf sldkfjsldkfjsdlf lsdkfjsldkfjlsdkjflskdjflsdkjfl lkjsdlfjsdlfkjsdlfj;
+}
diff --git a/hw/dmx/config/test-k.in b/hw/dmx/config/test-k.in
new file mode 100644
index 0000000..2218d26
--- /dev/null
+++ b/hw/dmx/config/test-k.in
@@ -0,0 +1,3 @@
+virtual a {
+ option +xinerama -syncbatch 0;
+}
diff --git a/hw/dmx/config/test-k.out b/hw/dmx/config/test-k.out
new file mode 100644
index 0000000..ebd7439
--- /dev/null
+++ b/hw/dmx/config/test-k.out
@@ -0,0 +1,3 @@
+virtual a {
+ option "+xinerama -syncbatch 0";
+}
diff --git a/hw/dmx/config/test-l.in b/hw/dmx/config/test-l.in
new file mode 100644
index 0000000..7bf0513
--- /dev/null
+++ b/hw/dmx/config/test-l.in
@@ -0,0 +1,12 @@
+virtual a {
+ display d0:0 1x2;
+ display d1:0 +3+4;
+ display d2:0 100x200 @1x1;
+ display d3:0 +3+4 @2x2;
+ display d4:0 100x200+3+4 @3x3;
+ display d5:0 / 1x2+3+4;
+ display d6:0 / 1x2;
+ display d7:0 / +3+4;
+ display d8:0 / 1x2+3+4 @4x4;
+ display d9:0 11x22+33+44 / 111x222+333+444 @1000x1100;
+}
diff --git a/hw/dmx/config/test-l.out b/hw/dmx/config/test-l.out
new file mode 100644
index 0000000..7bf0513
--- /dev/null
+++ b/hw/dmx/config/test-l.out
@@ -0,0 +1,12 @@
+virtual a {
+ display d0:0 1x2;
+ display d1:0 +3+4;
+ display d2:0 100x200 @1x1;
+ display d3:0 +3+4 @2x2;
+ display d4:0 100x200+3+4 @3x3;
+ display d5:0 / 1x2+3+4;
+ display d6:0 / 1x2;
+ display d7:0 / +3+4;
+ display d8:0 / 1x2+3+4 @4x4;
+ display d9:0 11x22+33+44 / 111x222+333+444 @1000x1100;
+}
diff --git a/hw/dmx/config/vdltodmx.c b/hw/dmx/config/vdltodmx.c
new file mode 100644
index 0000000..69563f1
--- /dev/null
+++ b/hw/dmx/config/vdltodmx.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include "dmxconfig.h"
+#include "dmxparse.h"
+#include "dmxprint.h"
+#include "dmxcompat.h"
+
+int main(int argc, char **argv)
+{
+ DMXConfigEntryPtr entry;
+ FILE *str;
+
+ if (argc != 2 && argc !=3) {
+ fprintf(stderr, "Usage: vdltodmx inFile [outFile]\n");
+ return 1;
+ }
+ if (argc == 2) {
+ str = stdout;
+ } else if (!(str = fopen(argv[2], "w"))) {
+ fprintf(stderr, "Cannot open %s for write\n", argv[2]);
+ return 2;
+ }
+ entry = dmxVDLRead(argv[1]);
+ dmxConfigPrint(str, entry);
+ return 0;
+}
diff --git a/hw/dmx/config/xdmxconfig.c b/hw/dmx/config/xdmxconfig.c
new file mode 100644
index 0000000..c67077a
--- /dev/null
+++ b/hw/dmx/config/xdmxconfig.c
@@ -0,0 +1,1191 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Xaw/Form.h>
+#include <X11/Xaw/Box.h>
+/* #include <X11/Xaw/Paned.h> */
+#include <X11/Xaw/Command.h>
+#include <X11/Xaw/SimpleMenu.h>
+#include <X11/Xaw/SmeBSB.h>
+#include <X11/Xaw/MenuButton.h>
+#include <X11/Xaw/Viewport.h>
+#include <X11/Xaw/Dialog.h>
+#include <X11/keysym.h>
+#include <X11/Xmu/SysUtil.h>
+#include "Canvas.h"
+
+#include "dmxparse.h"
+#include "dmxprint.h"
+#include "dmxlog.h"
+
+extern int yyparse(void);
+extern FILE *yyin;
+
+#define DMX_INFO "xdmxconfig v0.9\nCopyright 2002 Red Hat Inc.\n"
+
+#define DMX_MAIN_WIDTH 800
+#define DMX_MAIN_HEIGHT 600
+#define DMX_DATA_WIDTH 200
+#define DMX_DATA_HEIGHT 200
+#define DMX_CANVAS_WIDTH 400
+#define DMX_CANVAS_HEIGHT 500
+
+DMXConfigEntryPtr dmxConfigEntry;
+static DMXConfigVirtualPtr dmxConfigCurrent, dmxConfigNewVirtual;
+static DMXConfigDisplayPtr dmxConfigCurrentDisplay, dmxConfigNewDisplay;
+static int dmxConfigGrabbed, dmxConfigGrabbedFine;
+static int dmxConfigGrabbedX, dmxConfigGrabbedY;
+static char *dmxConfigFilename;
+static GC dmxConfigGC, dmxConfigGCRev, dmxConfigGCHL;
+static int dmxConfigGCInit = 0;
+static Dimension dmxConfigWidgetWidth, dmxConfigWidgetHeight;
+static Dimension dmxConfigWallWidth, dmxConfigWallHeight;
+static double dmxConfigScaleX, dmxConfigScaleY;
+static int dmxConfigNotSaved;
+static enum {
+ dmxConfigStateOpen,
+ dmxConfigStateSave
+} dmxConfigState;
+
+/* Global widgets */
+static Widget canvas;
+static Widget cnamebox, cdimbox;
+static Widget openpopup, opendialog;
+static Widget namebox, dimbox, rtbox, origbox;
+static Widget okbutton, buttonpopup;
+static Widget ecbutton, dcbutton;
+static Widget ndbutton0, ndbutton1, edbutton, ddbutton;
+static Widget ecpopup, ecdialog0, ecdialog1;
+static Widget edpopup, eddialog0, eddialog1, eddialog2;
+static Widget aboutpopup, quitpopup;
+
+static void dmxConfigCanvasGCs(void)
+{
+ Display *dpy = XtDisplay(canvas);
+ Window win = XtWindow(canvas);
+ XGCValues gcvals;
+ unsigned long mask;
+ Colormap colormap;
+ XColor fg, bg, hl, tmp;
+
+ if (dmxConfigGCInit++) return;
+
+ XtVaGetValues(canvas, XtNcolormap, &colormap, NULL);
+ XAllocNamedColor(XtDisplay(canvas), colormap, "black", &bg, &tmp);
+ XAllocNamedColor(XtDisplay(canvas), colormap, "white", &fg, &tmp);
+ XAllocNamedColor(XtDisplay(canvas), colormap, "red", &hl, &tmp);
+
+ mask = (GCFunction | GCPlaneMask | GCClipMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle | GCCapStyle |
+ GCFillStyle);
+
+ /* FIXME: copy this from widget */
+ gcvals.function = GXcopy;
+ gcvals.plane_mask = AllPlanes;
+ gcvals.clip_mask = None;
+ gcvals.foreground = fg.pixel;
+ gcvals.background = bg.pixel;
+ gcvals.line_width = 0;
+ gcvals.line_style = LineSolid;
+ gcvals.cap_style = CapNotLast;
+ gcvals.fill_style = FillSolid;
+
+ dmxConfigGC = XCreateGC(dpy, win, mask, &gcvals);
+ gcvals.foreground = hl.pixel;
+ dmxConfigGCHL = XCreateGC(dpy, win, mask, &gcvals);
+ gcvals.foreground = bg.pixel;
+ gcvals.background = fg.pixel;
+ dmxConfigGCRev = XCreateGC(dpy, win, mask, &gcvals);
+}
+
+static void dmxConfigGetDims(int *maxWidth, int *maxHeight)
+{
+ DMXConfigSubPtr pt;
+ DMXConfigEntryPtr e;
+
+ *maxWidth = dmxConfigWallWidth = 0;
+ *maxHeight = dmxConfigWallHeight = 0;
+ if (!dmxConfigCurrent) return;
+
+ dmxConfigWallWidth = dmxConfigCurrent->width;
+ dmxConfigWallHeight = dmxConfigCurrent->height;
+ if (!dmxConfigWallWidth || !dmxConfigWallHeight) {
+ for (pt = dmxConfigCurrent->subentry; pt; pt = pt->next) {
+ if (pt->type == dmxConfigDisplay) {
+ int x = pt->display->scrnWidth + pt->display->rootXOrigin;
+ int y = pt->display->scrnHeight + pt->display->rootYOrigin;
+ if (x > dmxConfigWallWidth) dmxConfigWallWidth = x;
+ if (y > dmxConfigWallHeight) dmxConfigWallHeight = y;
+ }
+ }
+ }
+ /* Compute maximums */
+ *maxWidth = *maxHeight = 0;
+ for (e = dmxConfigEntry; e; e = e->next) {
+ if (e->type != dmxConfigVirtual) continue;
+ for (pt = e->virtual->subentry; pt; pt = pt->next) {
+ if (pt->type == dmxConfigDisplay) {
+ int x = pt->display->scrnWidth + pt->display->rootXOrigin;
+ int y = pt->display->scrnHeight + pt->display->rootYOrigin;
+ if (x > *maxWidth) *maxWidth = x;
+ if (y > *maxHeight) *maxHeight = y;
+ }
+ }
+ }
+ if (dmxConfigWallWidth > *maxWidth) *maxWidth = dmxConfigWallWidth;
+ if (dmxConfigWallHeight > *maxHeight) *maxHeight = dmxConfigWallHeight;
+}
+
+static int scalex(int x) { return (int)((x * dmxConfigScaleX) + .5); }
+static int scaley(int y) { return (int)((y * dmxConfigScaleY) + .5); }
+static int unscalex(int x) { return (int)((x / dmxConfigScaleX) + .5); }
+static int unscaley(int y) { return (int)((y / dmxConfigScaleY) + .5); }
+
+static void dmxConfigDataUpdate(void)
+{
+ /* FIXME: could result in buffer overflows */
+ char cnambuf[512];
+ char cdimbuf[128];
+ char nambuf[512];
+ char dimbuf[128];
+ char rtbuf[128];
+ char offbuf[128];
+ const char *name;
+
+ if (!dmxConfigCurrent) {
+ XtVaSetValues(cnamebox, XtNlabel, "", XtNsensitive, False, NULL);
+ XtVaSetValues(cdimbox, XtNlabel, "", XtNsensitive, False, NULL);
+ XtVaSetValues(ecbutton, XtNsensitive, False, NULL);
+ XtVaSetValues(dcbutton, XtNsensitive, False, NULL);
+ XtVaSetValues(ndbutton0, XtNsensitive, False, NULL);
+ XtVaSetValues(ndbutton1, XtNsensitive, False, NULL);
+ } else {
+ name = dmxConfigCurrent->name;
+ XmuSnprintf(cnambuf, sizeof(cnambuf), "%s", name ? name : "");
+ XmuSnprintf(cdimbuf, sizeof(cdimbuf), "%dx%d",
+ dmxConfigWallWidth, dmxConfigWallHeight);
+ XtVaSetValues(cnamebox, XtNlabel, cnambuf, XtNsensitive, True, NULL);
+ XtVaSetValues(cdimbox, XtNlabel, cdimbuf, XtNsensitive, True, NULL);
+ XtVaSetValues(ecbutton, XtNsensitive, True, NULL);
+ XtVaSetValues(dcbutton, XtNsensitive, True, NULL);
+ XtVaSetValues(ndbutton0, XtNsensitive, True, NULL);
+ XtVaSetValues(ndbutton1, XtNsensitive, True, NULL);
+ }
+
+ if (!dmxConfigCurrentDisplay) {
+ XtVaSetValues(namebox, XtNlabel, "", XtNsensitive, False, NULL);
+ XtVaSetValues(dimbox, XtNlabel, "", XtNsensitive, False, NULL);
+ XtVaSetValues(rtbox, XtNlabel, "", XtNsensitive, False, NULL);
+ XtVaSetValues(origbox, XtNlabel, "", XtNsensitive, False, NULL);
+ XtVaSetValues(edbutton, XtNsensitive, False, NULL);
+ XtVaSetValues(ddbutton, XtNsensitive, False, NULL);
+ } else {
+ name = dmxConfigCurrentDisplay->name;
+ XmuSnprintf(nambuf, sizeof(nambuf), "%s", name ? name : "");
+ XmuSnprintf(dimbuf, sizeof(dimbuf), "%dx%d%c%d%c%d",
+ dmxConfigCurrentDisplay->scrnWidth,
+ dmxConfigCurrentDisplay->scrnHeight,
+ dmxConfigCurrentDisplay->scrnXSign < 0 ? '-' : '+',
+ dmxConfigCurrentDisplay->scrnX,
+ dmxConfigCurrentDisplay->scrnYSign < 0 ? '-' : '+',
+ dmxConfigCurrentDisplay->scrnY);
+ XmuSnprintf(rtbuf, sizeof(dimbuf), "%dx%d%c%d%c%d",
+ dmxConfigCurrentDisplay->rootWidth,
+ dmxConfigCurrentDisplay->rootHeight,
+ dmxConfigCurrentDisplay->rootXSign < 0 ? '-' : '+',
+ dmxConfigCurrentDisplay->rootX,
+ dmxConfigCurrentDisplay->rootYSign < 0 ? '-' : '+',
+ dmxConfigCurrentDisplay->rootY);
+ XmuSnprintf(offbuf, sizeof(offbuf), "@%dx%d",
+ dmxConfigCurrentDisplay->rootXOrigin,
+ dmxConfigCurrentDisplay->rootYOrigin);
+ XtVaSetValues(namebox, XtNlabel, nambuf, XtNsensitive, True, NULL);
+ XtVaSetValues(dimbox, XtNlabel, dimbuf, XtNsensitive, True, NULL);
+ XtVaSetValues(rtbox, XtNlabel, rtbuf, XtNsensitive, True, NULL);
+ XtVaSetValues(origbox, XtNlabel, offbuf, XtNsensitive, True, NULL);
+ XtVaSetValues(edbutton, XtNsensitive, True, NULL);
+ XtVaSetValues(ddbutton, XtNsensitive, True, NULL);
+ }
+}
+
+static void dmxConfigCanvasUpdate(void)
+{
+ DMXConfigSubPtr pt;
+ Display *dpy = XtDisplay(canvas);
+ Window win = XtWindow(canvas);
+ GContext gcontext = XGContextFromGC(dmxConfigGC);
+ XFontStruct *fs;
+ int w, h;
+
+ XFillRectangle(dpy, win, dmxConfigGCRev,
+ 0, 0, dmxConfigWidgetWidth, dmxConfigWidgetHeight);
+ dmxConfigDataUpdate();
+ if (!dmxConfigCurrent) return;
+
+ w = scalex(dmxConfigWallWidth);
+ h = scaley(dmxConfigWallHeight);
+ if (w > dmxConfigWidgetWidth - 1) w = dmxConfigWidgetWidth - 1;
+ if (h > dmxConfigWidgetHeight - 1) h = dmxConfigWidgetHeight - 1;
+ XDrawRectangle(dpy, win, dmxConfigGC, 0, 0, w, h);
+ fs = XQueryFont(dpy, gcontext);
+ for (pt = dmxConfigCurrent->subentry; pt; pt = pt->next) {
+ int x, y, len;
+ int xo = 3, yo = fs->ascent + fs->descent + 2;
+ GC gc;
+
+ if (pt->type != dmxConfigDisplay) continue;
+ gc = (pt->display == dmxConfigCurrentDisplay
+ ? dmxConfigGCHL
+ : dmxConfigGC);
+ x = scalex(pt->display->rootXOrigin);
+ y = scaley(pt->display->rootYOrigin);
+ w = scalex(pt->display->scrnWidth);
+ h = scaley(pt->display->scrnHeight);
+ len = pt->display->name ? strlen(pt->display->name) : 0;
+ if (x > dmxConfigWidgetWidth - 1) x = dmxConfigWidgetWidth - 1;
+ if (y > dmxConfigWidgetHeight - 1) y = dmxConfigWidgetHeight - 1;
+ XDrawRectangle(dpy, win, gc, x, y, w, h);
+ if (fs && len) {
+ while (len && XTextWidth(fs, pt->display->name, len) >= w - 2 * xo)
+ --len;
+ if (len)
+ XDrawString(dpy, win, gc, x+xo, y+yo, pt->display->name, len);
+ }
+ }
+ if (fs) XFreeFontInfo(NULL, fs, 0);
+}
+
+static void dmxConfigCanvasDraw(Region region)
+{
+ Display *dpy = XtDisplay(canvas);
+ int maxWidth, maxHeight;
+
+ dmxConfigCanvasGCs();
+ if (region) {
+ XSetRegion(dpy, dmxConfigGC, region);
+ XSetRegion(dpy, dmxConfigGCRev, region);
+ XSetRegion(dpy, dmxConfigGCHL, region);
+ }
+ XtVaGetValues(canvas,
+ XtNwidth, &dmxConfigWidgetWidth,
+ XtNheight, &dmxConfigWidgetHeight,
+ NULL);
+ dmxConfigGetDims(&maxWidth, &maxHeight);
+ dmxConfigScaleX = (double)dmxConfigWidgetWidth / maxWidth;
+ dmxConfigScaleY = (double)dmxConfigWidgetHeight / maxHeight;
+ if (dmxConfigScaleX > dmxConfigScaleY) dmxConfigScaleX = dmxConfigScaleY;
+ if (dmxConfigScaleY > dmxConfigScaleX) dmxConfigScaleY = dmxConfigScaleX;
+ dmxConfigCanvasUpdate();
+ if (region) {
+ XSetClipMask(dpy, dmxConfigGC, None);
+ XSetClipMask(dpy, dmxConfigGCRev, None);
+ XSetClipMask(dpy, dmxConfigGCHL, None);
+ }
+}
+
+static void dmxConfigSelectCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ dmxConfigCurrent = closure;
+ dmxConfigVirtualPrint(stdout, dmxConfigCurrent);
+ dmxConfigCanvasDraw(NULL);
+}
+
+static void dmxConfigCopystrings(void)
+{
+ DMXConfigEntryPtr pt;
+ DMXConfigSubPtr sub;
+
+ if (!dmxConfigCurrent) return;
+
+ /* FIXME: this is all a per-config file
+ * memory leak */
+ for (pt = dmxConfigEntry; pt; pt = pt->next) {
+ if (pt->type == dmxConfigVirtual) {
+ pt->virtual->name = XtNewString(pt->virtual->name
+ ? pt->virtual->name
+ : "");
+
+ for (sub = pt->virtual->subentry; sub; sub = sub->next) {
+ if (sub->type != dmxConfigDisplay) continue;
+ sub->display->name = XtNewString(sub->display->name
+ ? sub->display->name
+ : "");
+ }
+ }
+ }
+}
+
+static void dmxConfigGetValueString(char **d, Widget w)
+{
+ const char *tmp = XawDialogGetValueString(w);
+ if (*d) XtFree(*d);
+ *d = XtNewString(tmp);
+}
+
+static void dmxConfigSetupCnamemenu(void)
+{
+ static Widget cnamemenu = NULL;
+ Widget w;
+ DMXConfigEntryPtr pt;
+
+ if (cnamemenu) XtDestroyWidget(cnamemenu);
+ cnamemenu = NULL;
+
+ if (!dmxConfigCurrent) return;
+ cnamemenu = XtVaCreatePopupShell("cnamemenu", simpleMenuWidgetClass,
+ cnamebox,
+ NULL);
+
+ for (pt = dmxConfigEntry; pt; pt = pt->next) {
+ if (pt->type == dmxConfigVirtual) {
+ w = XtVaCreateManagedWidget(pt->virtual->name
+ ? pt->virtual->name
+ : "",
+ smeBSBObjectClass, cnamemenu,
+ NULL);
+ XtAddCallback(w, XtNcallback,
+ dmxConfigSelectCallback, pt->virtual);
+ }
+ }
+}
+
+static void dmxConfigReadFile(void)
+{
+ FILE *str;
+ DMXConfigEntryPtr pt;
+
+ if (!(str = fopen(dmxConfigFilename, "r"))) {
+ dmxLog(dmxWarning, "Unable to read configuration file %s\n",
+ dmxConfigFilename);
+ return;
+ }
+ yyin = str;
+ yydebug = 0;
+ yyparse();
+ fclose(str);
+ dmxLog(dmxInfo, "Read configuration file %s\n", dmxConfigFilename);
+
+ for (pt = dmxConfigEntry; pt; pt = pt->next) {
+ if (pt->type == dmxConfigVirtual) {
+ dmxConfigCurrent = pt->virtual;
+ break;
+ }
+ }
+
+
+
+ if (XtIsRealized(canvas)) {
+ dmxConfigCopystrings();
+ dmxConfigSetupCnamemenu();
+ dmxConfigCanvasDraw(NULL);
+ }
+ dmxConfigVirtualPrint(stdout, dmxConfigCurrent);
+}
+
+static void dmxConfigWriteFile(void)
+{
+ FILE *str;
+
+ if (!(str = fopen(dmxConfigFilename, "w"))) {
+ dmxLog(dmxWarning, "Unable to write configuration file %s\n",
+ dmxConfigFilename);
+ return;
+ }
+ dmxConfigPrint(str, dmxConfigEntry);
+ fclose(str);
+}
+
+static DMXConfigDisplayPtr dmxConfigFindDisplay(int x, int y)
+{
+ DMXConfigSubPtr pt;
+
+ if (!dmxConfigCurrent) return NULL;
+ for (pt = dmxConfigCurrent->subentry; pt; pt = pt->next) {
+ DMXConfigDisplayPtr d = pt->display;
+ if (pt->type != dmxConfigDisplay) continue;
+ if (x >= scalex(d->rootXOrigin)
+ && x <= scalex(d->rootXOrigin + d->scrnWidth)
+ && y >= scaley(d->rootYOrigin)
+ && y <= scaley(d->rootYOrigin + d->scrnHeight)) return d;
+ }
+ return NULL;
+}
+
+static void dmxConfigSetPopupPosition(Widget popup)
+{
+ Position x, y;
+ Window t1, t2;
+ int root_x, root_y;
+ int temp_x, temp_y;
+ unsigned int temp;
+
+
+ XtRealizeWidget(popup);
+ if (!XQueryPointer(XtDisplay(popup), XtWindow(popup), &t1, &t2,
+ &root_x, &root_y, &temp_x, &temp_y, &temp))
+ root_x = root_y = 0;
+
+ x = root_x - 5;
+ y = root_y - 5;
+ XtVaSetValues(popup, XtNx, x, XtNy, y, NULL);
+}
+
+static void dmxConfigPlaceMenu(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ dmxConfigSetPopupPosition(buttonpopup);
+}
+
+static void dmxConfigMove(int deltaX, int deltaY)
+{
+ dmxConfigCurrentDisplay->rootXOrigin += deltaX;
+ dmxConfigCurrentDisplay->rootYOrigin += deltaY;
+ if (dmxConfigCurrentDisplay->rootXOrigin < 0)
+ dmxConfigCurrentDisplay->rootXOrigin = 0;
+ if (dmxConfigCurrentDisplay->rootYOrigin < 0)
+ dmxConfigCurrentDisplay->rootYOrigin = 0;
+ if (dmxConfigWallWidth && dmxConfigWallHeight) {
+ if (dmxConfigCurrentDisplay->rootXOrigin >= dmxConfigWallWidth)
+ dmxConfigCurrentDisplay->rootXOrigin = dmxConfigWallWidth - 1;
+ if (dmxConfigCurrentDisplay->rootYOrigin >= dmxConfigWallHeight)
+ dmxConfigCurrentDisplay->rootYOrigin = dmxConfigWallHeight - 1;
+ }
+ dmxConfigCanvasUpdate();
+ dmxConfigNotSaved = 1;
+}
+
+static void dmxConfigCanvasInput(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ XEvent *e = (XEvent *)callData;
+ DMXConfigDisplayPtr display = NULL;
+
+ switch (e->type) {
+ case ButtonPress:
+ if (e->xbutton.button == Button1) {
+ dmxConfigGrabbed = 1;
+ dmxConfigGrabbedFine = 0;
+ dmxConfigGrabbedX = e->xbutton.x;
+ dmxConfigGrabbedY = e->xbutton.y;
+ }
+ if (e->xbutton.button == Button2) {
+ dmxConfigGrabbed = 1;
+ dmxConfigGrabbedFine = 1;
+ dmxConfigGrabbedX = e->xbutton.x;
+ dmxConfigGrabbedY = e->xbutton.y;
+ }
+ break;
+ case ButtonRelease:
+ if (e->xbutton.button == Button1) dmxConfigGrabbed = 0;
+ if (e->xbutton.button == Button2) dmxConfigGrabbed = 0;
+ break;
+ case MotionNotify:
+ if (dmxConfigGrabbed && dmxConfigCurrentDisplay) {
+ int deltaX = e->xmotion.x - dmxConfigGrabbedX;
+ int deltaY = e->xmotion.y - dmxConfigGrabbedY;
+ dmxConfigMove(dmxConfigGrabbedFine ? deltaX : unscalex(deltaX),
+ dmxConfigGrabbedFine ? deltaY : unscaley(deltaY));
+ dmxConfigGrabbedX = e->xmotion.x;
+ dmxConfigGrabbedY = e->xmotion.y;
+ } else {
+ display = dmxConfigFindDisplay(e->xmotion.x, e->xmotion.y);
+ if (display != dmxConfigCurrentDisplay) {
+ dmxConfigCurrentDisplay = display;
+ dmxConfigCanvasUpdate();
+ }
+ }
+ break;
+ case KeyPress:
+ switch (XLookupKeysym(&e->xkey, 0)) {
+ case XK_Right: dmxConfigMove(1,0); break;
+ case XK_Left: dmxConfigMove(-1,0); break;
+ case XK_Down: dmxConfigMove(0,1); break;
+ case XK_Up: dmxConfigMove(0,-1); break;
+ }
+ break;
+ }
+}
+
+static void dmxConfigCanvasResize(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ dmxConfigCanvasDraw(NULL);
+}
+
+static void dmxConfigCanvasExpose(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ CanvasExposeDataPtr data = (CanvasExposeDataPtr)callData;
+
+ dmxConfigCanvasDraw(data->region);
+}
+
+static void dmxConfigOpenCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ dmxConfigState = dmxConfigStateOpen;
+ XtVaSetValues(okbutton, XtNlabel, "Open", NULL);
+ dmxConfigSetPopupPosition(openpopup);
+ XtPopup(openpopup, XtGrabExclusive);
+}
+
+static void dmxConfigSaveCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ dmxConfigState = dmxConfigStateSave;
+ XtVaSetValues(okbutton, XtNlabel, "Save", NULL);
+ dmxConfigSetPopupPosition(openpopup);
+ XtPopup(openpopup, XtGrabExclusive);
+}
+
+static void dmxConfigOkCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ dmxConfigGetValueString(&dmxConfigFilename, opendialog);
+ XtPopdown(openpopup);
+ if (dmxConfigState == dmxConfigStateOpen) dmxConfigReadFile();
+ else dmxConfigWriteFile();
+ dmxConfigNotSaved = 0;
+}
+
+static void dmxConfigCanCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ XtPopdown(openpopup);
+}
+
+static void dmxConfigECCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ char buf[256]; /* RATS: Only used in XmuSnprintf */
+
+ if (!dmxConfigCurrent) return;
+ dmxConfigSetPopupPosition(ecpopup);
+ XtVaSetValues(ecdialog0, XtNvalue,
+ dmxConfigCurrent->name ? dmxConfigCurrent->name : "",
+ NULL);
+ XmuSnprintf(buf, sizeof(buf), "%dx%d",
+ dmxConfigCurrent->width, dmxConfigCurrent->height);
+ XtVaSetValues(ecdialog1, XtNvalue, buf, NULL);
+ XtPopup(ecpopup, XtGrabExclusive);
+}
+
+static void dmxConfigNCCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ int width = 1280*2, height = 1024*2;
+
+ if (dmxConfigCurrent) {
+ width = dmxConfigCurrent->width;
+ height = dmxConfigCurrent->height;
+ }
+
+ dmxConfigCurrent = dmxConfigCreateVirtual(NULL, NULL, NULL,
+ NULL, NULL, NULL);
+ dmxConfigNewVirtual = dmxConfigCurrent;
+ dmxConfigCurrent->width = width;
+ dmxConfigCurrent->height = height;
+ dmxConfigEntry = dmxConfigAddEntry(dmxConfigEntry, dmxConfigVirtual, NULL,
+ dmxConfigCurrent);
+ dmxConfigECCallback(w, closure, callData);
+}
+
+static void dmxConfigDCCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ DMXConfigEntryPtr pt;
+
+ if (!dmxConfigEntry) return;
+ if (dmxConfigEntry
+ && dmxConfigEntry->type == dmxConfigVirtual
+ && dmxConfigEntry->virtual == dmxConfigCurrent) {
+ dmxConfigEntry = dmxConfigEntry->next;
+ } else {
+ for (pt = dmxConfigEntry; pt && pt->next; pt = pt->next)
+ if (pt->next->type == dmxConfigVirtual
+ && pt->next->virtual == dmxConfigCurrent) {
+ pt->next = pt->next->next;
+ break;
+ }
+ }
+ dmxConfigFreeVirtual(dmxConfigCurrent);
+ dmxConfigCurrent = NULL;
+ dmxConfigCurrentDisplay = NULL;
+
+ /* Make the first entry current */
+ for (pt = dmxConfigEntry; pt; pt = pt->next) {
+ if (pt->type == dmxConfigVirtual) {
+ dmxConfigCurrent = pt->virtual;
+ break;
+ }
+ }
+
+ dmxConfigSetupCnamemenu();
+ dmxConfigCanvasDraw(NULL);
+}
+
+static void dmxConfigECOkCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ const char *value;
+ char *endpt;
+
+ dmxConfigGetValueString((char **)&dmxConfigCurrent->name, ecdialog0);
+ value = XawDialogGetValueString(ecdialog1);
+ dmxConfigCurrent->width = strtol(value, &endpt, 10);
+ dmxConfigCurrent->height = strtol(endpt+1, NULL, 10);
+ XtPopdown(ecpopup);
+ dmxConfigCurrentDisplay = NULL;
+ dmxConfigNewVirtual = NULL;
+ dmxConfigSetupCnamemenu();
+ dmxConfigCanvasDraw(NULL);
+ dmxConfigNotSaved = 1;
+}
+
+static void dmxConfigECCanCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ if (dmxConfigNewVirtual) dmxConfigDCCallback(w, closure, callData);
+ dmxConfigNewVirtual = NULL;
+ XtPopdown(ecpopup);
+}
+
+static void dmxConfigEDCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ char buf[256]; /* RATS: Only used in XmuSnprintf */
+
+ if (!dmxConfigCurrent || !dmxConfigCurrentDisplay) return;
+ dmxConfigSetPopupPosition(edpopup);
+ XtVaSetValues(eddialog0, XtNvalue,
+ dmxConfigCurrentDisplay->name
+ ? dmxConfigCurrentDisplay->name
+ : "",
+ NULL);
+ XmuSnprintf(buf, sizeof(buf), "%dx%d%c%d%c%d",
+ dmxConfigCurrentDisplay->scrnWidth,
+ dmxConfigCurrentDisplay->scrnHeight,
+ dmxConfigCurrentDisplay->scrnXSign < 0 ? '-' : '+',
+ dmxConfigCurrentDisplay->scrnY,
+ dmxConfigCurrentDisplay->scrnYSign < 0 ? '-' : '+',
+ dmxConfigCurrentDisplay->scrnY);
+ XtVaSetValues(eddialog1, XtNvalue, buf, NULL);
+ XmuSnprintf(buf, sizeof(buf), "@%dx%d",
+ dmxConfigCurrentDisplay->rootXOrigin,
+ dmxConfigCurrentDisplay->rootYOrigin);
+ XtVaSetValues(eddialog2, XtNvalue, buf, NULL);
+ XtPopup(edpopup, XtGrabExclusive);
+}
+
+static void dmxConfigNDCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ int width = 1280, height = 1024;
+
+ if (!dmxConfigCurrent) return;
+ if (dmxConfigCurrentDisplay) {
+ width = dmxConfigCurrentDisplay->scrnWidth;
+ height = dmxConfigCurrentDisplay->scrnHeight;
+ }
+ dmxConfigCurrentDisplay = dmxConfigCreateDisplay(NULL, NULL, NULL,
+ NULL, NULL);
+ dmxConfigNewDisplay = dmxConfigCurrentDisplay;
+ dmxConfigCurrentDisplay->scrnWidth = width;
+ dmxConfigCurrentDisplay->scrnHeight = height;
+
+ dmxConfigCurrent->subentry
+ = dmxConfigAddSub(dmxConfigCurrent->subentry,
+ dmxConfigSubDisplay(dmxConfigCurrentDisplay));
+ dmxConfigEDCallback(w, closure, callData);
+}
+
+static void dmxConfigDDCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ DMXConfigSubPtr pt;
+
+ if (!dmxConfigCurrent || !dmxConfigCurrentDisplay) return;
+ /* First */
+ if (dmxConfigCurrent->subentry
+ && dmxConfigCurrent->subentry->type == dmxConfigDisplay
+ && dmxConfigCurrent->subentry->display == dmxConfigCurrentDisplay) {
+ dmxConfigCurrent->subentry = dmxConfigCurrent->subentry->next;
+ } else {
+ for (pt = dmxConfigCurrent->subentry; pt && pt->next; pt = pt->next)
+ if (pt->next->type == dmxConfigDisplay
+ && pt->next->display == dmxConfigCurrentDisplay) {
+ pt->next = pt->next->next;
+ break;
+ }
+ }
+ dmxConfigFreeDisplay(dmxConfigCurrentDisplay);
+ dmxConfigCurrentDisplay = NULL;
+ dmxConfigSetupCnamemenu();
+ dmxConfigCanvasDraw(NULL);
+}
+
+static void dmxConfigAboutCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ dmxConfigSetPopupPosition(aboutpopup);
+ XtPopup(aboutpopup, XtGrabExclusive);
+}
+
+static void dmxConfigAboutOkCallback(Widget w, XtPointer closure,
+ XtPointer CallData)
+{
+ XtPopdown(aboutpopup);
+}
+
+static void dmxConfigQuitCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ if (dmxConfigNotSaved) {
+ dmxConfigSetPopupPosition(quitpopup);
+ XtPopup(quitpopup, XtGrabExclusive);
+ return;
+ }
+ exit(0);
+}
+
+static void dmxConfigQuitOkCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ XtPopdown(quitpopup);
+ exit(0);
+}
+
+static void dmxConfigQuitCanCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ XtPopdown(quitpopup);
+}
+
+static void dmxConfigEDOkCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ char *value;
+ char *endpt;
+
+ dmxConfigNewDisplay = NULL;
+ dmxConfigGetValueString((char **)&dmxConfigCurrentDisplay->name,
+ eddialog0);
+ value = XawDialogGetValueString(eddialog1);
+ if (*value == '-' || *value == '+') {
+ dmxConfigCurrentDisplay->scrnWidth = 0;
+ dmxConfigCurrentDisplay->scrnHeight = 0;
+ endpt = value;
+ } else {
+ dmxConfigCurrentDisplay->scrnWidth = strtol(value, &endpt, 10);
+ dmxConfigCurrentDisplay->scrnHeight = strtol(endpt+1, &endpt, 10);
+ }
+ if (*endpt) {
+ dmxConfigCurrentDisplay->scrnXSign = (*endpt == '-') ? -1 : 1;
+ dmxConfigCurrentDisplay->scrnX = strtol(endpt+1, &endpt, 10);
+ dmxConfigCurrentDisplay->scrnYSign = (*endpt == '-') ? -1 : 1;
+ dmxConfigCurrentDisplay->scrnY = strtol(endpt+1, NULL, 10);
+ }
+ if (dmxConfigCurrentDisplay->scrnX < 0)
+ dmxConfigCurrentDisplay->scrnX = -dmxConfigCurrentDisplay->scrnX;
+ if (dmxConfigCurrentDisplay->scrnY < 0)
+ dmxConfigCurrentDisplay->scrnY = -dmxConfigCurrentDisplay->scrnY;
+ value = XawDialogGetValueString(eddialog2);
+ dmxConfigCurrentDisplay->rootXOrigin = strtol(value+1, &endpt, 10);
+ dmxConfigCurrentDisplay->rootYOrigin = strtol(endpt+1, NULL, 10);
+ XtPopdown(edpopup);
+ dmxConfigSetupCnamemenu();
+ dmxConfigCanvasDraw(NULL);
+ dmxConfigNotSaved = 1;
+}
+
+static void dmxConfigEDCanCallback(Widget w, XtPointer closure,
+ XtPointer callData)
+{
+ if (dmxConfigNewDisplay) dmxConfigDDCallback(w, closure, callData);
+ dmxConfigNewDisplay = NULL;
+ XtPopdown(edpopup);
+}
+
+static void dmxConfigOkAction(Widget w, XEvent *event,
+ String *params, Cardinal *num_params)
+{
+ Widget p = XtParent(w);
+ Widget t;
+
+ if (p == opendialog) dmxConfigOkCallback(w, NULL, NULL);
+
+ if (p == ecdialog0) {
+ t = XtNameToWidget(ecdialog1, "value");
+ XWarpPointer(XtDisplay(t), None, XtWindow(t), 0, 0, 0, 0, 0, 10);
+ }
+ if (p == ecdialog1) dmxConfigECOkCallback(w, NULL, NULL);
+
+ if (p == eddialog0) {
+ t = XtNameToWidget(eddialog1, "value");
+ XWarpPointer(XtDisplay(t), None, XtWindow(t), 0, 0, 0, 0, 0, 10);
+ }
+ if (p == eddialog1) {
+ t = XtNameToWidget(eddialog2, "value");
+ XWarpPointer(XtDisplay(t), None, XtWindow(t), 0, 0, 0, 0, 0, 10);
+ }
+ if (p == eddialog2) dmxConfigEDOkCallback(w, NULL, NULL);
+}
+
+int main(int argc, char **argv)
+{
+ XtAppContext appContext;
+ Widget toplevel;
+ Widget parent, menubox, bottombox, databox, canvasbox;
+ Widget filebutton, helpbutton;
+ Widget filemenu, openbutton, savebutton, quitbutton;
+ Widget helpmenu, aboutbutton, aboutbox, abouttext, aboutok;
+ Widget quitbox, quittext, quitok, quitcan;
+ Widget ncbutton;
+ Widget canbutton;
+ Widget ecbox, ecokbutton, eccanbutton;
+ Widget edbox, edokbutton;
+ Widget edcanbutton;
+ /* FIXME: add meta-i, ctrl,meta-z,v? */
+ const char *opentrans = "<Key>Return: openOk()\n\
+ <Key>Linefeed: openOk()\n\
+ Ctrl<Key>M: openOk()\n\
+ Ctrl<Key>J: openOk()\n\
+ Ctrl<Key>O: noop()\n\
+ Ctrl<Key>N: noop()\n\
+ Ctrl<Key>P: noop()";
+ const char *canvastrans =
+ "<Btn3Down>: placeMenu() XtMenuPopup(buttonpopup)";
+ XtActionsRec actiontable[] = {
+ { "openOk", dmxConfigOkAction },
+ { "placeMenu", dmxConfigPlaceMenu },
+ { "noop", NULL }
+ };
+
+ dmxConfigFilename = XtNewString((argc >= 2) ? argv[1] : "");
+
+ toplevel = XtVaAppInitialize(&appContext, "XDmxconfig",
+ NULL, 0,
+ &argc, argv,
+ NULL,
+ NULL);
+
+ /* Main boxes */
+ parent = XtVaCreateManagedWidget("parent", formWidgetClass, toplevel,
+ XtNorientation, XtorientVertical,
+ XtNwidth, DMX_MAIN_WIDTH,
+ XtNheight, DMX_MAIN_HEIGHT,
+ NULL);
+ menubox = XtVaCreateManagedWidget("menubox", boxWidgetClass, parent,
+ XtNborderWidth, 0,
+ XtNorientation, XtorientHorizontal,
+ XtNtop, XtChainTop,
+ NULL);
+ bottombox = XtVaCreateManagedWidget("bottombox", formWidgetClass, parent,
+ XtNborderWidth, 0,
+ XtNfromVert, menubox,
+ XtNorientation, XtorientHorizontal,
+ NULL);
+ databox = XtVaCreateManagedWidget("databox", formWidgetClass,
+ bottombox,
+ XtNborderWidth, 0,
+ XtNhorizDistance, 0,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNheight, DMX_DATA_HEIGHT,
+ XtNleft, XtChainLeft,
+ XtNorientation, XtorientVertical,
+ NULL);
+
+ /* Data */
+ cnamebox = XtVaCreateManagedWidget("cnamebox", menuButtonWidgetClass,
+ databox,
+ XtNtop, XtChainTop,
+ XtNjustify, XtJustifyLeft,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNlabel, "",
+ XtNmenuName, "cnamemenu",
+ NULL);
+ cdimbox = XtVaCreateManagedWidget("cdimbox", labelWidgetClass,
+ databox,
+ XtNfromVert, cnamebox,
+ XtNjustify, XtJustifyLeft,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNlabel, "",
+ NULL);
+ namebox = XtVaCreateManagedWidget("namebox", labelWidgetClass, databox,
+ XtNfromVert, cdimbox,
+ XtNjustify, XtJustifyLeft,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNlabel, "",
+ NULL);
+ dimbox = XtVaCreateManagedWidget("dimbox", labelWidgetClass,
+ databox,
+ XtNfromVert, namebox,
+ XtNjustify, XtJustifyLeft,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNlabel, "",
+ NULL);
+ rtbox = XtVaCreateManagedWidget("rtbox", labelWidgetClass,
+ databox,
+ XtNfromVert, dimbox,
+ XtNjustify, XtJustifyLeft,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNlabel, "",
+ NULL);
+ origbox = XtVaCreateManagedWidget("origbox", labelWidgetClass,
+ databox,
+ XtNfromVert, rtbox,
+ XtNjustify, XtJustifyLeft,
+ XtNwidth, DMX_DATA_WIDTH,
+ XtNlabel, "",
+ NULL);
+
+ /* Canvas */
+ canvasbox = XtVaCreateManagedWidget("canvasbox", boxWidgetClass,
+ bottombox,
+ XtNborderWidth, 0,
+ XtNwidth, DMX_CANVAS_WIDTH,
+ XtNheight, DMX_CANVAS_HEIGHT,
+ XtNfromHoriz, databox,
+ NULL);
+
+ canvas = XtVaCreateManagedWidget("canvas", canvasWidgetClass,
+ canvasbox,
+ XtNwidth, DMX_CANVAS_WIDTH,
+ XtNheight, DMX_CANVAS_HEIGHT,
+ NULL);
+
+
+ /* Main menu buttons */
+ filebutton = XtVaCreateManagedWidget("File", menuButtonWidgetClass,
+ menubox,
+ XtNmenuName, "filemenu",
+ NULL);
+ helpbutton = XtVaCreateManagedWidget("Help", menuButtonWidgetClass,
+ menubox,
+ XtNmenuName, "helpmenu",
+ NULL);
+
+
+ /* File submenu buttons */
+ filemenu = XtVaCreatePopupShell("filemenu", simpleMenuWidgetClass,
+ filebutton, NULL);
+ openbutton = XtVaCreateManagedWidget("Open File", smeBSBObjectClass,
+ filemenu, NULL);
+ savebutton = XtVaCreateManagedWidget("Save File", smeBSBObjectClass,
+ filemenu,
+ NULL);
+ ncbutton = XtVaCreateManagedWidget("New Global", smeBSBObjectClass,
+ filemenu, NULL);
+ ecbutton = XtVaCreateManagedWidget("Edit Global", smeBSBObjectClass,
+ filemenu,
+ NULL);
+ dcbutton = XtVaCreateManagedWidget("Delete Global", smeBSBObjectClass,
+ filemenu,
+ NULL);
+ ndbutton0 = XtVaCreateManagedWidget("New Display", smeBSBObjectClass,
+ filemenu,
+ NULL);
+ quitbutton = XtVaCreateManagedWidget("Quit", smeBSBObjectClass,
+ filemenu, NULL);
+
+ /* Help submenu button */
+ helpmenu = XtVaCreatePopupShell("helpmenu", simpleMenuWidgetClass,
+ helpbutton, NULL);
+ aboutbutton = XtVaCreateManagedWidget("About", smeBSBObjectClass,
+ helpmenu, NULL);
+
+ /* Open popup */
+ openpopup = XtVaCreatePopupShell("openpopup", transientShellWidgetClass,
+ toplevel, NULL);
+ opendialog = XtVaCreateManagedWidget("opendialog", dialogWidgetClass,
+ openpopup,
+ XtNlabel, "Filename: ",
+ XtNvalue, dmxConfigFilename,
+ NULL);
+ okbutton = XtVaCreateManagedWidget("Open", commandWidgetClass,
+ opendialog, NULL);
+ canbutton = XtVaCreateManagedWidget("Cancel", commandWidgetClass,
+ opendialog, NULL);
+
+ /* EC popup */
+ ecpopup = XtVaCreatePopupShell("ecpopup", transientShellWidgetClass,
+ toplevel, NULL);
+ ecbox = XtVaCreateManagedWidget("ecbox", boxWidgetClass,
+ ecpopup, NULL);
+ ecdialog0 = XtVaCreateManagedWidget("ecdialog0", dialogWidgetClass,
+ ecbox,
+ XtNlabel, "Name: ",
+ XtNvalue, "",
+ NULL);
+ ecdialog1 = XtVaCreateManagedWidget("ecdialog1", dialogWidgetClass,
+ ecbox,
+ XtNlabel, "Dimension: ",
+ XtNvalue, "",
+ NULL);
+ ecokbutton = XtVaCreateManagedWidget("OK", commandWidgetClass,
+ ecbox, NULL);
+ eccanbutton = XtVaCreateManagedWidget("Cancel", commandWidgetClass,
+ ecbox, NULL);
+
+ /* ED popup */
+ edpopup = XtVaCreatePopupShell("edpopup", transientShellWidgetClass,
+ toplevel, NULL);
+ edbox = XtVaCreateManagedWidget("edbox", boxWidgetClass,
+ edpopup, NULL);
+ eddialog0 = XtVaCreateManagedWidget("eddialog0", dialogWidgetClass,
+ edbox,
+ XtNlabel, "Display Name: ",
+ XtNvalue, "",
+ NULL);
+ eddialog1 = XtVaCreateManagedWidget("eddialog1", dialogWidgetClass,
+ edbox,
+ XtNlabel, "Geometry: ",
+ XtNvalue, "",
+ NULL);
+ eddialog2 = XtVaCreateManagedWidget("eddialog2", dialogWidgetClass,
+ edbox,
+ XtNlabel, "Offset: ",
+ XtNvalue, "",
+ NULL);
+ edokbutton = XtVaCreateManagedWidget("OK", commandWidgetClass,
+ edbox, NULL);
+ edcanbutton = XtVaCreateManagedWidget("Cancel", commandWidgetClass,
+ edbox, NULL);
+
+ /* About popup */
+ aboutpopup = XtVaCreatePopupShell("aboutpopup",transientShellWidgetClass,
+ toplevel, NULL);
+ aboutbox = XtVaCreateManagedWidget("aboutbox", boxWidgetClass,
+ aboutpopup, NULL);
+ abouttext = XtVaCreateManagedWidget("abouttext", labelWidgetClass,
+ aboutbox,
+ XtNlabel, DMX_INFO,
+ NULL);
+ aboutok = XtVaCreateManagedWidget("OK", commandWidgetClass,
+ aboutbox, NULL);
+
+ /* Quit popup */
+ quitpopup = XtVaCreatePopupShell("quitpopup",transientShellWidgetClass,
+ toplevel, NULL);
+ quitbox = XtVaCreateManagedWidget("quitbox", boxWidgetClass,
+ quitpopup, NULL);
+ quittext = XtVaCreateManagedWidget("quittext", labelWidgetClass,
+ quitbox,
+ XtNlabel,
+ "Changes to the configuration\n"
+ "been made that have not yet\n"
+ "been saved. Do you want to\n"
+ "quit without saving?",
+ NULL);
+ quitok = XtVaCreateManagedWidget("Quit WITHOUT Saving",
+ commandWidgetClass,
+ quitbox, NULL);
+ quitcan = XtVaCreateManagedWidget("Continue Editing",
+ commandWidgetClass,
+ quitbox, NULL);
+
+ /* Button popup */
+ buttonpopup = XtVaCreatePopupShell("buttonpopup", simpleMenuWidgetClass,
+ toplevel, NULL);
+ ndbutton1 = XtVaCreateManagedWidget("New Display", smeBSBObjectClass,
+ buttonpopup,
+ NULL);
+ edbutton = XtVaCreateManagedWidget("Edit Display", smeBSBObjectClass,
+ buttonpopup,
+ NULL);
+ ddbutton = XtVaCreateManagedWidget("Delete Display", smeBSBObjectClass,
+ buttonpopup,
+ NULL);
+
+ /* Callbacks */
+ XtAddCallback(openbutton, XtNcallback, dmxConfigOpenCallback, NULL);
+ XtAddCallback(savebutton, XtNcallback, dmxConfigSaveCallback, NULL);
+ XtAddCallback(okbutton, XtNcallback, dmxConfigOkCallback, NULL);
+ XtAddCallback(canbutton, XtNcallback, dmxConfigCanCallback, NULL);
+
+ XtAppAddActions(appContext, actiontable, XtNumber(actiontable));
+ XtOverrideTranslations(canvas, XtParseTranslationTable(canvastrans));
+ XtOverrideTranslations(XtNameToWidget(opendialog, "value"),
+ XtParseTranslationTable(opentrans));
+ XtOverrideTranslations(XtNameToWidget(ecdialog0, "value"),
+ XtParseTranslationTable(opentrans));
+ XtOverrideTranslations(XtNameToWidget(ecdialog1, "value"),
+ XtParseTranslationTable(opentrans));
+ XtOverrideTranslations(XtNameToWidget(eddialog0, "value"),
+ XtParseTranslationTable(opentrans));
+ XtOverrideTranslations(XtNameToWidget(eddialog1, "value"),
+ XtParseTranslationTable(opentrans));
+ XtOverrideTranslations(XtNameToWidget(eddialog2, "value"),
+ XtParseTranslationTable(opentrans));
+
+ XtAddCallback(ncbutton, XtNcallback, dmxConfigNCCallback, NULL);
+ XtAddCallback(ecbutton, XtNcallback, dmxConfigECCallback, NULL);
+ XtAddCallback(ecokbutton, XtNcallback, dmxConfigECOkCallback, NULL);
+ XtAddCallback(eccanbutton, XtNcallback, dmxConfigECCanCallback, NULL);
+ XtAddCallback(dcbutton, XtNcallback, dmxConfigDCCallback, NULL);
+
+ XtAddCallback(ndbutton0, XtNcallback, dmxConfigNDCallback, NULL);
+ XtAddCallback(ndbutton1, XtNcallback, dmxConfigNDCallback, NULL);
+ XtAddCallback(edbutton, XtNcallback, dmxConfigEDCallback, NULL);
+ XtAddCallback(ddbutton, XtNcallback, dmxConfigDDCallback, NULL);
+ XtAddCallback(edokbutton, XtNcallback, dmxConfigEDOkCallback, NULL);
+ XtAddCallback(edcanbutton, XtNcallback, dmxConfigEDCanCallback, NULL);
+
+ XtAddCallback(aboutbutton, XtNcallback, dmxConfigAboutCallback, NULL);
+ XtAddCallback(aboutok, XtNcallback, dmxConfigAboutOkCallback, NULL);
+ XtAddCallback(quitok, XtNcallback, dmxConfigQuitOkCallback, NULL);
+ XtAddCallback(quitcan, XtNcallback, dmxConfigQuitCanCallback, NULL);
+
+ XtAddCallback(quitbutton, XtNcallback, dmxConfigQuitCallback, NULL);
+
+ XtAddCallback(canvas, XtNcallback, dmxConfigCanvasInput, NULL);
+ XtAddCallback(canvas, XtNcanvasExposeCallback, dmxConfigCanvasExpose,NULL);
+ XtAddCallback(canvas, XtNcanvasResizeCallback, dmxConfigCanvasResize,NULL);
+
+ if (dmxConfigFilename) dmxConfigReadFile();
+
+ XtRealizeWidget(toplevel);
+ dmxConfigCopystrings();
+ dmxConfigSetupCnamemenu();
+ XtAppMainLoop(appContext);
+ return 0;
+}
diff --git a/hw/dmx/dmx-config.h b/hw/dmx/dmx-config.h
new file mode 100644
index 0000000..1fda69f
--- /dev/null
+++ b/hw/dmx/dmx-config.h
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005 Red Hat Inc., Raleigh, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide configuration define's and undef's to build Xdmx in X.Org's
+ * modular source tree.
+ */
+
+#ifndef DMX_CONFIG_H
+#define DMX_CONFIG_H
+
+#include <dix-config.h>
+
+/*
+ * Note 1: This is a signed int that is printed as a decimal number.
+ * Since we want to make it human-interpretable, the fields are
+ * defined as:
+ * 2147483648
+ * AAbbyymmdd
+ * AA: major version 01-20
+ * bb: minor version 00-99
+ * yy: year 00-99 [See Note 2]
+ * mm: month 01-12
+ * dd: day 01-31
+ *
+ * Note 2: The default epoch for the year is 2000.
+ * To change the default epoch, change the DMX_VENDOR_RELEASE
+ * macro below, bumb the minor version number, and change
+ * xdpyinfo to key off the major/minor version to determine the
+ * new epoch. Remember to do this on January 1, 2100 and every
+ * 100 years thereafter.
+ */
+#define DMX_VENDOR_RELEASE(major,minor,year,month,day) \
+ ((major) * 100000000) + \
+ ((minor) * 1000000) + \
+ ((year-2000) * 10000) + \
+ ((month) * 100) + \
+ ((day) * 1)
+#define VENDOR_RELEASE DMX_VENDOR_RELEASE(1,2,2007,4,24)
+#define VENDOR_STRING "DMX Project"
+
+/* Enable the DMX extension */
+#define DMXEXT
+
+#endif /* DMX_CONFIG_H */
diff --git a/hw/dmx/dmx.c b/hw/dmx/dmx.c
new file mode 100644
index 0000000..f3e41ac
--- /dev/null
+++ b/hw/dmx/dmx.c
@@ -0,0 +1,1097 @@
+/*
+ * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This file implements the server-side part of the DMX protocol. A
+ * vector of fucntions is provided at extension initialization time, so
+ * most all of the useful functions in this file are declared static and
+ * do not appear in the doxygen documentation.
+ *
+ * Much of the low-level work is done by functions in \a dmxextension.c
+ *
+ * Please see the Client-to-Server DMX Extension to the X Protocol
+ * document for details about the protocol. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "misc.h"
+#include "os.h"
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "opaque.h"
+
+#include "dmxextension.h"
+#include <X11/extensions/dmxproto.h>
+#include <X11/extensions/dmx.h>
+#include "protocol-versions.h"
+
+#ifdef PANORAMIX
+#include "panoramiX.h"
+extern unsigned long XRT_WINDOW;
+extern int PanoramiXNumScreens;
+#endif
+
+extern void DMXExtensionInit(void);
+
+static unsigned char DMXCode;
+
+
+
+static int _DMXXineramaActive(void)
+{
+#ifdef PANORAMIX
+ return !noPanoramiXExtension;
+#endif
+ return 0;
+}
+
+static void dmxSetScreenAttribute(int bit, DMXScreenAttributesPtr attr,
+ CARD32 value)
+{
+ switch (1 << bit) {
+ case DMXScreenWindowWidth: attr->screenWindowWidth = value; break;
+ case DMXScreenWindowHeight: attr->screenWindowHeight = value; break;
+ case DMXScreenWindowXoffset: attr->screenWindowXoffset = value; break;
+ case DMXScreenWindowYoffset: attr->screenWindowYoffset = value; break;
+ case DMXRootWindowWidth: attr->rootWindowWidth = value; break;
+ case DMXRootWindowHeight: attr->rootWindowHeight = value; break;
+ case DMXRootWindowXoffset: attr->rootWindowXoffset = value; break;
+ case DMXRootWindowYoffset: attr->rootWindowYoffset = value; break;
+ case DMXRootWindowXorigin: attr->rootWindowXorigin = value; break;
+ case DMXRootWindowYorigin: attr->rootWindowYorigin = value; break;
+ }
+}
+
+static int dmxFetchScreenAttributes(unsigned int mask,
+ DMXScreenAttributesPtr attr,
+ CARD32 *value_list)
+{
+ int i;
+ CARD32 *value = value_list;
+ int count = 0;
+
+ for (i = 0; i < 32; i++) {
+ if (mask & (1 << i)) {
+ dmxSetScreenAttribute(i, attr, *value);
+ ++value;
+ ++count;
+ }
+ }
+ return count;
+}
+
+static void dmxSetDesktopAttribute(int bit, DMXDesktopAttributesPtr attr,
+ CARD32 value)
+{
+ switch (1 << bit) {
+ case DMXDesktopWidth: attr->width = value; break;
+ case DMXDesktopHeight: attr->height = value; break;
+ case DMXDesktopShiftX: attr->shiftX = value; break;
+ case DMXDesktopShiftY: attr->shiftY = value; break;
+ }
+}
+
+static int dmxFetchDesktopAttributes(unsigned int mask,
+ DMXDesktopAttributesPtr attr,
+ CARD32 *value_list)
+{
+ int i;
+ CARD32 *value = value_list;
+ int count = 0;
+
+ for (i = 0; i < 32; i++) {
+ if (mask & (1 << i)) {
+ dmxSetDesktopAttribute(i, attr, *value);
+ ++value;
+ ++count;
+ }
+ }
+ return count;
+}
+
+static void dmxSetInputAttribute(int bit, DMXInputAttributesPtr attr,
+ CARD32 value)
+{
+ switch (1 << bit) {
+ case DMXInputType: attr->inputType = value; break;
+ case DMXInputPhysicalScreen: attr->physicalScreen = value; break;
+ case DMXInputSendsCore: attr->sendsCore = !!value; break;
+ }
+}
+
+static int dmxFetchInputAttributes(unsigned int mask,
+ DMXInputAttributesPtr attr,
+ CARD32 *value_list)
+{
+ int i;
+ CARD32 *value = value_list;
+ int count = 0;
+
+ for (i = 0; i < 32; i++) {
+ if (mask & (1 << i)) {
+ dmxSetInputAttribute(i, attr, *value);
+ ++value;
+ ++count;
+ }
+ }
+ return count;
+}
+
+static int ProcDMXQueryVersion(ClientPtr client)
+{
+ xDMXQueryVersionReply rep;
+ int n;
+
+ REQUEST_SIZE_MATCH(xDMXQueryVersionReq);
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.majorVersion = SERVER_DMX_MAJOR_VERSION;
+ rep.minorVersion = SERVER_DMX_MINOR_VERSION;
+ rep.patchVersion = SERVER_DMX_PATCH_VERSION;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.majorVersion, n);
+ swapl(&rep.minorVersion, n);
+ swapl(&rep.patchVersion, n);
+ }
+ WriteToClient(client, sizeof(xDMXQueryVersionReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXSync(ClientPtr client)
+{
+ xDMXSyncReply rep;
+ int n;
+
+ REQUEST_SIZE_MATCH(xDMXSyncReq);
+
+ dmxFlushPendingSyncs();
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = 0;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ }
+ WriteToClient(client, sizeof(xDMXSyncReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXForceWindowCreation(ClientPtr client)
+{
+ xDMXForceWindowCreationReply rep;
+ REQUEST(xDMXForceWindowCreationReq);
+ WindowPtr pWin;
+ int n;
+
+ REQUEST_SIZE_MATCH(xDMXForceWindowCreationReq);
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ PanoramiXRes *win;
+ int i;
+
+ if (Success != dixLookupResourceByType((pointer*) &win,
+ stuff->window, XRT_WINDOW,
+ client, DixReadAccess))
+ return -1; /* BadWindow */
+
+ FOR_NSCREENS(i) {
+ if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
+ DixReadAccess))
+ return -1; /* BadWindow */
+
+ dmxForceWindowCreation(pWin);
+ }
+ goto doreply;
+ }
+#endif
+
+ if (Success != dixLookupWindow(&pWin, stuff->window, client,
+ DixReadAccess))
+ return -1; /* BadWindow */
+
+ dmxForceWindowCreation(pWin);
+ doreply:
+ dmxFlushPendingSyncs();
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = 0;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ }
+ WriteToClient(client, sizeof(xDMXForceWindowCreationReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXGetScreenCount(ClientPtr client)
+{
+ xDMXGetScreenCountReply rep;
+ int n;
+
+ REQUEST_SIZE_MATCH(xDMXGetScreenCountReq);
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.screenCount = dmxGetNumScreens();
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.screenCount, n);
+ }
+ WriteToClient(client, sizeof(xDMXGetScreenCountReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXGetScreenAttributes(ClientPtr client)
+{
+ REQUEST(xDMXGetScreenAttributesReq);
+ xDMXGetScreenAttributesReply rep;
+ int n;
+ int length;
+ int paddedLength;
+ DMXScreenAttributesRec attr;
+
+ REQUEST_SIZE_MATCH(xDMXGetScreenAttributesReq);
+
+ if (stuff->physicalScreen < 0
+ || stuff->physicalScreen >= dmxGetNumScreens()) return BadValue;
+
+ if (!dmxGetScreenAttributes(stuff->physicalScreen, &attr))
+ return BadValue;
+
+ rep.logicalScreen = attr.logicalScreen;
+ rep.screenWindowWidth = attr.screenWindowWidth;
+ rep.screenWindowHeight = attr.screenWindowHeight;
+ rep.screenWindowXoffset = attr.screenWindowXoffset;
+ rep.screenWindowYoffset = attr.screenWindowYoffset;
+ rep.rootWindowWidth = attr.rootWindowWidth;
+ rep.rootWindowHeight = attr.rootWindowHeight;
+ rep.rootWindowXoffset = attr.rootWindowXoffset;
+ rep.rootWindowYoffset = attr.rootWindowYoffset;
+ rep.rootWindowXorigin = attr.rootWindowXorigin;
+ rep.rootWindowYorigin = attr.rootWindowYorigin;
+
+ length = attr.displayName ? strlen(attr.displayName) : 0;
+ paddedLength = pad_to_int32(length);
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = bytes_to_int32((sizeof(xDMXGetScreenAttributesReply) - sizeof(xGenericReply))
+ + paddedLength);
+ rep.displayNameLength = length;
+
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.displayNameLength, n);
+ swapl(&rep.logicalScreen, n);
+ swaps(&rep.screenWindowWidth, n);
+ swaps(&rep.screenWindowHeight, n);
+ swaps(&rep.screenWindowXoffset, n);
+ swaps(&rep.screenWindowYoffset, n);
+ swaps(&rep.rootWindowWidth, n);
+ swaps(&rep.rootWindowHeight, n);
+ swaps(&rep.rootWindowXoffset, n);
+ swaps(&rep.rootWindowYoffset, n);
+ swaps(&rep.rootWindowXorigin, n);
+ swaps(&rep.rootWindowYorigin, n);
+ }
+ WriteToClient(client, sizeof(xDMXGetScreenAttributesReply), (char *)&rep);
+ if (length) WriteToClient(client, length, (char *)attr.displayName);
+ return Success;
+}
+
+static int ProcDMXChangeScreensAttributes(ClientPtr client)
+{
+ REQUEST(xDMXChangeScreensAttributesReq);
+ xDMXChangeScreensAttributesReply rep;
+ int n;
+ int status = DMX_BAD_XINERAMA;
+ unsigned int mask = 0;
+ unsigned int i;
+ CARD32 *screen_list;
+ CARD32 *mask_list;
+ CARD32 *value_list;
+ DMXScreenAttributesPtr attribs;
+ int errorScreen = 0;
+ unsigned int len;
+ int ones = 0;
+
+
+ REQUEST_AT_LEAST_SIZE(xDMXChangeScreensAttributesReq);
+ len = client->req_len - bytes_to_int32(sizeof(xDMXChangeScreensAttributesReq));
+ if (len < stuff->screenCount + stuff->maskCount)
+ return BadLength;
+
+ screen_list = (CARD32 *)(stuff + 1);
+ mask_list = &screen_list[stuff->screenCount];
+ value_list = &mask_list[stuff->maskCount];
+
+ for (i = 0; i < stuff->maskCount; i++) ones += Ones(mask_list[i]);
+ if (len != stuff->screenCount + stuff->maskCount + ones)
+ return BadLength;
+
+ if (!_DMXXineramaActive()) goto noxinerama;
+
+ if (!(attribs = malloc(stuff->screenCount * sizeof(*attribs))))
+ return BadAlloc;
+
+ for (i = 0; i < stuff->screenCount; i++) {
+ int count;
+
+ if (i < stuff->maskCount) mask = mask_list[i];
+ dmxGetScreenAttributes(screen_list[i], &attribs[i]);
+ count = dmxFetchScreenAttributes(mask, &attribs[i], value_list);
+ value_list += count;
+ }
+
+#if PANORAMIX
+ status = dmxConfigureScreenWindows(stuff->screenCount,
+ screen_list,
+ attribs,
+ &errorScreen);
+#endif
+
+ free(attribs);
+
+ if (status == BadValue) return status;
+
+ noxinerama:
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = status;
+ rep.errorScreen = errorScreen;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ swapl(&rep.errorScreen, n);
+ }
+ WriteToClient(client,
+ sizeof(xDMXChangeScreensAttributesReply),
+ (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXAddScreen(ClientPtr client)
+{
+ REQUEST(xDMXAddScreenReq);
+ xDMXAddScreenReply rep;
+ int n;
+ int status = 0;
+ CARD32 *value_list;
+ DMXScreenAttributesRec attr;
+ int count;
+ char *name;
+ int len;
+ int paddedLength;
+
+ REQUEST_AT_LEAST_SIZE(xDMXAddScreenReq);
+ paddedLength = pad_to_int32(stuff->displayNameLength);
+ len = client->req_len - bytes_to_int32(sizeof(xDMXAddScreenReq));
+ if (len != Ones(stuff->valueMask) + paddedLength/4)
+ return BadLength;
+
+ memset(&attr, 0, sizeof(attr));
+ dmxGetScreenAttributes(stuff->physicalScreen, &attr);
+ value_list = (CARD32 *)(stuff + 1);
+ count = dmxFetchScreenAttributes(stuff->valueMask, &attr, value_list);
+
+ if (!(name = malloc(stuff->displayNameLength + 1 + 4)))
+ return BadAlloc;
+ memcpy(name, &value_list[count], stuff->displayNameLength);
+ name[stuff->displayNameLength] = '\0';
+ attr.displayName = name;
+
+ status = dmxAttachScreen(stuff->physicalScreen, &attr);
+
+ free(name);
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = status;
+ rep.physicalScreen = stuff->physicalScreen;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ swapl(&rep.physicalScreen, n);
+ }
+ WriteToClient(client,
+ sizeof(xDMXAddScreenReply),
+ (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXRemoveScreen(ClientPtr client)
+{
+ REQUEST(xDMXRemoveScreenReq);
+ xDMXRemoveScreenReply rep;
+ int n;
+ int status = 0;
+
+ REQUEST_SIZE_MATCH(xDMXRemoveScreenReq);
+
+ status = dmxDetachScreen(stuff->physicalScreen);
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = status;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ }
+ WriteToClient(client,
+ sizeof(xDMXRemoveScreenReply),
+ (char *)&rep);
+ return Success;
+}
+
+
+#ifdef PANORAMIX
+static int dmxPopulatePanoramiX(ClientPtr client, Window window,
+ CARD32 *screens, CARD32 *windows,
+ xRectangle *pos, xRectangle *vis)
+{
+ WindowPtr pWin;
+ PanoramiXRes *win;
+ int i;
+ int count = 0;
+ DMXWindowAttributesRec attr;
+
+ if (Success != dixLookupResourceByType((pointer*) &win,
+ window, XRT_WINDOW,
+ client, DixReadAccess))
+ return -1; /* BadWindow */
+
+ FOR_NSCREENS(i) {
+ if (Success != dixLookupWindow(&pWin, win->info[i].id, client,
+ DixReadAccess))
+ return -1; /* BadWindow */
+ if (dmxGetWindowAttributes(pWin, &attr)) {
+ screens[count] = attr.screen;
+ windows[count] = attr.window;
+ pos[count] = attr.pos;
+ vis[count] = attr.vis;
+ ++count; /* Only count existing windows */
+ }
+ }
+ return count;
+}
+#endif
+
+static int dmxPopulate(ClientPtr client, Window window, CARD32 *screens,
+ CARD32 *windows, xRectangle *pos, xRectangle *vis)
+{
+ WindowPtr pWin;
+ DMXWindowAttributesRec attr;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension)
+ return dmxPopulatePanoramiX(client, window, screens, windows,
+ pos, vis);
+#endif
+
+ if (Success != dixLookupWindow(&pWin, window, client, DixReadAccess))
+ return -1; /* BadWindow */
+
+ dmxGetWindowAttributes(pWin, &attr);
+ *screens = attr.screen;
+ *windows = attr.window;
+ *pos = attr.pos;
+ *vis = attr.vis;
+ return 1;
+}
+
+static int dmxMaxNumScreens(void)
+{
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) return PanoramiXNumScreens;
+#endif
+ return 1;
+}
+
+static int ProcDMXGetWindowAttributes(ClientPtr client)
+{
+ REQUEST(xDMXGetWindowAttributesReq);
+ xDMXGetWindowAttributesReply rep;
+ int i, n;
+ CARD32 *screens;
+ CARD32 *windows;
+ xRectangle *pos, *vis;
+ int count = dmxMaxNumScreens();
+
+ REQUEST_SIZE_MATCH(xDMXGetWindowAttributesReq);
+
+ if (!(screens = malloc(count * sizeof(*screens))))
+ return BadAlloc;
+ if (!(windows = malloc(count * sizeof(*windows)))) {
+ free(screens);
+ return BadAlloc;
+ }
+ if (!(pos = malloc(count * sizeof(*pos)))) {
+ free(windows);
+ free(screens);
+ return BadAlloc;
+ }
+ if (!(vis = malloc(count * sizeof(*vis)))) {
+ free(pos);
+ free(windows);
+ free(screens);
+ return BadAlloc;
+ }
+
+ if ((count = dmxPopulate(client, stuff->window, screens, windows,
+ pos, vis)) < 0) {
+ free(vis);
+ free(pos);
+ free(windows);
+ free(screens);
+ return BadWindow;
+ }
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = count * 6;
+ rep.screenCount = count;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.screenCount, n);
+ for (i = 0; i < count; i++) {
+ swapl(&screens[i], n);
+ swapl(&windows[i], n);
+
+ swaps(&pos[i].x, n);
+ swaps(&pos[i].y, n);
+ swaps(&pos[i].width, n);
+ swaps(&pos[i].height, n);
+
+ swaps(&vis[i].x, n);
+ swaps(&vis[i].y, n);
+ swaps(&vis[i].width, n);
+ swaps(&vis[i].height, n);
+ }
+ }
+
+ dmxFlushPendingSyncs();
+
+ WriteToClient(client, sizeof(xDMXGetWindowAttributesReply), (char *)&rep);
+ if (count) {
+ WriteToClient(client, count * sizeof(*screens), (char *)screens);
+ WriteToClient(client, count * sizeof(*windows), (char *)windows);
+ WriteToClient(client, count * sizeof(*pos), (char *)pos);
+ WriteToClient(client, count * sizeof(*vis), (char *)vis);
+ }
+
+ free(vis);
+ free(pos);
+ free(windows);
+ free(screens);
+
+ return Success;
+}
+
+static int ProcDMXGetDesktopAttributes(ClientPtr client)
+{
+ xDMXGetDesktopAttributesReply rep;
+ int n;
+ DMXDesktopAttributesRec attr;
+
+ REQUEST_SIZE_MATCH(xDMXGetDesktopAttributesReq);
+
+ dmxGetDesktopAttributes(&attr);
+
+ rep.width = attr.width;
+ rep.height = attr.height;
+ rep.shiftX = attr.shiftX;
+ rep.shiftY = attr.shiftY;
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.width, n);
+ swapl(&rep.height, n);
+ swapl(&rep.shiftX, n);
+ swapl(&rep.shiftY, n);
+ }
+ WriteToClient(client, sizeof(xDMXGetDesktopAttributesReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXChangeDesktopAttributes(ClientPtr client)
+{
+ REQUEST(xDMXChangeDesktopAttributesReq);
+ xDMXChangeDesktopAttributesReply rep;
+ int n;
+ int status = DMX_BAD_XINERAMA;
+ CARD32 *value_list;
+ DMXDesktopAttributesRec attr;
+ int len;
+
+ REQUEST_AT_LEAST_SIZE(xDMXChangeDesktopAttributesReq);
+ len = client->req_len - (sizeof(xDMXChangeDesktopAttributesReq) >> 2);
+ if (len != Ones(stuff->valueMask))
+ return BadLength;
+
+ if (!_DMXXineramaActive()) goto noxinerama;
+
+ value_list = (CARD32 *)(stuff + 1);
+
+ dmxGetDesktopAttributes(&attr);
+ dmxFetchDesktopAttributes(stuff->valueMask, &attr, value_list);
+
+#if PANORAMIX
+ status = dmxConfigureDesktop(&attr);
+#endif
+ if (status == BadValue) return status;
+
+ noxinerama:
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = status;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ }
+ WriteToClient(client,
+ sizeof(xDMXChangeDesktopAttributesReply),
+ (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXGetInputCount(ClientPtr client)
+{
+ xDMXGetInputCountReply rep;
+ int n;
+
+ REQUEST_SIZE_MATCH(xDMXGetInputCountReq);
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.inputCount = dmxGetInputCount();
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.inputCount, n);
+ }
+ WriteToClient(client, sizeof(xDMXGetInputCountReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXGetInputAttributes(ClientPtr client)
+{
+ REQUEST(xDMXGetInputAttributesReq);
+ xDMXGetInputAttributesReply rep;
+ int n;
+ int length;
+ int paddedLength;
+ DMXInputAttributesRec attr;
+
+ REQUEST_SIZE_MATCH(xDMXGetInputAttributesReq);
+
+ if (dmxGetInputAttributes(stuff->deviceId, &attr)) return BadValue;
+ rep.inputType = attr.inputType;
+ rep.physicalScreen = attr.physicalScreen;
+ rep.physicalId = attr.physicalId;
+ rep.isCore = attr.isCore;
+ rep.sendsCore = attr.sendsCore;
+ rep.detached = attr.detached;
+
+ length = attr.name ? strlen(attr.name) : 0;
+ paddedLength = pad_to_int32(length);
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = bytes_to_int32(paddedLength);
+ rep.nameLength = length;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.inputType, n);
+ swapl(&rep.physicalScreen, n);
+ swapl(&rep.physicalId, n);
+ swapl(&rep.nameLength, n);
+ }
+ WriteToClient(client, sizeof(xDMXGetInputAttributesReply), (char *)&rep);
+ if (length) WriteToClient(client, length, (char *)attr.name);
+ return Success;
+}
+
+static int ProcDMXAddInput(ClientPtr client)
+{
+ REQUEST(xDMXAddInputReq);
+ xDMXAddInputReply rep;
+ int n;
+ int status = 0;
+ CARD32 *value_list;
+ DMXInputAttributesRec attr;
+ int count;
+ char *name;
+ int len;
+ int paddedLength;
+ int id = -1;
+
+ REQUEST_AT_LEAST_SIZE(xDMXAddInputReq);
+ paddedLength = pad_to_int32(stuff->displayNameLength);
+ len = client->req_len - (sizeof(xDMXAddInputReq) >> 2);
+ if (len != Ones(stuff->valueMask) + paddedLength/4)
+ return BadLength;
+
+ memset(&attr, 0, sizeof(attr));
+ value_list = (CARD32 *)(stuff + 1);
+ count = dmxFetchInputAttributes(stuff->valueMask, &attr, value_list);
+
+ if (!(name = malloc(stuff->displayNameLength + 1 + 4)))
+ return BadAlloc;
+ memcpy(name, &value_list[count], stuff->displayNameLength);
+ name[stuff->displayNameLength] = '\0';
+ attr.name = name;
+
+ status = dmxAddInput(&attr, &id);
+
+ free(name);
+
+ if (status) return status;
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = status;
+ rep.physicalId = id;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ swapl(&rep.physicalId, n);
+ }
+ WriteToClient(client, sizeof(xDMXAddInputReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXRemoveInput(ClientPtr client)
+{
+ REQUEST(xDMXRemoveInputReq);
+ xDMXRemoveInputReply rep;
+ int n;
+ int status = 0;
+
+ REQUEST_SIZE_MATCH(xDMXRemoveInputReq);
+
+ status = dmxRemoveInput(stuff->physicalId);
+
+ if (status) return status;
+
+ rep.type = X_Reply;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.status = status;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swapl(&rep.status, n);
+ }
+ WriteToClient(client, sizeof(xDMXRemoveInputReply), (char *)&rep);
+ return Success;
+}
+
+static int ProcDMXDispatch(ClientPtr client)
+{
+ REQUEST(xReq);
+
+ switch (stuff->data) {
+ case X_DMXQueryVersion: return ProcDMXQueryVersion(client);
+ case X_DMXSync: return ProcDMXSync(client);
+ case X_DMXForceWindowCreation: return ProcDMXForceWindowCreation(client);
+ case X_DMXGetScreenCount: return ProcDMXGetScreenCount(client);
+ case X_DMXGetScreenAttributes: return ProcDMXGetScreenAttributes(client);
+ case X_DMXChangeScreensAttributes:
+ return ProcDMXChangeScreensAttributes(client);
+ case X_DMXAddScreen: return ProcDMXAddScreen(client);
+ case X_DMXRemoveScreen: return ProcDMXRemoveScreen(client);
+ case X_DMXGetWindowAttributes: return ProcDMXGetWindowAttributes(client);
+ case X_DMXGetDesktopAttributes: return ProcDMXGetDesktopAttributes(client);
+ case X_DMXChangeDesktopAttributes:
+ return ProcDMXChangeDesktopAttributes(client);
+ case X_DMXGetInputCount: return ProcDMXGetInputCount(client);
+ case X_DMXGetInputAttributes: return ProcDMXGetInputAttributes(client);
+ case X_DMXAddInput: return ProcDMXAddInput(client);
+ case X_DMXRemoveInput: return ProcDMXRemoveInput(client);
+
+ case X_DMXGetScreenInformationDEPRECATED:
+ case X_DMXForceWindowCreationDEPRECATED:
+ case X_DMXReconfigureScreenDEPRECATED:
+ return BadImplementation;
+
+ default: return BadRequest;
+ }
+}
+
+static int SProcDMXQueryVersion(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXQueryVersionReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXQueryVersionReq);
+ return ProcDMXQueryVersion(client);
+}
+
+static int SProcDMXSync(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXSyncReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXSyncReq);
+ return ProcDMXSync(client);
+}
+
+static int SProcDMXForceWindowCreation(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXForceWindowCreationReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXForceWindowCreationReq);
+ swaps(&stuff->window, n);
+ return ProcDMXForceWindowCreation(client);
+}
+
+static int SProcDMXGetScreenCount(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXGetScreenCountReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXGetScreenCountReq);
+ return ProcDMXGetScreenCount(client);
+}
+
+static int SProcDMXGetScreenAttributes(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXGetScreenAttributesReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXGetScreenAttributesReq);
+ swapl(&stuff->physicalScreen, n);
+ return ProcDMXGetScreenAttributes(client);
+}
+
+static int SProcDMXChangeScreensAttributes(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXChangeScreensAttributesReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xDMXGetScreenAttributesReq);
+ swapl(&stuff->screenCount, n);
+ swapl(&stuff->maskCount, n);
+ SwapRestL(stuff);
+ return ProcDMXGetScreenAttributes(client);
+}
+
+static int SProcDMXAddScreen(ClientPtr client)
+{
+ int n;
+ int paddedLength;
+ REQUEST(xDMXAddScreenReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xDMXAddScreenReq);
+ swapl(&stuff->displayNameLength, n);
+ swapl(&stuff->valueMask, n);
+ paddedLength = pad_to_int32(stuff->displayNameLength);
+ SwapLongs((CARD32 *)(stuff+1), LengthRestL(stuff) - paddedLength/4);
+ return ProcDMXAddScreen(client);
+}
+
+static int SProcDMXRemoveScreen(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXRemoveScreenReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXRemoveScreenReq);
+ swapl(&stuff->physicalScreen, n);
+ return ProcDMXRemoveScreen(client);
+}
+
+static int SProcDMXGetWindowAttributes(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXGetWindowAttributesReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXGetWindowAttributesReq);
+ swapl(&stuff->window, n);
+ return ProcDMXGetWindowAttributes(client);
+}
+
+static int SProcDMXGetDesktopAttributes(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXGetDesktopAttributesReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXGetDesktopAttributesReq);
+ return ProcDMXGetDesktopAttributes(client);
+}
+
+static int SProcDMXChangeDesktopAttributes(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXChangeDesktopAttributesReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xDMXChangeDesktopAttributesReq);
+ swapl(&stuff->valueMask, n);
+ SwapRestL(stuff);
+ return ProcDMXChangeDesktopAttributes(client);
+}
+
+static int SProcDMXGetInputCount(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXGetInputCountReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXGetInputCountReq);
+ return ProcDMXGetInputCount(client);
+}
+
+static int SProcDMXGetInputAttributes(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXGetInputAttributesReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXGetInputAttributesReq);
+ swapl(&stuff->deviceId, n);
+ return ProcDMXGetInputAttributes(client);
+}
+
+static int SProcDMXAddInput(ClientPtr client)
+{
+ int n;
+ int paddedLength;
+ REQUEST(xDMXAddInputReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xDMXAddInputReq);
+ swapl(&stuff->displayNameLength, n);
+ swapl(&stuff->valueMask, n);
+ paddedLength = pad_to_int32(stuff->displayNameLength);
+ SwapLongs((CARD32 *)(stuff+1), LengthRestL(stuff) - paddedLength/4);
+ return ProcDMXAddInput(client);
+}
+
+static int SProcDMXRemoveInput(ClientPtr client)
+{
+ int n;
+ REQUEST(xDMXRemoveInputReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xDMXRemoveInputReq);
+ swapl(&stuff->physicalId, n);
+ return ProcDMXRemoveInput(client);
+}
+
+static int SProcDMXDispatch (ClientPtr client)
+{
+ REQUEST(xReq);
+
+ switch (stuff->data) {
+ case X_DMXQueryVersion: return SProcDMXQueryVersion(client);
+ case X_DMXSync: return SProcDMXSync(client);
+ case X_DMXForceWindowCreation: return SProcDMXForceWindowCreation(client);
+ case X_DMXGetScreenCount: return SProcDMXGetScreenCount(client);
+ case X_DMXGetScreenAttributes: return SProcDMXGetScreenAttributes(client);
+ case X_DMXChangeScreensAttributes:
+ return SProcDMXChangeScreensAttributes(client);
+ case X_DMXAddScreen: return SProcDMXAddScreen(client);
+ case X_DMXRemoveScreen: return SProcDMXRemoveScreen(client);
+ case X_DMXGetWindowAttributes: return SProcDMXGetWindowAttributes(client);
+ case X_DMXGetDesktopAttributes:
+ return SProcDMXGetDesktopAttributes(client);
+ case X_DMXChangeDesktopAttributes:
+ return SProcDMXChangeDesktopAttributes(client);
+ case X_DMXGetInputCount: return SProcDMXGetInputCount(client);
+ case X_DMXGetInputAttributes: return SProcDMXGetInputAttributes(client);
+ case X_DMXAddInput: return SProcDMXAddInput(client);
+ case X_DMXRemoveInput: return SProcDMXRemoveInput(client);
+
+ case X_DMXGetScreenInformationDEPRECATED:
+ case X_DMXForceWindowCreationDEPRECATED:
+ case X_DMXReconfigureScreenDEPRECATED:
+ return BadImplementation;
+
+ default: return BadRequest;
+ }
+}
+
+/** Initialize the extension. */
+void DMXExtensionInit(void)
+{
+ ExtensionEntry *extEntry;
+
+ if ((extEntry = AddExtension(DMX_EXTENSION_NAME, 0, 0,
+ ProcDMXDispatch, SProcDMXDispatch,
+ NULL, StandardMinorOpcode)))
+ DMXCode = extEntry->base;
+}
diff --git a/hw/dmx/dmx.h b/hw/dmx/dmx.h
new file mode 100644
index 0000000..bf4b92c
--- /dev/null
+++ b/hw/dmx/dmx.h
@@ -0,0 +1,390 @@
+/*
+ * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * David H. Dawes <dawes@xfree86.org>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Main header file included by all other DMX-related files.
+ */
+
+/** \mainpage
+ * - <a href="http://dmx.sourceforge.net">DMX Home Page</a>
+ * - <a href="http://sourceforge.net/projects/dmx">DMX Project Page (on
+ * Source Forge)</a>
+ * - <a href="http://dmx.sourceforge.net/dmx.html">Distributed Multihead
+ * X design</a>, the design document for DMX
+ * - <a href="http://dmx.sourceforge.net/DMXSpec.txt">Client-to-Server
+ * DMX Extension to the X Protocol</a>
+ */
+
+#ifndef DMX_H
+#define DMX_H
+
+#if HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "gcstruct.h"
+
+/* Handle client-side include files in one place. */
+#include "dmxclient.h"
+
+#include "globals.h"
+#include "scrnintstr.h"
+
+#include "picturestr.h"
+
+#ifdef GLXEXT
+#include <GL/glx.h>
+#include <GL/glxint.h>
+#endif
+
+typedef enum {
+ PosNone = -1,
+ PosAbsolute = 0,
+ PosRightOf,
+ PosLeftOf,
+ PosAbove,
+ PosBelow,
+ PosRelative
+} PositionType;
+
+/** Provide the typedef globally, but keep the contents opaque outside
+ * of the input routines. \see dmxinput.h */
+typedef struct _DMXInputInfo DMXInputInfo;
+
+/** Provide the typedef globally, but keep the contents opaque outside
+ * of the XSync statistic routines. \see dmxstat.c */
+typedef struct _DMXStatInfo DMXStatInfo;
+
+/** Global structure containing information about each backend screen. */
+typedef struct _DMXScreenInfo {
+ const char *name; /**< Name from command line or config file */
+ int index; /**< Index into dmxScreens global */
+
+ /*---------- Back-end X server information ----------*/
+
+ Display *beDisplay; /**< Back-end X server's display */
+ int beWidth; /**< Width of BE display */
+ int beHeight; /**< Height of BE display */
+ int beDepth; /**< Depth of BE display */
+ int beBPP; /**< Bits per pixel of BE display */
+ int beXDPI; /**< Horizontal dots per inch of BE */
+ int beYDPI; /**< Vertical dots per inch of BE */
+
+ int beNumDepths; /**< Number of depths on BE server */
+ int *beDepths; /**< Depths from BE server */
+
+ int beNumPixmapFormats; /**< Number of pixmap formats on BE */
+ XPixmapFormatValues *bePixmapFormats; /**< Pixmap formats on BE */
+
+ int beNumVisuals; /**< Number of visuals on BE */
+ XVisualInfo *beVisuals; /**< Visuals from BE server */
+ int beDefVisualIndex; /**< Default visual index of BE */
+
+ int beNumDefColormaps; /**< Number of default colormaps */
+ Colormap *beDefColormaps; /**< Default colormaps for DMX server */
+
+ Pixel beBlackPixel; /**< Default black pixel for BE */
+ Pixel beWhitePixel; /**< Default white pixel for BE */
+
+ /*---------- Screen window information ----------*/
+
+ Window scrnWin; /**< "Screen" window on backend display */
+ int scrnX; /**< X offset of "screen" WRT BE display */
+ int scrnY; /**< Y offset of "screen" WRT BE display */
+ int scrnWidth; /**< Width of "screen" */
+ int scrnHeight; /**< Height of "screen" */
+ int scrnXSign; /**< X offset sign of "screen" */
+ int scrnYSign; /**< Y offset sign of "screen" */
+
+ /** Default drawables for "screen" */
+ Drawable scrnDefDrawables[MAXFORMATS];
+
+ struct _DMXScreenInfo *next; /**< List of "screens" on same display */
+ struct _DMXScreenInfo *over; /**< List of "screens" that overlap */
+
+ /*---------- Root window information ----------*/
+
+ Window rootWin; /**< "Root" window on backend display */
+ int rootX; /**< X offset of "root" window WRT "screen"*/
+ int rootY; /**< Y offset of "root" window WRT "screen"*/
+ int rootWidth; /**< Width of "root" window */
+ int rootHeight; /**< Height of "root" window */
+
+ int rootXOrigin; /**< Global X origin of "root" window */
+ int rootYOrigin; /**< Global Y origin of "root" window */
+
+ /*---------- Shadow framebuffer information ----------*/
+
+ void *shadow; /**< Shadow framebuffer data (if enabled) */
+ XlibGC shadowGC; /**< Default GC used by shadow FB code */
+ XImage *shadowFBImage; /**< Screen image used by shadow FB code */
+
+ /*---------- Other related information ----------*/
+
+ int shared; /**< Non-zero if another Xdmx is running */
+
+ Bool WMRunningOnBE;
+
+ Cursor noCursor;
+ Cursor curCursor;
+ /* Support for cursors on overlapped
+ * backend displays. */
+ CursorPtr cursor;
+ int cursorVisible;
+ int cursorNotShared; /* for overlapping screens on a backend */
+
+ PositionType where; /**< Relative layout information */
+ int whereX; /**< Relative layout information */
+ int whereY; /**< Relative layout information */
+ int whereRefScreen; /**< Relative layout information */
+
+ int savedTimeout; /**< Original screen saver timeout */
+ int dpmsCapable; /**< Non-zero if backend is DPMS capable */
+ int dpmsEnabled; /**< Non-zero if DPMS enabled */
+ int dpmsStandby; /**< Original DPMS standby value */
+ int dpmsSuspend; /**< Original DPMS suspend value */
+ int dpmsOff; /**< Original DPMS off value */
+
+ DMXStatInfo *stat; /**< Statistics about XSync */
+ Bool needsSync; /**< True if an XSync is pending */
+
+#ifdef GLXEXT
+ /** Visual information for glxProxy */
+ int numGlxVisuals;
+ __GLXvisualConfig *glxVisuals;
+ int glxMajorOpcode;
+ int glxErrorBase;
+
+ /** FB config information for glxProxy */
+ __GLXFBConfig *fbconfigs;
+ int numFBConfigs;
+#endif
+
+ /** Function pointers to wrapped screen
+ * functions */
+ CloseScreenProcPtr CloseScreen;
+ SaveScreenProcPtr SaveScreen;
+
+ CreateGCProcPtr CreateGC;
+
+ CreateWindowProcPtr CreateWindow;
+ DestroyWindowProcPtr DestroyWindow;
+ PositionWindowProcPtr PositionWindow;
+ ChangeWindowAttributesProcPtr ChangeWindowAttributes;
+ RealizeWindowProcPtr RealizeWindow;
+ UnrealizeWindowProcPtr UnrealizeWindow;
+ RestackWindowProcPtr RestackWindow;
+ WindowExposuresProcPtr WindowExposures;
+ CopyWindowProcPtr CopyWindow;
+
+ ResizeWindowProcPtr ResizeWindow;
+ ReparentWindowProcPtr ReparentWindow;
+
+ ChangeBorderWidthProcPtr ChangeBorderWidth;
+
+ GetImageProcPtr GetImage;
+ GetSpansProcPtr GetSpans;
+
+ CreatePixmapProcPtr CreatePixmap;
+ DestroyPixmapProcPtr DestroyPixmap;
+ BitmapToRegionProcPtr BitmapToRegion;
+
+ RealizeFontProcPtr RealizeFont;
+ UnrealizeFontProcPtr UnrealizeFont;
+
+ CreateColormapProcPtr CreateColormap;
+ DestroyColormapProcPtr DestroyColormap;
+ InstallColormapProcPtr InstallColormap;
+ StoreColorsProcPtr StoreColors;
+
+ SetShapeProcPtr SetShape;
+
+ CreatePictureProcPtr CreatePicture;
+ DestroyPictureProcPtr DestroyPicture;
+ ChangePictureClipProcPtr ChangePictureClip;
+ DestroyPictureClipProcPtr DestroyPictureClip;
+
+ ChangePictureProcPtr ChangePicture;
+ ValidatePictureProcPtr ValidatePicture;
+
+ CompositeProcPtr Composite;
+ GlyphsProcPtr Glyphs;
+ CompositeRectsProcPtr CompositeRects;
+
+ InitIndexedProcPtr InitIndexed;
+ CloseIndexedProcPtr CloseIndexed;
+ UpdateIndexedProcPtr UpdateIndexed;
+
+ TrapezoidsProcPtr Trapezoids;
+ TrianglesProcPtr Triangles;
+ TriStripProcPtr TriStrip;
+ TriFanProcPtr TriFan;
+} DMXScreenInfo;
+
+/* Global variables available to all Xserver/hw/dmx routines. */
+extern int dmxNumScreens; /**< Number of dmxScreens */
+extern DMXScreenInfo *dmxScreens; /**< List of outputs */
+extern int dmxShadowFB; /**< Non-zero if using
+ * shadow frame-buffer
+ * (deprecated) */
+extern XErrorEvent dmxLastErrorEvent; /**< Last error that
+ * occurred */
+extern Bool dmxErrorOccurred; /**< True if an error
+ * occurred */
+extern Bool dmxOffScreenOpt; /**< True if using off
+ * screen
+ * optimizations */
+extern Bool dmxSubdividePrimitives; /**< True if using the
+ * primitive subdivision
+ * optimization */
+extern Bool dmxLazyWindowCreation; /**< True if using the
+ * lazy window creation
+ * optimization */
+extern Bool dmxUseXKB; /**< True if the XKB
+ * extension should be
+ * used with the backend
+ * servers */
+extern int dmxDepth; /**< Requested depth if
+ * non-zero */
+#ifdef GLXEXT
+extern Bool dmxGLXProxy; /**< True if glxProxy
+ * support is enabled */
+extern Bool dmxGLXSwapGroupSupport; /**< True if glxProxy
+ * support for swap
+ * groups and barriers
+ * is enabled */
+extern Bool dmxGLXSyncSwap; /**< True if glxProxy
+ * should force an XSync
+ * request after each
+ * swap buffers call */
+extern Bool dmxGLXFinishSwap; /**< True if glxProxy
+ * should force a
+ * glFinish request
+ * after each swap
+ * buffers call */
+#endif
+extern char *dmxFontPath; /**< NULL if no font
+ * path is set on the
+ * command line;
+ * otherwise, a string
+ * of comma separated
+ * paths built from the
+ * command line
+ * specified font
+ * paths */
+extern Bool dmxIgnoreBadFontPaths; /**< True if bad font
+ * paths should be
+ * ignored during server
+ * init */
+extern Bool dmxAddRemoveScreens; /**< True if add and
+ * remove screens support
+ * is enabled */
+
+/** Wrap screen or GC function pointer */
+#define DMX_WRAP(_entry, _newfunc, _saved, _actual) \
+do { \
+ (_saved)->_entry = (_actual)->_entry; \
+ (_actual)->_entry = (_newfunc); \
+} while (0)
+
+/** Unwrap screen or GC function pointer */
+#define DMX_UNWRAP(_entry, _saved, _actual) \
+do { \
+ (_actual)->_entry = (_saved)->_entry; \
+} while (0)
+
+/* Define the MAXSCREENSALLOC/FREE macros, when MAXSCREENS patch has not
+ * been applied to sources. */
+#ifdef MAXSCREENS
+#define MAXSCREEN_MAKECONSTSTR1(x) #x
+#define MAXSCREEN_MAKECONSTSTR2(x) MAXSCREEN_MAKECONSTSTR1(x)
+
+#define MAXSCREEN_FAILED_TXT "Failed at [" \
+ MAXSCREEN_MAKECONSTSTR2(__LINE__) ":" __FILE__ "] to allocate object: "
+
+#define _MAXSCREENSALLOCF(o,size,fatal) \
+ do { \
+ if (!o) { \
+ o = calloc((size), sizeof(*(o))); \
+ if (!o && fatal) FatalError(MAXSCREEN_FAILED_TXT #o); \
+ } \
+ } while (0)
+#define _MAXSCREENSALLOCR(o,size,retval) \
+ do { \
+ if (!o) { \
+ o = calloc((size), sizeof(*(o))); \
+ if (!o) return retval; \
+ } \
+ } while (0)
+
+#define MAXSCREENSFREE(o) \
+ do { \
+ free(o); \
+ o = NULL; \
+ } while (0)
+
+#define MAXSCREENSALLOC(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 0)
+#define MAXSCREENSALLOC_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 1)
+#define MAXSCREENSALLOC_RETURN(o,r) _MAXSCREENSALLOCR(o,MAXSCREENS, (r))
+#define MAXSCREENSALLOCPLUSONE(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,0)
+#define MAXSCREENSALLOCPLUSONE_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,1)
+#define MAXSCREENSCALLOC(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),0)
+#define MAXSCREENSCALLOC_FATAL(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),1)
+#endif
+
+extern DevPrivateKeyRec dmxGCPrivateKeyRec;
+#define dmxGCPrivateKey (&dmxGCPrivateKeyRec) /**< Private index for GCs */
+
+extern DevPrivateKeyRec dmxWinPrivateKeyRec;
+#define dmxWinPrivateKey (&dmxWinPrivateKeyRec) /**< Private index for Windows */
+
+extern DevPrivateKeyRec dmxPixPrivateKeyRec;
+#define dmxPixPrivateKey (&dmxPixPrivateKeyRec) /**< Private index for Pixmaps */
+
+extern int dmxFontPrivateIndex; /**< Private index for Fonts */
+
+extern DevPrivateKeyRec dmxScreenPrivateKeyRec;
+#define dmxScreenPrivateKey (&dmxScreenPrivateKeyRec) /**< Private index for Screens */
+
+extern DevPrivateKeyRec dmxColormapPrivateKeyRec;
+#define dmxColormapPrivateKey (&dmxColormapPrivateKeyRec) /**< Private index for Colormaps */
+
+extern DevPrivateKeyRec dmxPictPrivateKeyRec;
+#define dmxPictPrivateKey (&dmxPictPrivateKeyRec) /**< Private index for Picts */
+
+extern DevPrivateKeyRec dmxGlyphSetPrivateKeyRec;
+#define dmxGlyphSetPrivateKey (&dmxGlyphSetPrivateKeyRec) /**< Private index for GlyphSets */
+
+#endif /* DMX_H */
diff --git a/hw/dmx/dmx_glxvisuals.c b/hw/dmx/dmx_glxvisuals.c
new file mode 100644
index 0000000..f0050c2
--- /dev/null
+++ b/hw/dmx/dmx_glxvisuals.c
@@ -0,0 +1,601 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include <GL/glx.h>
+#include <GL/glxproto.h>
+#include <X11/extensions/Xext.h>
+#include <X11/extensions/extutil.h>
+
+#include "dmx_glxvisuals.h"
+
+__GLXvisualConfig *GetGLXVisualConfigs(Display *dpy, int screen, int *nconfigs)
+{
+ xGLXGetVisualConfigsReq *req;
+ xGLXGetVisualConfigsReply reply;
+ __GLXvisualConfig *config, *configs;
+ GLint i, j, nvisuals, nprops;
+ INT32 *props, *p;
+ int majorOpcode, dummy;
+ int num_good_visuals;
+
+ if (!XQueryExtension(dpy, "GLX", &majorOpcode, &dummy, &dummy)) {
+ return NULL;
+ }
+
+ /* Send the glXGetVisualConfigs request */
+ LockDisplay(dpy);
+ GetReq(GLXGetVisualConfigs,req);
+ req->reqType = majorOpcode;
+ req->glxCode = X_GLXGetVisualConfigs;
+ req->screen = screen;
+ if (!_XReply(dpy, (xReply*) &reply, 0, False)) {
+ /* Something is busted. Punt. */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ nvisuals = (int)reply.numVisuals;
+ if (!nvisuals) {
+ /* This screen does not support GL rendering */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ /* Check number of properties per visual */
+ nprops = (int)reply.numProps;
+ if (nprops < __GLX_MIN_CONFIG_PROPS) {
+ /* Huh? Not in protocol defined limits. Punt */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+ props = (INT32*) Xmalloc(nprops * __GLX_SIZE_CARD32);
+ if (!props) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ /* Allocate memory for our config structure */
+ config = (__GLXvisualConfig*)
+ Xmalloc(nvisuals * sizeof(__GLXvisualConfig));
+ if (!config) {
+ free(props);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+ memset(config, 0, nvisuals * sizeof(__GLXvisualConfig));
+ configs = config;
+ num_good_visuals = 0;
+
+ /* Convert config structure into our format */
+ for (i=0; i<nvisuals; i++) {
+
+ /* Read config structure */
+ _XRead(dpy, (char *)props, (nprops * __GLX_SIZE_CARD32));
+
+ /* fill in default values */
+ config->visualRating = GLX_NONE_EXT;
+ config->transparentPixel = GLX_NONE_EXT;
+
+ /* Copy in the first set of properties */
+ config->vid = props[0];
+ config->class = props[1];
+
+ config->rgba = (Bool) props[2];
+
+ config->redSize = props[3];
+ config->greenSize = props[4];
+ config->blueSize = props[5];
+ config->alphaSize = props[6];
+
+ config->accumRedSize = props[7];
+ config->accumGreenSize = props[8];
+ config->accumBlueSize = props[9];
+ config->accumAlphaSize = props[10];
+
+ config->doubleBuffer = (Bool) props[11];
+ config->stereo = (Bool) props[12];
+
+ config->bufferSize = props[13];
+ config->depthSize = props[14];
+ config->stencilSize = props[15];
+
+ config->auxBuffers = props[16];
+ config->level = props[17];
+
+ /* Process remaining properties */
+ p = &props[18];
+ for (j=__GLX_MIN_CONFIG_PROPS; j<nprops; j+=2) {
+ int property = *p++;
+ int value = *p++;
+
+ switch (property) {
+ case GLX_SAMPLES_SGIS:
+ config->multiSampleSize = value;
+ break;
+ case GLX_SAMPLE_BUFFERS_SGIS:
+ config->nMultiSampleBuffers = value;
+ break;
+
+ case GLX_TRANSPARENT_TYPE_EXT:
+ config->transparentPixel = value;
+ break;
+ case GLX_TRANSPARENT_INDEX_VALUE_EXT:
+ config->transparentIndex = value;
+ break;
+ case GLX_TRANSPARENT_RED_VALUE_EXT:
+ config->transparentRed = value;
+ break;
+ case GLX_TRANSPARENT_GREEN_VALUE_EXT:
+ config->transparentGreen = value;
+ break;
+ case GLX_TRANSPARENT_BLUE_VALUE_EXT:
+ config->transparentBlue = value;
+ break;
+ case GLX_TRANSPARENT_ALPHA_VALUE_EXT:
+ config->transparentAlpha = value;
+ break;
+
+ case GLX_VISUAL_CAVEAT_EXT:
+ config->visualRating = value;
+ break;
+
+ /* visualSelectGroup is an internal used property */
+ case GLX_VISUAL_SELECT_GROUP_SGIX:
+ config->visualSelectGroup = value;
+ break;
+
+ default :
+ /* Ignore properties we don't recognize */
+ break;
+ }
+ } /* for j */
+
+ /*
+ // filter out overlay visuals (dmx does not support overlays)
+ */
+ if (config->level == 0) {
+ config++;
+ num_good_visuals++;
+ }
+
+ } /* for i */
+
+ UnlockDisplay(dpy);
+
+ nvisuals = num_good_visuals;
+
+ config = configs;
+ for (i=0; i<nvisuals; i++) {
+ /* XXX hack to fill-in mask info (need a better way to do this) */
+ {
+ XVisualInfo *vis, template;
+ int n;
+
+ template.screen = screen;
+ template.visualid = config->vid;
+ vis = XGetVisualInfo(dpy, VisualScreenMask|VisualIDMask,
+ &template, &n);
+
+ if (vis != NULL) {
+ config->redMask = vis->red_mask;
+ config->greenMask = vis->green_mask;
+ config->blueMask = vis->blue_mask;
+ config->alphaMask = 0; /* XXX */
+ free(vis);
+ }
+ }
+ config++;
+ } /* for i */
+
+ XFree(props);
+ SyncHandle();
+
+ *nconfigs = nvisuals;
+ return configs;
+}
+
+
+__GLXFBConfig *GetGLXFBConfigs(Display *dpy, int glxMajorOpcode, int *nconfigs)
+{
+ xGLXGetFBConfigsReq *req;
+ xGLXGetFBConfigsReply reply;
+ __GLXFBConfig *config, *fbconfigs;
+ GLint i, j, numFBConfigs, numAttribs;
+ INT32 *attrs, *p;
+ int screen = DefaultScreen( dpy );
+ int numValidConfigs = 0;
+
+ /* Send the glXGetFBConfigs request */
+ LockDisplay(dpy);
+ GetReq(GLXGetFBConfigs, req);
+ req->reqType = glxMajorOpcode;
+ req->glxCode = X_GLXGetFBConfigs;
+ req->screen = screen;
+
+ *nconfigs = 0;
+
+ if (!_XReply(dpy, (xReply*) &reply, 0, False)) {
+ /* Something is busted. Punt. */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ numFBConfigs = (int)reply.numFBConfigs;
+ if (!numFBConfigs) {
+ /* This screen does not support GL rendering */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ numAttribs = (int)reply.numAttribs;
+ if (!numAttribs) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ attrs = (INT32*) Xmalloc(2*numAttribs * __GLX_SIZE_CARD32);
+ if (!attrs) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+
+ /* Allocate memory for our config structure */
+ config = (__GLXFBConfig*)
+ Xmalloc(numFBConfigs * sizeof(__GLXFBConfig));
+ if (!config) {
+ free(attrs);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return NULL;
+ }
+ memset(config, 0, numFBConfigs * sizeof(__GLXFBConfig));
+ fbconfigs = config;
+
+ /* Convert attribute list into our format */
+ for (i=0; i<numFBConfigs; i++) {
+
+ /* Fill in default properties */
+ config->transparentType = GLX_NONE_EXT;
+ config->visualCaveat = GLX_NONE_EXT;
+ config->minRed = 0.;
+ config->maxRed = 1.;
+ config->minGreen = 0.;
+ config->maxGreen = 1.;
+ config->minBlue = 0.;
+ config->maxBlue = 1.;
+ config->minAlpha = 0.;
+ config->maxAlpha = 1.;
+
+ /* Read attribute list */
+ _XRead(dpy, (char *)attrs, (2*numAttribs * __GLX_SIZE_CARD32));
+
+ p = attrs;
+ for (j=0; j<numAttribs; j++) {
+ int attribute = *p++;
+ int value = *p++;
+
+ switch (attribute) {
+ /* core attributes */
+ case GLX_FBCONFIG_ID:
+ config->id = value;
+ break;
+ case GLX_BUFFER_SIZE:
+ config->indexBits = value;
+ break;
+ case GLX_LEVEL:
+ config->level = value;
+ break;
+ case GLX_DOUBLEBUFFER:
+ config->doubleBufferMode = value;
+ break;
+ case GLX_STEREO:
+ config->stereoMode = value;
+ break;
+ case GLX_AUX_BUFFERS:
+ config->maxAuxBuffers = value;
+ break;
+ case GLX_RED_SIZE:
+ config->redBits = value;
+ break;
+ case GLX_GREEN_SIZE:
+ config->greenBits = value;
+ break;
+ case GLX_BLUE_SIZE:
+ config->blueBits = value;
+ break;
+ case GLX_ALPHA_SIZE:
+ config->alphaBits = value;
+ break;
+ case GLX_DEPTH_SIZE:
+ config->depthBits = value;
+ break;
+ case GLX_STENCIL_SIZE:
+ config->stencilBits = value;
+ break;
+ case GLX_ACCUM_RED_SIZE:
+ config->accumRedBits = value;
+ break;
+ case GLX_ACCUM_GREEN_SIZE:
+ config->accumGreenBits = value;
+ break;
+ case GLX_ACCUM_BLUE_SIZE:
+ config->accumBlueBits = value;
+ break;
+ case GLX_ACCUM_ALPHA_SIZE:
+ config->accumAlphaBits = value;
+ break;
+ case GLX_RENDER_TYPE:
+ config->renderType = value;
+ break;
+ case GLX_DRAWABLE_TYPE:
+ config->drawableType = value;
+ break;
+ case GLX_X_VISUAL_TYPE:
+ config->visualType = value;
+ break;
+ case GLX_CONFIG_CAVEAT:
+ config->visualCaveat = value;
+ break;
+ case GLX_TRANSPARENT_TYPE:
+ config->transparentType = value;
+ break;
+ case GLX_TRANSPARENT_INDEX_VALUE:
+ config->transparentIndex = value;
+ break;
+ case GLX_TRANSPARENT_RED_VALUE:
+ config->transparentRed = value;
+ break;
+ case GLX_TRANSPARENT_GREEN_VALUE:
+ config->transparentGreen = value;
+ break;
+ case GLX_TRANSPARENT_BLUE_VALUE:
+ config->transparentBlue = value;
+ break;
+ case GLX_TRANSPARENT_ALPHA_VALUE:
+ config->transparentAlpha = value;
+ break;
+ case GLX_MAX_PBUFFER_WIDTH:
+ config->maxPbufferWidth = value;
+ break;
+ case GLX_MAX_PBUFFER_HEIGHT:
+ config->maxPbufferHeight = value;
+ break;
+ case GLX_MAX_PBUFFER_PIXELS:
+ config->maxPbufferPixels = value;
+ break;
+ case GLX_VISUAL_ID:
+ config->associatedVisualId = value;
+ break;
+
+ /* visualSelectGroup is an internal used property */
+ case GLX_VISUAL_SELECT_GROUP_SGIX:
+ config->visualSelectGroup = value;
+ break;
+
+ /* SGIS_multisample attributes */
+ case GLX_SAMPLES_SGIS:
+ config->multiSampleSize = value;
+ break;
+ case GLX_SAMPLE_BUFFERS_SGIS:
+ config->nMultiSampleBuffers = value;
+ break;
+
+ /* SGIX_pbuffer specific attributes */
+ case GLX_OPTIMAL_PBUFFER_WIDTH_SGIX:
+ config->optimalPbufferWidth = value;
+ break;
+ case GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX:
+ config->optimalPbufferHeight = value;
+ break;
+
+ default:
+ /* Ignore attributes we don't recognize */
+ break;
+ }
+ } /* for j */
+
+ /* Fill in derived values */
+ config->screen = screen;
+
+ config->rgbMode = config->renderType & GLX_RGBA_BIT;
+ config->colorIndexMode = !config->rgbMode;
+
+ config->haveAccumBuffer =
+ config->accumRedBits > 0 ||
+ config->accumGreenBits > 0 ||
+ config->accumBlueBits > 0;
+ /* Can't have alpha without color */
+
+ config->haveDepthBuffer = config->depthBits > 0;
+ config->haveStencilBuffer = config->stencilBits > 0;
+
+ /* overlay visuals are not valid for now */
+ if (!config->level) {
+ config++;
+ numValidConfigs++;
+ }
+
+ } /* for i */
+ UnlockDisplay(dpy);
+
+ config = fbconfigs;
+ for (i=0; i<numValidConfigs; i++) {
+
+ /* XXX hack to fill-in mask info (need a better way to do this) */
+ if (config->associatedVisualId != 0) {
+ XVisualInfo *vis, template;
+ int n;
+
+ template.screen = screen;
+ template.visualid = config->associatedVisualId;
+ vis = XGetVisualInfo(dpy, VisualScreenMask|VisualIDMask,
+ &template, &n);
+
+ if (vis != NULL) {
+ config->redMask = (GLuint)vis->red_mask;
+ config->greenMask = (GLuint)vis->green_mask;
+ config->blueMask = (GLuint)vis->blue_mask;
+ config->alphaMask = 0; /* XXX */
+ free(vis);
+ }
+ }
+
+ config++;
+ } /* for i */
+
+ XFree(attrs);
+ SyncHandle();
+
+ *nconfigs = numValidConfigs;
+ return fbconfigs;
+}
+
+__GLXvisualConfig *
+GetGLXVisualConfigsFromFBConfigs(__GLXFBConfig *fbconfigs, int nfbconfigs,
+ XVisualInfo *visuals, int nvisuals,
+ __GLXvisualConfig *glxConfigs, int nGlxConfigs,
+ int *nconfigs)
+{
+ __GLXvisualConfig *configs = NULL;
+ int i;
+
+ if (!fbconfigs || !nfbconfigs || !nconfigs) return NULL;
+ *nconfigs = 0;
+
+ /* Allocate memory for our config structure */
+ configs = (__GLXvisualConfig*)
+ Xmalloc(nfbconfigs * sizeof(__GLXvisualConfig));
+ if (!configs) {
+ return NULL;
+ }
+ memset(configs, 0, nfbconfigs * sizeof(__GLXvisualConfig));
+
+ for (i=0; i<nfbconfigs; i++) {
+ __GLXFBConfig *fbcfg = &fbconfigs[i];
+
+ if (fbcfg->associatedVisualId > 0) {
+ __GLXvisualConfig *cfg = configs + (*nconfigs);
+ int j;
+ XVisualInfo *vinfo = NULL;
+
+ for (j=0; j<nvisuals; j++) {
+ if (visuals[j].visualid == fbcfg->associatedVisualId) {
+ vinfo = &visuals[j];
+ break;
+ }
+ }
+ if (!vinfo) continue;
+
+ /* skip 16 bit colormap visuals */
+ if (vinfo->depth == 16 &&
+ vinfo->class != TrueColor &&
+ vinfo->class != DirectColor ) {
+ continue;
+ }
+
+ (*nconfigs)++;
+
+ /*
+ * if the same visualid exists in the glx configs,
+ * copy the glx attributes from the glx config
+ */
+ for (j=0; j<nGlxConfigs; j++) {
+ if (glxConfigs[j].vid == vinfo->visualid)
+ break;
+ }
+ if (j < nGlxConfigs) {
+ memcpy(cfg, &glxConfigs[j], sizeof(__GLXvisualConfig) );
+ continue;
+ }
+
+ /*
+ * make glx attributes from the FB config attributes
+ */
+ cfg->vid = fbcfg->associatedVisualId;
+ cfg->class = vinfo->class;
+ cfg->rgba = !(fbcfg->renderType & GLX_COLOR_INDEX_BIT_SGIX);
+ cfg->redSize = fbcfg->redBits;
+ cfg->greenSize = fbcfg->greenBits;
+ cfg->blueSize = fbcfg->blueBits;
+ cfg->alphaSize = fbcfg->alphaBits;
+ cfg->redMask = fbcfg->redMask;
+ cfg->greenMask = fbcfg->greenMask;
+ cfg->blueMask = fbcfg->blueMask;
+ cfg->alphaMask = fbcfg->alphaMask;
+ cfg->accumRedSize = fbcfg->accumRedBits;
+ cfg->accumGreenSize = fbcfg->accumGreenBits;
+ cfg->accumBlueSize = fbcfg->accumBlueBits;
+ cfg->accumAlphaSize = fbcfg->accumAlphaBits;
+ cfg->doubleBuffer = fbcfg->doubleBufferMode;
+ cfg->stereo = fbcfg->stereoMode;
+ if (vinfo->class == TrueColor || vinfo->class == DirectColor) {
+ cfg->bufferSize = (fbcfg->rgbMode ? (fbcfg->redBits +
+ fbcfg->greenBits +
+ fbcfg->blueBits +
+ fbcfg->alphaBits)
+ : fbcfg->indexBits );
+ }
+ else {
+ cfg->bufferSize = vinfo->depth;
+ }
+ cfg->depthSize = fbcfg->depthBits;
+ cfg->stencilSize = fbcfg->stencilBits;
+ cfg->auxBuffers = fbcfg->maxAuxBuffers;
+ cfg->level = fbcfg->level;
+ cfg->visualRating = fbcfg->visualCaveat;
+ cfg->transparentPixel = fbcfg->transparentType;
+ cfg->transparentRed = fbcfg->transparentRed;
+ cfg->transparentGreen = fbcfg->transparentGreen;
+ cfg->transparentBlue = fbcfg->transparentBlue;
+ cfg->transparentAlpha = fbcfg->transparentAlpha;
+ cfg->transparentIndex = fbcfg->transparentIndex;
+ cfg->multiSampleSize = fbcfg->multiSampleSize;
+ cfg->nMultiSampleBuffers = fbcfg->nMultiSampleBuffers;
+ cfg->visualSelectGroup = fbcfg->visualSelectGroup;
+ }
+ }
+
+ return configs;
+}
+
diff --git a/hw/dmx/dmx_glxvisuals.h b/hw/dmx/dmx_glxvisuals.h
new file mode 100644
index 0000000..477e923
--- /dev/null
+++ b/hw/dmx/dmx_glxvisuals.h
@@ -0,0 +1,59 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifndef _GLXVISUALS_H
+#define _GLXVISUALS_H
+
+#include <GL/glxint.h>
+
+/** GLX Visual private area. */
+typedef struct {
+ int x_visual_depth;
+ int x_visual_class;
+} dmxGlxVisualPrivate;
+
+__GLXvisualConfig *GetGLXVisualConfigs(Display *dpy,
+ int screen,
+ int *nconfigs);
+
+__GLXFBConfig *GetGLXFBConfigs(Display *dpy,
+ int glxMajorOpcode,
+ int *nconfigs);
+
+__GLXvisualConfig *GetGLXVisualConfigsFromFBConfigs(__GLXFBConfig *fbconfigs,
+ int nfbconfigs,
+ XVisualInfo *visuals,
+ int nvisuals,
+ __GLXvisualConfig
+ *glxConfigs,
+ int nGlxConfigs,
+ int *nconfigs);
+
+#endif
diff --git a/hw/dmx/dmxcb.c b/hw/dmx/dmxcb.c
new file mode 100644
index 0000000..4e7279a
--- /dev/null
+++ b/hw/dmx/dmxcb.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This code queries and modifies the connection block. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxcb.h"
+#include "dmxinput.h"
+#include "dmxlog.h"
+
+extern int connBlockScreenStart;
+
+#ifdef PANORAMIX
+extern int PanoramiXPixWidth;
+extern int PanoramiXPixHeight;
+extern int PanoramiXNumScreens;
+#endif
+
+ int dmxGlobalWidth, dmxGlobalHeight;
+
+/** We may want the wall dimensions to be different from the bounding
+ * box dimensions that Xinerama computes, so save those and update them
+ * here.
+ */
+void dmxSetWidthHeight(int width, int height)
+{
+ dmxGlobalWidth = width;
+ dmxGlobalHeight = height;
+}
+
+/** Computes the global bounding box for DMX. This may be larger than
+ * the one computed by Xinerama because of the DMX configuration
+ * file. */
+void dmxComputeWidthHeight(DMXRecomputeFlag flag)
+{
+ int i;
+ DMXScreenInfo *dmxScreen;
+ int w = 0;
+ int h = 0;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ /* Don't use root* here because this is
+ * the global bounding box. */
+ dmxScreen = &dmxScreens[i];
+ if (w < dmxScreen->scrnWidth + dmxScreen->rootXOrigin)
+ w = dmxScreen->scrnWidth + dmxScreen->rootXOrigin;
+ if (h < dmxScreen->scrnHeight + dmxScreen->rootYOrigin)
+ h = dmxScreen->scrnHeight + dmxScreen->rootYOrigin;
+ }
+ if (!dmxGlobalWidth && !dmxGlobalHeight) {
+ dmxLog(dmxInfo, "Using %dx%d as global bounding box\n", w, h);
+ } else {
+ switch (flag) {
+ case DMX_NO_RECOMPUTE_BOUNDING_BOX:
+ dmxLog(dmxInfo,
+ "Using old bounding box (%dx%d) instead of new (%dx%d)\n",
+ dmxGlobalWidth, dmxGlobalHeight, w, h);
+ w = dmxGlobalWidth;
+ h = dmxGlobalHeight;
+ break;
+ case DMX_RECOMPUTE_BOUNDING_BOX:
+ dmxLog(dmxInfo,
+ "Using %dx%d as global bounding box, instead of %dx%d\n",
+ w, h, dmxGlobalWidth, dmxGlobalHeight);
+ break;
+ }
+ }
+
+ dmxGlobalWidth = w;
+ dmxGlobalHeight = h;
+}
+
+/** A callback routine that hooks into Xinerama and provides a
+ * convenient place to print summary log information during server
+ * startup. This routine does not modify any values. */
+void dmxConnectionBlockCallback(void)
+{
+ xWindowRoot *root = (xWindowRoot *)(ConnectionInfo+connBlockScreenStart);
+ int offset = connBlockScreenStart + sizeof(xWindowRoot);
+ int i;
+ Bool *found = NULL;
+
+ MAXSCREENSALLOC(found);
+ if (!found)
+ dmxLog(dmxFatal, "dmxConnectionBlockCallback: out of memory\n");
+
+ dmxLog(dmxInfo, "===== Start of Summary =====\n");
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ if (dmxGlobalWidth && dmxGlobalHeight
+ && (dmxGlobalWidth != PanoramiXPixWidth
+ || dmxGlobalHeight != PanoramiXPixHeight)) {
+ dmxLog(dmxInfo,
+ "Changing Xinerama dimensions from %d %d to %d %d\n",
+ PanoramiXPixWidth, PanoramiXPixHeight,
+ dmxGlobalWidth, dmxGlobalHeight);
+ PanoramiXPixWidth = root->pixWidth = dmxGlobalWidth;
+ PanoramiXPixHeight = root->pixHeight = dmxGlobalHeight;
+ } else {
+ dmxGlobalWidth = PanoramiXPixWidth;
+ dmxGlobalHeight = PanoramiXPixHeight;
+ }
+ dmxLog(dmxInfo, "%d screens configured with Xinerama (%d %d)\n",
+ PanoramiXNumScreens, PanoramiXPixWidth, PanoramiXPixHeight);
+ for (i = 0; i < PanoramiXNumScreens; i++) found[i] = FALSE;
+ } else {
+#endif
+ /* This never happens because we're
+ * either called from a Xinerama
+ * callback or during reconfiguration
+ * (which only works with Xinerama on).
+ * In any case, be reasonable. */
+ dmxLog(dmxInfo, "%d screens configured (%d %d)\n",
+ screenInfo.numScreens, root->pixWidth, root->pixHeight);
+#ifdef PANORAMIX
+ }
+#endif
+
+ for (i = 0; i < root->nDepths; i++) {
+ xDepth *depth = (xDepth *)(ConnectionInfo + offset);
+ int voffset = offset + sizeof(xDepth);
+ xVisualType *visual = (xVisualType *)(ConnectionInfo + voffset);
+ int j;
+
+ dmxLog(dmxInfo, "%d visuals at depth %d:\n",
+ depth->nVisuals, depth->depth);
+ for (j = 0; j < depth->nVisuals; j++, visual++) {
+ XVisualInfo vi;
+
+ vi.visual = NULL;
+ vi.visualid = visual->visualID;
+ vi.screen = 0;
+ vi.depth = depth->depth;
+ vi.class = visual->class;
+ vi.red_mask = visual->redMask;
+ vi.green_mask = visual->greenMask;
+ vi.blue_mask = visual->blueMask;
+ vi.colormap_size = visual->colormapEntries;
+ vi.bits_per_rgb = visual->bitsPerRGB;
+ dmxLogVisual(NULL, &vi, 0);
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ int k;
+ for (k = 0; k < PanoramiXNumScreens; k++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[k];
+
+ if (dmxScreen->beDisplay) {
+ XVisualInfo *pvi =
+ &dmxScreen->beVisuals[dmxScreen->beDefVisualIndex];
+ if (pvi->depth == depth->depth &&
+ pvi->class == visual->class)
+ found[k] = TRUE;
+ } else {
+ /* Screen #k is detatched, so it always succeeds */
+ found[k] = TRUE;
+ }
+ }
+ }
+#endif
+ }
+ offset = voffset + depth->nVisuals * sizeof(xVisualType);
+ }
+
+ dmxInputLogDevices();
+ dmxLog(dmxInfo, "===== End of Summary =====\n");
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ Bool fatal = FALSE;
+ for (i = 0; i < PanoramiXNumScreens; i++) {
+ fatal |= !found[i];
+ if (!found[i]) {
+ dmxLog(dmxError,
+ "The default visual for screen #%d does not match "
+ "any of the\n", i);
+ dmxLog(dmxError,
+ "consolidated visuals from Xinerama (listed above)\n");
+ }
+ }
+ if (fatal)
+ dmxLog(dmxFatal,
+ "dmxConnectionBlockCallback: invalid screen(s) found");
+ }
+#endif
+ MAXSCREENSFREE(found);
+}
diff --git a/hw/dmx/dmxcb.h b/hw/dmx/dmxcb.h
new file mode 100644
index 0000000..fa334db
--- /dev/null
+++ b/hw/dmx/dmxcb.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Header file for connection block functions. \see dmxcb.c.
+ */
+
+#ifndef _DMXCB_H_
+#define _DMXCB_H_
+/** The cursor position, in global coordinates. */
+extern int dmxGlobalWidth, dmxGlobalHeight;
+
+/** #dmxComputeWidthHeight can either recompute the global bounding box
+ * or not. */
+typedef enum {
+ DMX_RECOMPUTE_BOUNDING_BOX,
+ DMX_NO_RECOMPUTE_BOUNDING_BOX
+} DMXRecomputeFlag;
+
+extern void dmxSetWidthHeight(int width, int height);
+extern void dmxComputeWidthHeight(DMXRecomputeFlag flag);
+extern void dmxConnectionBlockCallback(void);
+#endif
diff --git a/hw/dmx/dmxclient.h b/hw/dmx/dmxclient.h
new file mode 100644
index 0000000..c45f71f
--- /dev/null
+++ b/hw/dmx/dmxclient.h
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 1995 X Consortium
+ * Copyright 2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT, THE X CONSORTIUM,
+ * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the X Consortium
+ * shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written
+ * authorization from the X Consortium.
+ */
+
+/*
+ * Derived from hw/xnest/Xnest.h by Rickard E. (Rik) Faith <faith@redhat.com>
+ */
+
+/** \file
+ * This file includes all client-side include files with proper wrapping.
+ */
+
+#ifndef _DMXCLIENT_H_
+#define _DMXCLIENT_H_
+
+#define GC XlibGC
+
+#ifdef _XSERVER64
+#define DMX64
+#undef _XSERVER64
+typedef unsigned long XID64;
+typedef unsigned long Mask64;
+typedef unsigned long Atom64;
+typedef unsigned long VisualID64;
+typedef unsigned long Time64;
+#define XID XID64
+#define Mask Mask64
+#define Atom Atom64
+#define VisualID VisualID64
+#define Time Time64
+typedef XID Window64;
+typedef XID Drawable64;
+typedef XID Font64;
+typedef XID Pixmap64;
+typedef XID Cursor64;
+typedef XID Colormap64;
+typedef XID GContext64;
+typedef XID KeySym64;
+#define Window Window64
+#define Drawable Drawable64
+#define Font Font64
+#define Pixmap Pixmap64
+#define Cursor Cursor64
+#define Colormap Colormap64
+#define GContext GContext64
+#define KeySym KeySym64
+#endif
+
+#include <X11/Xlib.h>
+#include <X11/Xlibint.h> /* For _XExtension */
+#include <X11/X.h> /* from glxserver.h */
+#include <X11/Xmd.h> /* from glxserver.h */
+#include <X11/Xproto.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#include <X11/cursorfont.h>
+#include <X11/Xmu/SysUtil.h> /* For XmuSnprintf */
+
+#include <X11/extensions/shape.h>
+
+#include <X11/extensions/Xrender.h>
+#undef PictFormatType
+
+#include <X11/extensions/XKB.h>
+#include "xkbstr.h"
+
+#include <X11/extensions/XI.h>
+
+/* Always include these, since we query them even if we don't export XINPUT. */
+#include <X11/extensions/XInput.h> /* For XDevice */
+#include <X11/extensions/Xext.h>
+
+#undef GC
+
+#ifdef DMX64
+#define _XSERVER64
+#undef XID
+#undef Mask
+#undef Atom
+#undef VisualID
+#undef Time
+#undef Window
+#undef Drawable
+#undef Font
+#undef Pixmap
+#undef Cursor
+#undef Colormap
+#undef GContext
+#undef KeySym
+#endif
+
+/* These are in exglobals.h, but that conflicts with xkbsrv.h */
+extern int ProximityIn;
+extern int ProximityOut;
+extern int DeviceValuator;
+extern int DeviceMotionNotify;
+extern int DeviceFocusIn;
+extern int DeviceFocusOut;
+extern int DeviceStateNotify;
+extern int DeviceMappingNotify;
+extern int ChangeDeviceNotify;
+
+/* Some protocol gets included last, after undefines. */
+#include <X11/XKBlib.h>
+#include <X11/extensions/XKBproto.h>
+#include "xkbstr.h"
+#undef XPointer
+#include <X11/extensions/XIproto.h>
+
+#endif
diff --git a/hw/dmx/dmxcmap.c b/hw/dmx/dmxcmap.c
new file mode 100644
index 0000000..ca9ef1f
--- /dev/null
+++ b/hw/dmx/dmxcmap.c
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Colormap support. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxlog.h"
+#include "dmxsync.h"
+#include "dmxcmap.h"
+#include "dmxvisual.h"
+
+#include "micmap.h"
+
+static Bool dmxAllocateColormapPrivates(ColormapPtr pColormap)
+{
+ dmxColormapPrivPtr pCmapPriv;
+
+ pCmapPriv = (dmxColormapPrivPtr)malloc(sizeof(*pCmapPriv));
+ if (!pCmapPriv)
+ return FALSE;
+ pCmapPriv->cmap = (Colormap)0;
+
+ DMX_SET_COLORMAP_PRIV(pColormap, pCmapPriv);
+
+ return TRUE;
+}
+
+/** Create \a pColormap on the back-end server. */
+Bool dmxBECreateColormap(ColormapPtr pColormap)
+{
+ ScreenPtr pScreen = pColormap->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxColormapPrivPtr pCmapPriv = DMX_GET_COLORMAP_PRIV(pColormap);
+ VisualPtr pVisual = pColormap->pVisual;
+ Visual *visual = dmxLookupVisual(pScreen, pVisual);
+
+ if (visual) {
+ pCmapPriv->cmap = XCreateColormap(dmxScreen->beDisplay,
+ dmxScreen->scrnWin,
+ visual,
+ (pVisual->class & DynamicClass ?
+ AllocAll : AllocNone));
+ return pCmapPriv->cmap != 0;
+ }
+ else {
+ dmxLog(dmxWarning, "dmxBECreateColormap: No visual found\n");
+ return 0;
+ }
+}
+
+/** Create colormap on back-end server associated with \a pColormap's
+ * screen. */
+Bool dmxCreateColormap(ColormapPtr pColormap)
+{
+ ScreenPtr pScreen = pColormap->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+
+ if (!dmxAllocateColormapPrivates(pColormap))
+ return FALSE;
+
+ if (dmxScreen->beDisplay) {
+ if (!dmxBECreateColormap(pColormap))
+ return FALSE;
+ }
+
+ DMX_UNWRAP(CreateColormap, dmxScreen, pScreen);
+ if (pScreen->CreateColormap)
+ ret = pScreen->CreateColormap(pColormap);
+ DMX_WRAP(CreateColormap, dmxCreateColormap, dmxScreen, pScreen);
+
+ return ret;
+}
+
+/** Destroy \a pColormap on the back-end server. */
+Bool dmxBEFreeColormap(ColormapPtr pColormap)
+{
+ ScreenPtr pScreen = pColormap->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxColormapPrivPtr pCmapPriv = DMX_GET_COLORMAP_PRIV(pColormap);
+
+ if (pCmapPriv->cmap) {
+ XFreeColormap(dmxScreen->beDisplay, pCmapPriv->cmap);
+ pCmapPriv->cmap = (Colormap)0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Destroy colormap on back-end server associated with \a pColormap's
+ * screen. */
+void dmxDestroyColormap(ColormapPtr pColormap)
+{
+ ScreenPtr pScreen = pColormap->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxColormapPrivPtr pCmapPriv = DMX_GET_COLORMAP_PRIV(pColormap);
+
+ if (dmxScreen->beDisplay)
+ dmxBEFreeColormap(pColormap);
+ free(pCmapPriv);
+ DMX_SET_COLORMAP_PRIV(pColormap, NULL);
+
+ DMX_UNWRAP(DestroyColormap, dmxScreen, pScreen);
+ if (pScreen->DestroyColormap)
+ pScreen->DestroyColormap(pColormap);
+ DMX_WRAP(DestroyColormap, dmxDestroyColormap, dmxScreen, pScreen);
+}
+
+/** Install colormap on back-end server associated with \a pColormap's
+ * screen. */
+void dmxInstallColormap(ColormapPtr pColormap)
+{
+ ScreenPtr pScreen = pColormap->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxColormapPrivPtr pCmapPriv = DMX_GET_COLORMAP_PRIV(pColormap);
+
+ DMX_UNWRAP(InstallColormap, dmxScreen, pScreen);
+ if (pScreen->InstallColormap)
+ pScreen->InstallColormap(pColormap);
+ DMX_WRAP(InstallColormap, dmxInstallColormap, dmxScreen, pScreen);
+
+ if (dmxScreen->beDisplay) {
+ XInstallColormap(dmxScreen->beDisplay, pCmapPriv->cmap);
+ dmxSync(dmxScreen, FALSE);
+ }
+}
+
+/** Store colors in \a pColormap on back-end server associated with \a
+ * pColormap's screen. */
+void dmxStoreColors(ColormapPtr pColormap, int ndef, xColorItem *pdef)
+{
+ ScreenPtr pScreen = pColormap->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxColormapPrivPtr pCmapPriv = DMX_GET_COLORMAP_PRIV(pColormap);
+
+ if (dmxScreen->beDisplay && (pColormap->pVisual->class & DynamicClass)) {
+ XColor *color = malloc(sizeof(*color) * ndef);
+ int i;
+
+ if (color) {
+ for (i = 0; i < ndef; i++) {
+ color[i].pixel = pdef[i].pixel;
+ color[i].red = pdef[i].red;
+ color[i].blue = pdef[i].blue;
+ color[i].green = pdef[i].green;
+ color[i].flags = pdef[i].flags;
+ color[i].pad = pdef[i].pad;
+ }
+ XStoreColors(dmxScreen->beDisplay, pCmapPriv->cmap, color, ndef);
+ free(color);
+ } else { /* xalloc failed, so fallback */
+ XColor c;
+ for (i = 0; i < ndef; i++) {
+ c.pixel = pdef[i].pixel;
+ c.red = pdef[i].red;
+ c.blue = pdef[i].blue;
+ c.green = pdef[i].green;
+ c.flags = pdef[i].flags;
+ c.pad = pdef[i].pad;
+ XStoreColor(dmxScreen->beDisplay, pCmapPriv->cmap, &c);
+ }
+ }
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_UNWRAP(StoreColors, dmxScreen, pScreen);
+ if (pScreen->StoreColors)
+ pScreen->StoreColors(pColormap, ndef, pdef);
+ DMX_WRAP(StoreColors, dmxStoreColors, dmxScreen, pScreen);
+}
+
+/** Create the DMX server's default colormap. */
+Bool dmxCreateDefColormap(ScreenPtr pScreen)
+{
+ return miCreateDefColormap(pScreen);
+}
diff --git a/hw/dmx/dmxcmap.h b/hw/dmx/dmxcmap.h
new file mode 100644
index 0000000..75e0650
--- /dev/null
+++ b/hw/dmx/dmxcmap.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Header file for colormap support. \see dmxcmap.c. */
+
+#ifndef DMXCMAP_H
+#define DMXCMAP_H
+
+#include "colormapst.h"
+
+/** Colormap private area. */
+typedef struct _dmxColormapPriv {
+ Colormap cmap;
+} dmxColormapPrivRec, *dmxColormapPrivPtr;
+
+
+extern Bool dmxCreateColormap(ColormapPtr pColormap);
+extern void dmxDestroyColormap(ColormapPtr pColormap);
+extern void dmxInstallColormap(ColormapPtr pColormap);
+extern void dmxStoreColors(ColormapPtr pColormap, int ndef, xColorItem *pdef);
+
+extern Bool dmxCreateDefColormap(ScreenPtr pScreen);
+
+extern Bool dmxBECreateColormap(ColormapPtr pColormap);
+extern Bool dmxBEFreeColormap(ColormapPtr pColormap);
+
+/** Set colormap private structure. */
+#define DMX_SET_COLORMAP_PRIV(_pCMap, _pCMapPriv) \
+ dixSetPrivate(&(_pCMap)->devPrivates, dmxColormapPrivateKey, _pCMapPriv)
+
+/** Get colormap private structure. */
+#define DMX_GET_COLORMAP_PRIV(_pCMap) (dmxColormapPrivPtr) \
+ dixLookupPrivate(&(_pCMap)->devPrivates, dmxColormapPrivateKey)
+
+#endif /* DMXCMAP_H */
diff --git a/hw/dmx/dmxcursor.c b/hw/dmx/dmxcursor.c
new file mode 100644
index 0000000..7e03686
--- /dev/null
+++ b/hw/dmx/dmxcursor.c
@@ -0,0 +1,989 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This file contains code than supports cursor movement, including the
+ * code that initializes and reinitializes the screen positions and
+ * computes screen overlap.
+ *
+ * "This code is based very closely on the XFree86 equivalent
+ * (xfree86/common/xf86Cursor.c)." --David Dawes.
+ *
+ * "This code was then extensively re-written, as explained here."
+ * --Rik Faith
+ *
+ * The code in xf86Cursor.c used edge lists to implement the
+ * CursorOffScreen function. The edge list computation was complex
+ * (especially in the face of arbitrarily overlapping screens) compared
+ * with the speed savings in the CursorOffScreen function. The new
+ * implementation has erred on the side of correctness, readability, and
+ * maintainability over efficiency. For the common (non-edge) case, the
+ * dmxCursorOffScreen function does avoid a loop over all the screens.
+ * When the cursor has left the screen, all the screens are searched,
+ * and the first screen (in dmxScreens order) containing the cursor will
+ * be returned. If run-time profiling shows that this routing is a
+ * performance bottle-neck, then an edge list may have to be
+ * reimplemented. An edge list algorithm is O(edges) whereas the new
+ * algorithm is O(dmxNumScreens). Since edges is usually 1-3 and
+ * dmxNumScreens may be 30-60 for large backend walls, this trade off
+ * may be compelling.
+ *
+ * The xf86InitOrigins routine uses bit masks during the computation and
+ * is therefore limited to the length of a word (e.g., 32 or 64 bits)
+ * screens. Because Xdmx is expected to be used with a large number of
+ * backend displays, this limitation was removed. The new
+ * implementation has erred on the side of readability over efficiency,
+ * using the dmxSL* routines to manage a screen list instead of a
+ * bitmap, and a function call to decrease the length of the main
+ * routine. Both algorithms are of the same order, and both are called
+ * only at server generation time, so trading clarity and long-term
+ * maintainability for efficiency does not seem justified in this case.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_CURSOR_DEBUG 0
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxcursor.h"
+#include "dmxlog.h"
+#include "dmxprop.h"
+#include "dmxinput.h"
+
+#include "mipointer.h"
+#include "windowstr.h"
+#include "globals.h"
+#include "cursorstr.h"
+#include "dixevents.h" /* For GetSpriteCursor() */
+#include "inputstr.h" /* for inputInfo.pointer */
+
+#if DMX_CURSOR_DEBUG
+#define DMXDBG0(f) dmxLog(dmxDebug,f)
+#define DMXDBG1(f,a) dmxLog(dmxDebug,f,a)
+#define DMXDBG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define DMXDBG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define DMXDBG4(f,a,b,c,d) dmxLog(dmxDebug,f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e) dmxLog(dmxDebug,f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g) dmxLog(dmxDebug,f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h) dmxLog(dmxDebug,f,a,b,c,d,e,g,h)
+#else
+#define DMXDBG0(f)
+#define DMXDBG1(f,a)
+#define DMXDBG2(f,a,b)
+#define DMXDBG3(f,a,b,c)
+#define DMXDBG4(f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h)
+#endif
+
+static int dmxCursorDoMultiCursors = 1;
+
+/** Turn off support for displaying multiple cursors on overlapped
+ back-end displays. See #dmxCursorDoMultiCursors. */
+void dmxCursorNoMulti(void)
+{
+ dmxCursorDoMultiCursors = 0;
+}
+
+static Bool dmxCursorOffScreen(ScreenPtr *ppScreen, int *x, int *y)
+{
+ DMXScreenInfo *dmxScreen;
+ int i;
+ int localX = *x;
+ int localY = *y;
+ int globalX;
+ int globalY;
+
+ if (screenInfo.numScreens == 1)
+ return FALSE;
+
+ /* On current screen? */
+ dmxScreen = &dmxScreens[(*ppScreen)->myNum];
+ if (localX >= 0
+ && localX < dmxScreen->rootWidth
+ && localY >= 0
+ && localY < dmxScreen->rootHeight)
+ return FALSE;
+
+ /* Convert to global coordinate space */
+ globalX = dmxScreen->rootXOrigin + localX;
+ globalY = dmxScreen->rootYOrigin + localY;
+
+ /* Is cursor on the current screen?
+ * This efficiently exits this routine
+ * for the most common case. */
+ if (ppScreen && *ppScreen) {
+ dmxScreen = &dmxScreens[(*ppScreen)->myNum];
+ if (globalX >= dmxScreen->rootXOrigin
+ && globalX < dmxScreen->rootXOrigin + dmxScreen->rootWidth
+ && globalY >= dmxScreen->rootYOrigin
+ && globalY < dmxScreen->rootYOrigin + dmxScreen->rootHeight)
+ return FALSE;
+ }
+
+ /* Find first screen cursor is on */
+ for (i = 0; i < dmxNumScreens; i++) {
+ dmxScreen = &dmxScreens[i];
+ if (globalX >= dmxScreen->rootXOrigin
+ && globalX < dmxScreen->rootXOrigin + dmxScreen->rootWidth
+ && globalY >= dmxScreen->rootYOrigin
+ && globalY < dmxScreen->rootYOrigin + dmxScreen->rootHeight) {
+ if (dmxScreen->index == (*ppScreen)->myNum)
+ return FALSE;
+ *ppScreen = screenInfo.screens[dmxScreen->index];
+ *x = globalX - dmxScreen->rootXOrigin;
+ *y = globalY - dmxScreen->rootYOrigin;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void dmxCrossScreen(ScreenPtr pScreen, Bool entering)
+{
+}
+
+static void dmxWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
+{
+ DMXDBG3("dmxWarpCursor(%d,%d,%d)\n", pScreen->myNum, x, y);
+#if 11 /*BP*/
+ /* This call is depracated. Replace with???? */
+ miPointerWarpCursor(pDev, pScreen, x, y);
+#else
+ pScreen->SetCursorPosition(pDev, pScreen, x, y, FALSE);
+#endif
+}
+
+miPointerScreenFuncRec dmxPointerCursorFuncs =
+{
+ dmxCursorOffScreen,
+ dmxCrossScreen,
+ dmxWarpCursor,
+ NULL,
+ NULL,
+};
+
+
+/** Create a list of screens that we'll manipulate. */
+static int *dmxSLCreate(void)
+{
+ int *list = malloc(dmxNumScreens * sizeof(*list));
+ int i;
+
+ for (i = 0; i < dmxNumScreens; i++)
+ list[i] = 1;
+ return list;
+}
+
+/** Free list. */
+static void dmxSLFree(int *list)
+{
+ free(list);
+}
+
+/** Find next uninitialized entry in list. */
+static int dmxSLFindNext(int *list)
+{
+ int i;
+ for (i = 0; i < dmxNumScreens; i++)
+ if (list[i])
+ return i;
+ return -1;
+}
+
+/** Make one pass over all the screens and return the number updated. */
+static int dmxTryComputeScreenOrigins(int *screensLeft)
+{
+ ScreenPtr pScreen, refScreen;
+ DMXScreenInfo *screen;
+ int i, ref;
+ int changed = 0;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ if (!screensLeft[i])
+ continue;
+ screen = &dmxScreens[i];
+ pScreen = screenInfo.screens[i];
+ switch (screen->where) {
+ case PosAbsolute:
+ pScreen->x = screen->whereX;
+ pScreen->y = screen->whereY;
+ ++changed, screensLeft[i] = 0;
+ break;
+ case PosRelative:
+ ref = screen->whereRefScreen;
+ if (screensLeft[ref])
+ break;
+ refScreen = screenInfo.screens[ref];
+ pScreen->x = refScreen->x + screen->whereX;
+ pScreen->y = refScreen->y + screen->whereY;
+ ++changed, screensLeft[i] = 0;
+ break;
+ case PosRightOf:
+ ref = screen->whereRefScreen;
+ if (screensLeft[ref])
+ break;
+ refScreen = screenInfo.screens[ref];
+ pScreen->x = refScreen->x + refScreen->width;
+ pScreen->y = refScreen->y;
+ ++changed, screensLeft[i] = 0;
+ break;
+ case PosLeftOf:
+ ref = screen->whereRefScreen;
+ if (screensLeft[ref])
+ break;
+ refScreen = screenInfo.screens[ref];
+ pScreen->x = refScreen->x - pScreen->width;
+ pScreen->y = refScreen->y;
+ ++changed, screensLeft[i] = 0;
+ break;
+ case PosBelow:
+ ref = screen->whereRefScreen;
+ if (screensLeft[ref])
+ break;
+ refScreen = screenInfo.screens[ref];
+ pScreen->x = refScreen->x;
+ pScreen->y = refScreen->y + refScreen->height;
+ ++changed, screensLeft[i] = 0;
+ break;
+ case PosAbove:
+ ref = screen->whereRefScreen;
+ if (screensLeft[ref])
+ break;
+ refScreen = screenInfo.screens[ref];
+ pScreen->x = refScreen->x;
+ pScreen->y = refScreen->y - pScreen->height;
+ ++changed, screensLeft[i] = 0;
+ break;
+ case PosNone:
+ dmxLog(dmxFatal, "No position information for screen %d\n", i);
+ }
+ }
+ return changed;
+}
+
+static void dmxComputeScreenOrigins(void)
+{
+ ScreenPtr pScreen;
+ int *screensLeft;
+ int i, ref;
+ int minX, minY;
+
+ /* Compute origins based on
+ * configuration information. */
+ screensLeft = dmxSLCreate();
+ while ((i = dmxSLFindNext(screensLeft)) >= 0) {
+ while (dmxTryComputeScreenOrigins(screensLeft));
+ if ((i = dmxSLFindNext(screensLeft)) >= 0) {
+ /* All of the remaining screens are referencing each other.
+ * Assign a value to one of them and go through again. This
+ * guarantees that we will eventually terminate.
+ */
+ ref = dmxScreens[i].whereRefScreen;
+ pScreen = screenInfo.screens[ref];
+ pScreen->x = pScreen->y = 0;
+ screensLeft[ref] = 0;
+ }
+ }
+ dmxSLFree(screensLeft);
+
+
+ /* Justify the topmost and leftmost to
+ * (0,0). */
+ minX = screenInfo.screens[0]->x;
+ minY = screenInfo.screens[0]->y;
+ for (i = 1; i < dmxNumScreens; i++) { /* Compute minX, minY */
+ if (screenInfo.screens[i]->x < minX)
+ minX = screenInfo.screens[i]->x;
+ if (screenInfo.screens[i]->y < minY)
+ minY = screenInfo.screens[i]->y;
+ }
+ if (minX || minY) {
+ for (i = 0; i < dmxNumScreens; i++) {
+ screenInfo.screens[i]->x -= minX;
+ screenInfo.screens[i]->y -= minY;
+ }
+ }
+}
+
+/** Recompute origin information in the #dmxScreens list. This is
+ * called from #dmxInitOrigins. */
+void dmxReInitOrigins(void)
+{
+ int i;
+
+ if (dmxNumScreens > MAXSCREENS)
+ dmxLog(dmxFatal, "dmxNumScreens = %d > MAXSCREENS = %d\n",
+ dmxNumScreens, MAXSCREENS);
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ dmxLogOutput(dmxScreen,
+ "s=%dx%d%+d%+d r=%dx%d%+d%+d @%d,%d"
+ " (be=%dx%d depth=%d bpp=%d)\n",
+ dmxScreen->scrnWidth, dmxScreen->scrnHeight,
+ dmxScreen->scrnX, dmxScreen->scrnY,
+
+ dmxScreen->rootWidth, dmxScreen->rootHeight,
+ dmxScreen->rootX, dmxScreen->rootY,
+
+ dmxScreen->rootXOrigin, dmxScreen->rootYOrigin,
+ dmxScreen->beWidth, dmxScreen->beHeight,
+ dmxScreen->beDepth, dmxScreen->beBPP);
+ }
+}
+
+/** Initialize screen origins (and relative position). This is called
+ * for each server generation. For dynamic reconfiguration, use
+ * #dmxReInitOrigins() instead. */
+void dmxInitOrigins(void)
+{
+ int i;
+
+ if (dmxNumScreens > MAXSCREENS)
+ dmxLog(dmxFatal, "dmxNumScreens = %d > MAXSCREENS = %d\n",
+ dmxNumScreens, MAXSCREENS);
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ dmxLogOutput(dmxScreen,
+ "(request) s=%dx%d%+d%+d r=%dx%d%+d%+d @%d,%d (%d)"
+ " (be=%dx%d depth=%d bpp=%d)\n",
+ dmxScreen->scrnWidth, dmxScreen->scrnHeight,
+ dmxScreen->scrnX, dmxScreen->scrnY,
+
+ dmxScreen->rootWidth, dmxScreen->rootHeight,
+ dmxScreen->rootX, dmxScreen->rootY,
+
+ dmxScreen->whereX, dmxScreen->whereY,
+ dmxScreen->where,
+
+ dmxScreen->beWidth, dmxScreen->beHeight,
+ dmxScreen->beDepth, dmxScreen->beBPP);
+ }
+
+ dmxComputeScreenOrigins();
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ dmxScreen->rootXOrigin = screenInfo.screens[i]->x;
+ dmxScreen->rootYOrigin = screenInfo.screens[i]->y;
+ }
+
+ dmxReInitOrigins();
+}
+
+/** Returns non-zero if the global \a x, \a y coordinate is on the
+ * screen window of the \a dmxScreen. */
+int dmxOnScreen(int x, int y, DMXScreenInfo *dmxScreen)
+{
+#if DMX_CURSOR_DEBUG > 1
+ dmxLog(dmxDebug,
+ "dmxOnScreen %d %d,%d (r=%dx%d%+d%+d@%d,%d s=%dx%d%+d%+d)\n",
+ dmxScreen->index, x, y,
+ dmxScreen->rootWidth, dmxScreen->rootHeight,
+ dmxScreen->rootX, dmxScreen->rootY,
+ dmxScreen->rootXOrigin, dmxScreen->rootYOrigin,
+ dmxScreen->scrnWidth, dmxScreen->scrnHeight,
+ dmxScreen->scrnX, dmxScreen->scrnY);
+#endif
+ if (x >= dmxScreen->rootXOrigin
+ && x < dmxScreen->rootXOrigin + dmxScreen->rootWidth
+ && y >= dmxScreen->rootYOrigin
+ && y < dmxScreen->rootYOrigin + dmxScreen->rootHeight) return 1;
+ return 0;
+}
+
+/** Returns non-zero if \a a overlaps \a b. */
+static int dmxDoesOverlap(DMXScreenInfo *a, DMXScreenInfo *b)
+{
+ if (dmxOnScreen(a->rootXOrigin,
+ a->rootYOrigin, b))
+ return 1;
+
+ if (dmxOnScreen(a->rootXOrigin,
+ a->rootYOrigin + a->scrnWidth, b))
+ return 1;
+
+ if (dmxOnScreen(a->rootXOrigin + a->scrnHeight,
+ a->rootYOrigin, b))
+ return 1;
+
+ if (dmxOnScreen(a->rootXOrigin + a->scrnHeight,
+ a->rootYOrigin + a->scrnWidth, b))
+ return 1;
+
+ if (dmxOnScreen(b->rootXOrigin,
+ b->rootYOrigin, a))
+ return 1;
+
+ if (dmxOnScreen(b->rootXOrigin,
+ b->rootYOrigin + b->scrnWidth, a))
+ return 1;
+
+ if (dmxOnScreen(b->rootXOrigin + b->scrnHeight,
+ b->rootYOrigin, a))
+ return 1;
+
+ if (dmxOnScreen(b->rootXOrigin + b->scrnHeight,
+ b->rootYOrigin + b->scrnWidth, a))
+ return 1;
+
+ return 0;
+}
+
+/** Used with \a dmxInterateOverlap to print out a list of screens which
+ * overlap each other. */
+static void *dmxPrintOverlap(DMXScreenInfo *dmxScreen, void *closure)
+{
+ DMXScreenInfo *a = closure;
+ if (dmxScreen != a) {
+ if (dmxScreen->cursorNotShared)
+ dmxLogOutputCont(a, " [%d/%s]", dmxScreen->index, dmxScreen->name);
+ else
+ dmxLogOutputCont(a, " %d/%s", dmxScreen->index, dmxScreen->name);
+ }
+ return NULL;
+}
+
+/** Iterate over the screens which overlap with the \a start screen,
+ * calling \a f with the \a closure for each argument. Often used with
+ * #dmxPrintOverlap. */
+static void *dmxIterateOverlap(DMXScreenInfo *start,
+ void *(*f)(DMXScreenInfo *dmxScreen, void *),
+ void *closure)
+{
+ DMXScreenInfo *pt;
+
+ if (!start->over) return f(start, closure);
+
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ void *retval;
+ if ((retval = f(pt, closure))) return retval;
+ if (pt == start) break;
+ }
+ return NULL;
+}
+
+/** Used with #dmxPropertyIterate to determine if screen \a a is the
+ * same as the screen \a closure. */
+static void *dmxTestSameDisplay(DMXScreenInfo *a, void *closure)
+{
+ DMXScreenInfo *b = closure;
+
+ if (a == b)
+ return a;
+ return NULL;
+}
+
+/** Detects overlapping dmxScreens and creates circular lists. This
+ * uses an O(dmxNumScreens^2) algorithm, but dmxNumScreens is < 100 and
+ * the computation only needs to be performed for every server
+ * generation or dynamic reconfiguration . */
+void dmxInitOverlap(void)
+{
+ int i, j;
+ DMXScreenInfo *a, *b, *pt;
+
+ for (i = 0; i < dmxNumScreens; i++)
+ dmxScreens[i].over = NULL;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ a = &dmxScreens[i];
+
+ for (j = i+1; j < dmxNumScreens; j++) {
+ b = &dmxScreens[j];
+ if (b->over)
+ continue;
+
+ if (dmxDoesOverlap(a, b)) {
+ DMXDBG6("%d overlaps %d: a=%p %p b=%p %p\n",
+ a->index, b->index, a, a->over, b, b->over);
+ b->over = (a->over ? a->over : a);
+ a->over = b;
+ }
+ }
+ }
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ a = &dmxScreens[i];
+
+ if (!a->over)
+ continue;
+
+ /* Flag all pairs that are on same display */
+ for (pt = a->over; pt != a; pt = pt->over) {
+ if (dmxPropertyIterate(a, dmxTestSameDisplay, pt)) {
+ /* The ->over sets contain the transitive set of screens
+ * that overlap. For screens that are on the same
+ * backend display, we only want to exclude pairs of
+ * screens that mutually overlap on the backend display,
+ * so we call dmxDoesOverlap, which is stricter than the
+ * ->over set. */
+ if (!dmxDoesOverlap(a, pt))
+ continue;
+ a->cursorNotShared = 1;
+ pt->cursorNotShared = 1;
+ dmxLog(dmxInfo,
+ "Screen %d and %d overlap on %s\n",
+ a->index, pt->index, a->name);
+ }
+ }
+ }
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ a = &dmxScreens[i];
+
+ if (a->over) {
+ dmxLogOutput(a, "Overlaps");
+ dmxIterateOverlap(a, dmxPrintOverlap, a);
+ dmxLogOutputCont(a, "\n");
+ }
+ }
+}
+
+/** Create \a pCursor on the back-end associated with \a pScreen. */
+void dmxBECreateCursor(ScreenPtr pScreen, CursorPtr pCursor)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxCursorPrivPtr pCursorPriv = DMX_GET_CURSOR_PRIV(pCursor, pScreen);
+ CursorBitsPtr pBits = pCursor->bits;
+ Pixmap src, msk;
+ XColor fg, bg;
+ XImage *img;
+ XlibGC gc = NULL;
+ XGCValues v;
+ unsigned long m;
+ int i;
+
+ if (!pCursorPriv)
+ return;
+
+ m = GCFunction | GCPlaneMask | GCForeground | GCBackground | GCClipMask;
+ v.function = GXcopy;
+ v.plane_mask = AllPlanes;
+ v.foreground = 1L;
+ v.background = 0L;
+ v.clip_mask = None;
+
+ for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
+ if (dmxScreen->bePixmapFormats[i].depth == 1) {
+ /* Create GC in the back-end servers */
+ gc = XCreateGC(dmxScreen->beDisplay, dmxScreen->scrnDefDrawables[i],
+ m, &v);
+ break;
+ }
+ }
+ if (!gc)
+ dmxLog(dmxFatal, "dmxRealizeCursor: gc not initialized\n");
+
+ src = XCreatePixmap(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ pBits->width, pBits->height, 1);
+ msk = XCreatePixmap(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ pBits->width, pBits->height, 1);
+
+ img = XCreateImage(dmxScreen->beDisplay,
+ dmxScreen->beVisuals[dmxScreen->beDefVisualIndex].visual,
+ 1, XYBitmap, 0, (char *)pBits->source,
+ pBits->width, pBits->height,
+ BitmapPad(dmxScreen->beDisplay), 0);
+
+ XPutImage(dmxScreen->beDisplay, src, gc, img, 0, 0, 0, 0,
+ pBits->width, pBits->height);
+
+ XFree(img);
+
+ img = XCreateImage(dmxScreen->beDisplay,
+ dmxScreen->beVisuals[dmxScreen->beDefVisualIndex].visual,
+ 1, XYBitmap, 0, (char *)pBits->mask,
+ pBits->width, pBits->height,
+ BitmapPad(dmxScreen->beDisplay), 0);
+
+ XPutImage(dmxScreen->beDisplay, msk, gc, img, 0, 0, 0, 0,
+ pBits->width, pBits->height);
+
+ XFree(img);
+
+ fg.red = pCursor->foreRed;
+ fg.green = pCursor->foreGreen;
+ fg.blue = pCursor->foreBlue;
+
+ bg.red = pCursor->backRed;
+ bg.green = pCursor->backGreen;
+ bg.blue = pCursor->backBlue;
+
+ pCursorPriv->cursor = XCreatePixmapCursor(dmxScreen->beDisplay,
+ src, msk,
+ &fg, &bg,
+ pBits->xhot, pBits->yhot);
+
+ XFreePixmap(dmxScreen->beDisplay, src);
+ XFreePixmap(dmxScreen->beDisplay, msk);
+ XFreeGC(dmxScreen->beDisplay, gc);
+
+ dmxSync(dmxScreen, FALSE);
+}
+
+static Bool _dmxRealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxCursorPrivPtr pCursorPriv;
+
+ DMXDBG2("_dmxRealizeCursor(%d,%p)\n", pScreen->myNum, pCursor);
+
+ DMX_SET_CURSOR_PRIV(pCursor, pScreen, malloc(sizeof(*pCursorPriv)));
+ if (!DMX_GET_CURSOR_PRIV(pCursor, pScreen))
+ return FALSE;
+
+ pCursorPriv = DMX_GET_CURSOR_PRIV(pCursor, pScreen);
+ pCursorPriv->cursor = (Cursor)0;
+
+ if (!dmxScreen->beDisplay)
+ return TRUE;
+
+ dmxBECreateCursor(pScreen, pCursor);
+ return TRUE;
+}
+
+/** Free \a pCursor on the back-end associated with \a pScreen. */
+Bool dmxBEFreeCursor(ScreenPtr pScreen, CursorPtr pCursor)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxCursorPrivPtr pCursorPriv = DMX_GET_CURSOR_PRIV(pCursor, pScreen);
+
+ if (pCursorPriv) {
+ XFreeCursor(dmxScreen->beDisplay, pCursorPriv->cursor);
+ pCursorPriv->cursor = (Cursor)0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static Bool _dmxUnrealizeCursor(ScreenPtr pScreen, CursorPtr pCursor)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+
+ DMXDBG2("_dmxUnrealizeCursor(%d,%p)\n",
+ pScreen->myNum, pCursor);
+
+ if (dmxScreen->beDisplay) {
+ if (dmxBEFreeCursor(pScreen, pCursor))
+ free(DMX_GET_CURSOR_PRIV(pCursor, pScreen));
+ }
+ DMX_SET_CURSOR_PRIV(pCursor, pScreen, NULL);
+
+ return TRUE;
+}
+
+static void _dmxMoveCursor(ScreenPtr pScreen, int x, int y)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ int newX = x + dmxScreen->rootX;
+ int newY = y + dmxScreen->rootY;
+
+ if (newX < 0) newX = 0;
+ if (newY < 0) newY = 0;
+
+ DMXDBG5("_dmxMoveCursor(%d,%d,%d) -> %d,%d\n",
+ pScreen->myNum, x, y, newX, newY);
+ if (dmxScreen->beDisplay) {
+ XWarpPointer(dmxScreen->beDisplay, None, dmxScreen->scrnWin,
+ 0, 0, 0, 0, newX, newY);
+ dmxSync(dmxScreen, TRUE);
+ }
+}
+
+static void _dmxSetCursor(ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+
+ DMXDBG4("_dmxSetCursor(%d,%p,%d,%d)\n", pScreen->myNum, pCursor, x, y);
+
+ if (pCursor) {
+ dmxCursorPrivPtr pCursorPriv = DMX_GET_CURSOR_PRIV(pCursor, pScreen);
+ if (pCursorPriv && dmxScreen->curCursor != pCursorPriv->cursor) {
+ if (dmxScreen->beDisplay)
+ XDefineCursor(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ pCursorPriv->cursor);
+ dmxScreen->cursor = pCursor;
+ dmxScreen->curCursor = pCursorPriv->cursor;
+ dmxScreen->cursorVisible = 1;
+ }
+ _dmxMoveCursor(pScreen, x, y);
+ } else {
+ if (dmxScreen->beDisplay)
+ XDefineCursor(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ dmxScreen->noCursor);
+ dmxScreen->cursor = NULL;
+ dmxScreen->curCursor = (Cursor)0;
+ dmxScreen->cursorVisible = 0;
+ }
+ if (dmxScreen->beDisplay) dmxSync(dmxScreen, TRUE);
+}
+
+static Bool dmxRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
+{
+ DMXScreenInfo *start = &dmxScreens[pScreen->myNum];
+ DMXScreenInfo *pt;
+
+ if (!start->over || !dmxCursorDoMultiCursors || start->cursorNotShared)
+ return _dmxRealizeCursor(pScreen, pCursor);
+
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ if (pt->cursorNotShared)
+ continue;
+ _dmxRealizeCursor(screenInfo.screens[pt->index], pCursor);
+ if (pt == start)
+ break;
+ }
+ return TRUE;
+}
+
+static Bool dmxUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
+{
+ DMXScreenInfo *start = &dmxScreens[pScreen->myNum];
+ DMXScreenInfo *pt;
+
+ if (!start->over || !dmxCursorDoMultiCursors || start->cursorNotShared)
+ return _dmxUnrealizeCursor(pScreen, pCursor);
+
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ if (pt->cursorNotShared)
+ continue;
+ _dmxUnrealizeCursor(screenInfo.screens[pt->index], pCursor);
+ if (pt == start)
+ break;
+ }
+ return TRUE;
+}
+
+static CursorPtr dmxFindCursor(DMXScreenInfo *start)
+{
+ DMXScreenInfo *pt;
+
+ if (!start || !start->over)
+ return GetSpriteCursor(inputInfo.pointer);
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ if (pt->cursor)
+ return pt->cursor;
+ if (pt == start)
+ break;
+ }
+ return GetSpriteCursor(inputInfo.pointer);
+}
+
+/** Move the cursor to coordinates (\a x, \a y)on \a pScreen. This
+ * function is usually called via #dmxPointerSpriteFuncs, except during
+ * reconfiguration when the cursor is repositioned to force an update on
+ * newley overlapping screens and on screens that no longer overlap.
+ *
+ * The coords (x,y) are in global coord space. We'll loop over the
+ * back-end screens and see if they contain the global coord. If so, call
+ * _dmxMoveCursor() (XWarpPointer) to position the pointer on that screen.
+ */
+void dmxMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
+{
+ DMXScreenInfo *start = &dmxScreens[pScreen->myNum];
+ DMXScreenInfo *pt;
+
+ DMXDBG3("dmxMoveCursor(%d,%d,%d)\n", pScreen->myNum, x, y);
+
+ if (!start->over || !dmxCursorDoMultiCursors || start->cursorNotShared) {
+ _dmxMoveCursor(pScreen, x, y);
+ return;
+ }
+
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ if (pt->cursorNotShared)
+ continue;
+ if (dmxOnScreen(x + start->rootXOrigin, y + start->rootYOrigin, pt)) {
+ if (/* pt != start && */ !pt->cursorVisible) {
+ if (!pt->cursor) {
+ /* This only happens during
+ * reconfiguration when a new overlap
+ * occurs. */
+ CursorPtr pCursor;
+
+ if ((pCursor = dmxFindCursor(start)))
+ _dmxRealizeCursor(screenInfo.screens[pt->index],
+ pt->cursor = pCursor);
+
+ }
+ _dmxSetCursor(screenInfo.screens[pt->index],
+ pt->cursor,
+ x + start->rootXOrigin - pt->rootXOrigin,
+ y + start->rootYOrigin - pt->rootYOrigin);
+ }
+ _dmxMoveCursor(screenInfo.screens[pt->index],
+ x + start->rootXOrigin - pt->rootXOrigin,
+ y + start->rootYOrigin - pt->rootYOrigin);
+ } else if (/* pt != start && */ pt->cursorVisible) {
+ _dmxSetCursor(screenInfo.screens[pt->index],
+ NULL,
+ x + start->rootXOrigin - pt->rootXOrigin,
+ y + start->rootYOrigin - pt->rootYOrigin);
+ }
+ if (pt == start)
+ break;
+ }
+}
+
+static void dmxSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y)
+{
+ DMXScreenInfo *start = &dmxScreens[pScreen->myNum];
+ DMXScreenInfo *pt;
+ int GX, GY, gx, gy;
+
+ DMXDBG5("dmxSetCursor(%d %p, %p,%d,%d)\n",
+ pScreen->myNum, start, pCursor, x, y);
+
+ /* We do this check here because of two cases:
+ *
+ * 1) if a client calls XWarpPointer()
+ * and Xinerama is not running, we can
+ * have mi's notion of the pointer
+ * position out of phase with DMX's
+ * notion.
+ *
+ * 2) if a down button is held while the
+ * cursor moves outside the root window,
+ * mi's notion of the pointer position
+ * is out of phase with DMX's notion and
+ * the cursor can remain visible when it
+ * shouldn't be. */
+
+ dmxGetGlobalPosition(&GX, &GY);
+ gx = start->rootXOrigin + x;
+ gy = start->rootYOrigin + y;
+ if (x && y && (GX != gx || GY != gy))
+ dmxCoreMotion(NULL, gx, gy, 0, DMX_NO_BLOCK);
+
+ if (!start->over || !dmxCursorDoMultiCursors || start->cursorNotShared) {
+ _dmxSetCursor(pScreen, pCursor, x, y);
+ return;
+ }
+
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ if (pt->cursorNotShared)
+ continue;
+ if (dmxOnScreen(x + start->rootXOrigin, y + start->rootYOrigin, pt)) {
+ _dmxSetCursor(screenInfo.screens[pt->index], pCursor,
+ x + start->rootXOrigin - pt->rootXOrigin,
+ y + start->rootYOrigin - pt->rootYOrigin);
+ } else {
+ _dmxSetCursor(screenInfo.screens[pt->index], NULL,
+ x + start->rootXOrigin - pt->rootXOrigin,
+ y + start->rootYOrigin - pt->rootYOrigin);
+ }
+ if (pt == start)
+ break;
+ }
+}
+
+
+/** This routine is used by the backend input routines to hide the
+ * cursor on a screen that is being used for relative input. \see
+ * dmxbackend.c */
+void dmxHideCursor(DMXScreenInfo *dmxScreen)
+{
+ int x, y;
+ ScreenPtr pScreen = screenInfo.screens[dmxScreen->index];
+
+ dmxGetGlobalPosition(&x, &y);
+ _dmxSetCursor(pScreen, NULL, x, y);
+}
+
+/** This routine is called during reconfiguration to make sure the
+ * cursor is visible. */
+void dmxCheckCursor(void)
+{
+ int i;
+ int x, y;
+ ScreenPtr pScreen;
+ DMXScreenInfo *firstScreen;
+
+ dmxGetGlobalPosition(&x, &y);
+ firstScreen = dmxFindFirstScreen(x, y);
+
+ DMXDBG2("dmxCheckCursor %d %d\n", x, y);
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ pScreen = screenInfo.screens[dmxScreen->index];
+
+ if (!dmxOnScreen(x, y, dmxScreen)) {
+ if (firstScreen && i == miPointerGetScreen(inputInfo.pointer)->myNum)
+ miPointerSetScreen(inputInfo.pointer, firstScreen->index, x, y);
+ _dmxSetCursor(pScreen, NULL,
+ x - dmxScreen->rootXOrigin,
+ y - dmxScreen->rootYOrigin);
+ } else {
+ if (!dmxScreen->cursor) {
+ CursorPtr pCursor;
+
+ if ((pCursor = dmxFindCursor(dmxScreen))) {
+ _dmxRealizeCursor(pScreen, dmxScreen->cursor = pCursor);
+ }
+ }
+ _dmxSetCursor(pScreen, dmxScreen->cursor,
+ x - dmxScreen->rootXOrigin,
+ y - dmxScreen->rootYOrigin);
+ }
+ }
+ DMXDBG2(" leave dmxCheckCursor %d %d\n", x, y);
+}
+
+static Bool dmxDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScr)
+{
+ return TRUE;
+}
+
+static void dmxDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScr)
+{
+}
+
+miPointerSpriteFuncRec dmxPointerSpriteFuncs =
+{
+ dmxRealizeCursor,
+ dmxUnrealizeCursor,
+ dmxSetCursor,
+ dmxMoveCursor,
+ dmxDeviceCursorInitialize,
+ dmxDeviceCursorCleanup
+};
diff --git a/hw/dmx/dmxcursor.h b/hw/dmx/dmxcursor.h
new file mode 100644
index 0000000..5242268
--- /dev/null
+++ b/hw/dmx/dmxcursor.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for cursor support. \see dmxcursor.c. */
+
+#ifndef DMXCURSOR_H
+#define DMXCURSOR_H
+
+#include "mipointer.h"
+
+/** Cursor private area. */
+typedef struct _dmxCursorPriv {
+ Cursor cursor;
+} dmxCursorPrivRec, *dmxCursorPrivPtr;
+
+/** Cursor functions for mi layer. \see dmxcursor.c \see dmxscrinit.c */
+extern miPointerScreenFuncRec dmxPointerCursorFuncs;
+/** Sprite functions for mi layer. \see dmxcursor.c \see dmxscrinit.c */
+extern miPointerSpriteFuncRec dmxPointerSpriteFuncs;
+
+extern void dmxReInitOrigins(void);
+extern void dmxInitOrigins(void);
+extern void dmxInitOverlap(void);
+extern void dmxCursorNoMulti(void);
+extern void dmxMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
+extern void dmxCheckCursor(void);
+extern int dmxOnScreen(int x, int y, DMXScreenInfo *dmxScreen);
+extern void dmxHideCursor(DMXScreenInfo *dmxScreen);
+
+extern void dmxBECreateCursor(ScreenPtr pScreen, CursorPtr pCursor);
+extern Bool dmxBEFreeCursor(ScreenPtr pScreen, CursorPtr pCursor);
+
+#define DMX_GET_CURSOR_PRIV(_pCursor, _pScreen) ((dmxCursorPrivPtr) \
+ dixLookupPrivate(&(_pCursor)->devPrivates, CursorScreenKey(_pScreen)))
+
+#define DMX_SET_CURSOR_PRIV(_pCursor, _pScreen, v) \
+ dixSetPrivate(&(_pCursor)->devPrivates, CursorScreenKey(_pScreen), v)
+
+#endif /* DMXCURSOR_H */
diff --git a/hw/dmx/dmxdpms.c b/hw/dmx/dmxdpms.c
new file mode 100644
index 0000000..2af1605
--- /dev/null
+++ b/hw/dmx/dmxdpms.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Author:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provides DPMS support and unifies all DPMS and other screen-saver
+ * support in one file. If -dpms is given on the command line, or the
+ * Xdmx server is not compiled with DPMS support, then the DPMS extension
+ * does not work for clients, but DPMS on the backends is still disables
+ * (and restored at Xdmx server shutdown time).
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxdpms.h"
+#include "dmxlog.h"
+#include "dmxsync.h"
+#ifdef DPMSExtension
+#include "dpmsproc.h"
+#endif
+#include "windowstr.h" /* For screenIsSaved */
+#include <X11/extensions/dpms.h>
+
+static unsigned long dpmsGeneration = 0;
+static Bool dpmsSupported = TRUE;
+
+static void _dmxDPMSInit(DMXScreenInfo *dmxScreen)
+{
+ int event_base, error_base;
+ int major, minor;
+ CARD16 level, standby, suspend, off;
+ BOOL state;
+ const char *monitor;
+
+ if (dpmsGeneration != serverGeneration) {
+ dpmsSupported = TRUE; /* On unless a backend doesn't support it */
+ dpmsGeneration = serverGeneration;
+ }
+
+#ifdef DPMSExtension
+ if (DPMSDisabledSwitch) dpmsSupported = FALSE; /* -dpms turns off */
+#endif
+
+ dmxScreen->dpmsCapable = 0;
+
+ if (!dmxScreen->beDisplay) {
+ dmxLogOutput(dmxScreen,
+ "Cannot determine if DPMS supported (detached screen)\n");
+ dpmsSupported = FALSE;
+ return;
+ }
+
+ if (!DPMSQueryExtension(dmxScreen->beDisplay,
+ &event_base, &error_base)) {
+ dmxLogOutput(dmxScreen, "DPMS not supported\n");
+ dpmsSupported = FALSE;
+ return;
+ }
+ if (!DPMSGetVersion(dmxScreen->beDisplay, &major, &minor)) {
+ dmxLogOutput(dmxScreen, "DPMS not supported\n");
+ dpmsSupported = FALSE;
+ return;
+ }
+ if (!DPMSCapable(dmxScreen->beDisplay)) {
+ dmxLogOutput(dmxScreen, "DPMS %d.%d (not DPMS capable)\n",
+ major, minor);
+ dpmsSupported = FALSE;
+ return;
+ }
+
+ DPMSInfo(dmxScreen->beDisplay, &level, &state);
+ DPMSGetTimeouts(dmxScreen->beDisplay, &standby, &suspend, &off);
+ DPMSSetTimeouts(dmxScreen->beDisplay, 0, 0, 0);
+ DPMSEnable(dmxScreen->beDisplay);
+ DPMSForceLevel(dmxScreen->beDisplay, DPMSModeOn);
+ dmxScreen->dpmsCapable = 1;
+ dmxScreen->dpmsEnabled = !!state;
+ dmxScreen->dpmsStandby = standby;
+ dmxScreen->dpmsSuspend = suspend;
+ dmxScreen->dpmsOff = off;
+
+ switch (level) {
+ case DPMSModeOn: monitor = "on"; break;
+ case DPMSModeStandby: monitor = "standby"; break;
+ case DPMSModeSuspend: monitor = "suspend"; break;
+ case DPMSModeOff: monitor = "off"; break;
+ default: monitor = "unknown"; break;
+ }
+
+ dmxLogOutput(dmxScreen,
+ "DPMS %d.%d (%s, %s, %d %d %d)\n",
+ major, minor, monitor, state ? "enabled" : "disabled",
+ standby, suspend, off);
+}
+
+/** Initialize DPMS support. We save the current settings and turn off
+ * DPMS. The settings are restored in #dmxDPMSTerm. */
+void dmxDPMSInit(DMXScreenInfo *dmxScreen)
+{
+ int interval, preferBlanking, allowExposures;
+
+ /* Turn off DPMS */
+ _dmxDPMSInit(dmxScreen);
+
+ if (!dmxScreen->beDisplay)
+ return;
+
+ /* Turn off screen saver */
+ XGetScreenSaver(dmxScreen->beDisplay, &dmxScreen->savedTimeout, &interval,
+ &preferBlanking, &allowExposures);
+ XSetScreenSaver(dmxScreen->beDisplay, 0, interval,
+ preferBlanking, allowExposures);
+ XResetScreenSaver(dmxScreen->beDisplay);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Terminate DPMS support on \a dmxScreen. We restore the settings
+ * saved in #dmxDPMSInit. */
+void dmxDPMSTerm(DMXScreenInfo *dmxScreen)
+{
+ int timeout, interval, preferBlanking, allowExposures;
+
+ if (!dmxScreen->beDisplay)
+ return;
+
+ XGetScreenSaver(dmxScreen->beDisplay, &timeout, &interval,
+ &preferBlanking, &allowExposures);
+ XSetScreenSaver(dmxScreen->beDisplay, dmxScreen->savedTimeout, interval,
+ preferBlanking, allowExposures);
+ if (dmxScreen->dpmsCapable) {
+ /* Restore saved state */
+ DPMSForceLevel(dmxScreen->beDisplay, DPMSModeOn);
+ DPMSSetTimeouts(dmxScreen->beDisplay, dmxScreen->dpmsStandby,
+ dmxScreen->dpmsSuspend, dmxScreen->dpmsOff);
+ if (dmxScreen->dpmsEnabled) DPMSEnable(dmxScreen->beDisplay);
+ else DPMSDisable(dmxScreen->beDisplay);
+ }
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Called when activity is detected so that DPMS power-saving mode can
+ * be deactivated. */
+void dmxDPMSWakeup(void)
+{
+ if (screenIsSaved == SCREEN_SAVER_ON)
+ dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
+#ifdef DPMSExtension
+ if (DPMSPowerLevel) DPMSSet(serverClient, 0);
+#endif
+}
+
+#ifdef DPMSExtension
+/** This is called on each server generation. It should determine if
+ * DPMS is supported on all of the backends and, if so, return TRUE. */
+Bool DPMSSupported(void)
+{
+ return dpmsSupported;
+}
+
+/** This is used by clients (e.g., xset) to set the DPMS level. */
+int DPMSSet(ClientPtr client, int level)
+{
+ int i;
+
+ if (!dpmsSupported) return Success;
+
+ if (level < 0) level = DPMSModeOn;
+ if (level > 3) level = DPMSModeOff;
+
+ DPMSPowerLevel = level;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ if (dmxScreen->beDisplay) {
+ DPMSForceLevel(dmxScreen->beDisplay, level);
+ dmxSync(dmxScreen, FALSE);
+ }
+ }
+ return Success;
+}
+#endif
diff --git a/hw/dmx/dmxdpms.h b/hw/dmx/dmxdpms.h
new file mode 100644
index 0000000..e3eee98
--- /dev/null
+++ b/hw/dmx/dmxdpms.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Author:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for DPMS extension support. \see dmxdpms.c */
+
+#ifndef _DMXDPMS_H_
+#define _DMXDPMS_H_
+extern void dmxDPMSInit(DMXScreenInfo *dmxScreen);
+extern void dmxDPMSTerm(DMXScreenInfo *dmxScreen);
+extern void dmxDPMSWakeup(void); /* Call when input is processed */
+#endif
diff --git a/hw/dmx/dmxextension.c b/hw/dmx/dmxextension.c
new file mode 100644
index 0000000..bd326ce
--- /dev/null
+++ b/hw/dmx/dmxextension.c
@@ -0,0 +1,1620 @@
+/*
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Author:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides the only interface to the X server extension support
+ * in programs/Xserver/Xext. Those programs should only include dmxext.h
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include <stdlib.h>
+
+#include "dmx.h"
+#include "dmxinit.h"
+#include "dmxextension.h"
+#include "dmxwindow.h"
+#include "dmxcb.h"
+#include "dmxcursor.h"
+#include "dmxpixmap.h"
+#include "dmxgc.h"
+#include "dmxfont.h"
+#include "dmxcmap.h"
+#include "dmxpict.h"
+#include "dmxinput.h"
+#include "dmxsync.h"
+#include "dmxscrinit.h"
+#include "input/dmxinputinit.h"
+
+#include "windowstr.h"
+#include "inputstr.h" /* For DeviceIntRec */
+#include <X11/extensions/dmxproto.h> /* For DMX_BAD_* */
+#include "cursorstr.h"
+
+/* The default font is declared in dix/globals.c, but is not included in
+ * _any_ header files. */
+extern FontPtr defaultFont;
+
+/** This routine provides information to the DMX protocol extension
+ * about a particular screen. */
+Bool dmxGetScreenAttributes(int physical, DMXScreenAttributesPtr attr)
+{
+ DMXScreenInfo *dmxScreen;
+
+ if (physical < 0 || physical >= dmxNumScreens) return FALSE;
+
+ dmxScreen = &dmxScreens[physical];
+ attr->displayName = dmxScreen->name;
+#ifdef PANORAMIX
+ attr->logicalScreen = noPanoramiXExtension ? dmxScreen->index : 0;
+#else
+ attr->logicalScreen = dmxScreen->index;
+#endif
+
+ attr->screenWindowWidth = dmxScreen->scrnWidth;
+ attr->screenWindowHeight = dmxScreen->scrnHeight;
+ attr->screenWindowXoffset = dmxScreen->scrnX;
+ attr->screenWindowYoffset = dmxScreen->scrnY;
+
+ attr->rootWindowWidth = dmxScreen->rootWidth;
+ attr->rootWindowHeight = dmxScreen->rootHeight;
+ attr->rootWindowXoffset = dmxScreen->rootX;
+ attr->rootWindowYoffset = dmxScreen->rootY;
+
+ attr->rootWindowXorigin = dmxScreen->rootXOrigin;
+ attr->rootWindowYorigin = dmxScreen->rootYOrigin;
+
+ return TRUE;
+}
+
+/** This routine provides information to the DMX protocol extension
+ * about a particular window. */
+Bool dmxGetWindowAttributes(WindowPtr pWindow, DMXWindowAttributesPtr attr)
+{
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ attr->screen = pWindow->drawable.pScreen->myNum;
+ attr->window = pWinPriv->window;
+
+ attr->pos.x = pWindow->drawable.x;
+ attr->pos.y = pWindow->drawable.y;
+ attr->pos.width = pWindow->drawable.width;
+ attr->pos.height = pWindow->drawable.height;
+
+ if (!pWinPriv->window || pWinPriv->offscreen) {
+ attr->vis.x = 0;
+ attr->vis.y = 0;
+ attr->vis.height = 0;
+ attr->vis.width = 0;
+ return pWinPriv->window ? TRUE : FALSE;
+ }
+
+ /* Compute display-relative coordinates */
+ attr->vis.x = pWindow->drawable.x;
+ attr->vis.y = pWindow->drawable.y;
+ attr->vis.width = pWindow->drawable.width;
+ attr->vis.height = pWindow->drawable.height;
+
+ if (attr->pos.x < 0) {
+ attr->vis.x -= attr->pos.x;
+ attr->vis.width = attr->pos.x + attr->pos.width - attr->vis.x;
+ }
+ if (attr->pos.x + attr->pos.width > pWindow->drawable.pScreen->width) {
+ if (attr->pos.x < 0)
+ attr->vis.width = pWindow->drawable.pScreen->width;
+ else
+ attr->vis.width = pWindow->drawable.pScreen->width - attr->pos.x;
+ }
+ if (attr->pos.y < 0) {
+ attr->vis.y -= attr->pos.y;
+ attr->vis.height = attr->pos.y + attr->pos.height - attr->vis.y;
+ }
+ if (attr->pos.y + attr->pos.height > pWindow->drawable.pScreen->height) {
+ if (attr->pos.y < 0)
+ attr->vis.height = pWindow->drawable.pScreen->height;
+ else
+ attr->vis.height = pWindow->drawable.pScreen->height - attr->pos.y;
+ }
+
+ /* Convert to window-relative coordinates */
+ attr->vis.x -= attr->pos.x;
+ attr->vis.y -= attr->pos.y;
+
+ return TRUE;
+}
+
+void dmxGetDesktopAttributes(DMXDesktopAttributesPtr attr)
+{
+ attr->width = dmxGlobalWidth;
+ attr->height = dmxGlobalHeight;
+ attr->shiftX = 0; /* NOTE: The upper left hand corner of */
+ attr->shiftY = 0; /* the desktop is always <0,0>. */
+}
+
+/** Return the total number of devices, not just #dmxNumInputs. The
+ * number returned should be the same as that returned by
+ * XListInputDevices. */
+int dmxGetInputCount(void)
+{
+ int i, total;
+
+ for (total = i = 0; i < dmxNumInputs; i++) total += dmxInputs[i].numDevs;
+ return total;
+}
+
+/** Return information about the device with id = \a deviceId. This
+ * information is primarily for the #ProcDMXGetInputAttributes()
+ * function, which does not have access to the appropriate data
+ * structure. */
+int dmxGetInputAttributes(int deviceId, DMXInputAttributesPtr attr)
+{
+ int i, j;
+ DMXInputInfo *dmxInput;
+
+ if (deviceId < 0) return -1;
+ for (i = 0; i < dmxNumInputs; i++) {
+ dmxInput = &dmxInputs[i];
+ for (j = 0; j < dmxInput->numDevs; j++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[j];
+ if (deviceId != dmxLocal->pDevice->id) continue;
+ attr->isCore = !!dmxLocal->isCore;
+ attr->sendsCore = !!dmxLocal->sendsCore;
+ attr->detached = !!dmxInput->detached;
+ attr->physicalScreen = -1;
+ attr->physicalId = -1;
+ attr->name = NULL;
+ switch (dmxLocal->extType) {
+ case DMX_LOCAL_TYPE_LOCAL:
+ attr->inputType = 0;
+ break;
+ case DMX_LOCAL_TYPE_CONSOLE:
+ attr->inputType = 1;
+ attr->name = dmxInput->name;
+ attr->physicalId = dmxLocal->deviceId;
+ break;
+ case DMX_LOCAL_TYPE_BACKEND:
+ case DMX_LOCAL_TYPE_COMMON:
+ attr->inputType = 2;
+ attr->physicalScreen = dmxInput->scrnIdx;
+ attr->name = dmxInput->name;
+ attr->physicalId = dmxLocal->deviceId;
+ break;
+ }
+ return 0; /* Success */
+ }
+ }
+ return -1; /* Failure */
+}
+
+/** Reinitialized the cursor boundaries. */
+static void dmxAdjustCursorBoundaries(void)
+{
+ int i;
+
+ dmxReInitOrigins();
+ dmxInitOverlap();
+ dmxComputeWidthHeight(DMX_NO_RECOMPUTE_BOUNDING_BOX);
+ dmxConnectionBlockCallback();
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (!dmxInput->detached) dmxInputReInit(dmxInput);
+ }
+
+ dmxCheckCursor();
+
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (!dmxInput->detached) dmxInputLateReInit(dmxInput);
+ }
+}
+
+/** Add an input with the specified attributes. If the input is added,
+ * the physical id is returned in \a deviceId. */
+int dmxAddInput(DMXInputAttributesPtr attr, int *id)
+{
+ int retcode = BadValue;
+
+ if (attr->inputType == 1) /* console */
+ retcode = dmxInputAttachConsole(attr->name, attr->sendsCore, id);
+ else if (attr->inputType == 2) /* backend */
+ retcode = dmxInputAttachBackend(attr->physicalScreen,
+ attr->sendsCore,id);
+
+ if (retcode == Success) {
+ /* Adjust the cursor boundaries */
+ dmxAdjustCursorBoundaries();
+
+ /* Force completion of the changes */
+ dmxSync(NULL, TRUE);
+ }
+
+ return retcode;
+}
+
+/** Remove the input with physical id \a id. */
+int dmxRemoveInput(int id)
+{
+ return dmxInputDetachId(id);
+}
+
+/** Return the value of #dmxNumScreens -- the total number of backend
+ * screens in use (these are logical screens and may be larger than the
+ * number of backend displays). */
+unsigned long dmxGetNumScreens(void)
+{
+ return dmxNumScreens;
+}
+
+/** Make sure that #dmxCreateAndRealizeWindow has been called for \a
+ * pWindow. */
+void dmxForceWindowCreation(WindowPtr pWindow)
+{
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ if (!pWinPriv->window) dmxCreateAndRealizeWindow(pWindow, TRUE);
+}
+
+/** Flush pending syncs for all screens. */
+void dmxFlushPendingSyncs(void)
+{
+ dmxSync(NULL, TRUE);
+}
+
+/** Update DMX's screen resources to match those of the newly moved
+ * and/or resized "root" window. */
+void dmxUpdateScreenResources(ScreenPtr pScreen, int x, int y, int w, int h)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ WindowPtr pRoot = pScreen->root;
+ WindowPtr pChild;
+ Bool anyMarked = FALSE;
+
+ /* Handle special case where width and/or height are zero */
+ if (w == 0 || h == 0) {
+ w = 1;
+ h = 1;
+ }
+
+ /* Change screen size */
+ pScreen->width = w;
+ pScreen->height = h;
+
+ /* Reset the root window's drawable's size */
+ pRoot->drawable.width = w;
+ pRoot->drawable.height = h;
+
+ /* Set the root window's new winSize and borderSize */
+ pRoot->winSize.extents.x1 = 0;
+ pRoot->winSize.extents.y1 = 0;
+ pRoot->winSize.extents.x2 = w;
+ pRoot->winSize.extents.y2 = h;
+
+ pRoot->borderSize.extents.x1 = 0;
+ pRoot->borderSize.extents.y1 = 0;
+ pRoot->borderSize.extents.x2 = w;
+ pRoot->borderSize.extents.y2 = h;
+
+ /* Recompute this screen's mmWidth & mmHeight */
+ pScreen->mmWidth =
+ (w * 254 + dmxScreen->beXDPI * 5) / (dmxScreen->beXDPI * 10);
+ pScreen->mmHeight =
+ (h * 254 + dmxScreen->beYDPI * 5) / (dmxScreen->beYDPI * 10);
+
+ /* Recompute this screen's window's clip rects as follows: */
+ /* 1. Mark all of root's children's windows */
+ for (pChild = pRoot->firstChild; pChild; pChild = pChild->nextSib)
+ anyMarked |= pScreen->MarkOverlappedWindows(pChild, pChild,
+ (WindowPtr *)NULL);
+
+ /* 2. Set the root window's borderClip */
+ pRoot->borderClip.extents.x1 = 0;
+ pRoot->borderClip.extents.y1 = 0;
+ pRoot->borderClip.extents.x2 = w;
+ pRoot->borderClip.extents.y2 = h;
+
+ /* 3. Set the root window's clipList */
+ if (anyMarked) {
+ /* If any windows have been marked, set the root window's
+ * clipList to be broken since it will be recalculated in
+ * ValidateTree()
+ */
+ RegionBreak(&pRoot->clipList);
+ } else {
+ /* Otherwise, we just set it directly since there are no
+ * windows visible on this screen
+ */
+ pRoot->clipList.extents.x1 = 0;
+ pRoot->clipList.extents.y1 = 0;
+ pRoot->clipList.extents.x2 = w;
+ pRoot->clipList.extents.y2 = h;
+ }
+
+ /* 4. Revalidate all clip rects and generate expose events */
+ if (anyMarked) {
+ pScreen->ValidateTree(pRoot, NULL, VTBroken);
+ pScreen->HandleExposures(pRoot);
+ if (pScreen->PostValidateTree)
+ pScreen->PostValidateTree(pRoot, NULL, VTBroken);
+ }
+}
+
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+
+/** Change the "screen" window attributes by resizing the actual window
+ * on the back-end display (if necessary). */
+static void dmxConfigureScreenWindow(int idx,
+ int x, int y, int w, int h)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ ScreenPtr pScreen = screenInfo.screens[idx];
+
+ /* Resize "screen" window */
+ if (dmxScreen->scrnX != x ||
+ dmxScreen->scrnY != y ||
+ dmxScreen->scrnWidth != w ||
+ dmxScreen->scrnHeight != h) {
+ dmxResizeScreenWindow(pScreen, x, y, w, h);
+ }
+
+ /* Change "screen" window values */
+ dmxScreen->scrnX = x;
+ dmxScreen->scrnY = y;
+ dmxScreen->scrnWidth = w;
+ dmxScreen->scrnHeight = h;
+}
+
+/** Change the "root" window position and size by resizing the actual
+ * window on the back-end display (if necessary) and updating all of
+ * DMX's resources by calling #dmxUpdateScreenResources. */
+static void dmxConfigureRootWindow(int idx, int x, int y, int w, int h)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ WindowPtr pRoot = screenInfo.screens[idx]->root;
+
+ /* NOTE: Either this function or the ones that it calls must handle
+ * the case where w == 0 || h == 0. Currently, the functions that
+ * this one calls handle that case. */
+
+ /* 1. Resize "root" window */
+ if (dmxScreen->rootX != x ||
+ dmxScreen->rootY != y ||
+ dmxScreen->rootWidth != w ||
+ dmxScreen->rootHeight != h) {
+ dmxResizeRootWindow(pRoot, x, y, w, h);
+ }
+
+ /* 2. Update all of the screen's resources associated with this root
+ * window */
+ if (dmxScreen->rootWidth != w ||
+ dmxScreen->rootHeight != h) {
+ dmxUpdateScreenResources(screenInfo.screens[idx], x, y, w, h);
+ }
+
+ /* Change "root" window values */
+ dmxScreen->rootX = x;
+ dmxScreen->rootY = y;
+ dmxScreen->rootWidth = w;
+ dmxScreen->rootHeight = h;
+}
+
+/** Change the "root" window's origin by updating DMX's internal data
+ * structures (dix and Xinerama) to use the new origin and adjust the
+ * positions of windows that overlap this "root" window. */
+static void dmxSetRootWindowOrigin(int idx, int x, int y)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ ScreenPtr pScreen = screenInfo.screens[idx];
+ WindowPtr pRoot = pScreen->root;
+ WindowPtr pChild;
+ int xoff;
+ int yoff;
+
+ /* Change "root" window's origin */
+ dmxScreen->rootXOrigin = x;
+ dmxScreen->rootYOrigin = y;
+
+ /* Compute offsets here in case <x,y> has been changed above */
+ xoff = x - pScreen->x;
+ yoff = y - pScreen->y;
+
+ /* Adjust the root window's position */
+ pScreen->x = dmxScreen->rootXOrigin;
+ pScreen->y = dmxScreen->rootYOrigin;
+
+ /* Recalculate the Xinerama regions and data structs */
+ XineramaReinitData(pScreen);
+
+ /* Adjust each of the root window's children */
+ if (!idx) ReinitializeRootWindow(screenInfo.screens[0]->root, xoff, yoff);
+ pChild = pRoot->firstChild;
+ while (pChild) {
+ /* Adjust child window's position */
+ pScreen->MoveWindow(pChild,
+ pChild->origin.x - wBorderWidth(pChild) - xoff,
+ pChild->origin.y - wBorderWidth(pChild) - yoff,
+ pChild->nextSib,
+ VTMove);
+
+ /* Note that the call to MoveWindow will eventually call
+ * dmxPositionWindow which will automatically create a
+ * window if it is now exposed on screen (for lazy window
+ * creation optimization) and it will properly set the
+ * offscreen flag.
+ */
+
+ pChild = pChild->nextSib;
+ }
+}
+
+/** Configure the attributes of each "screen" and "root" window. */
+int dmxConfigureScreenWindows(int nscreens,
+ CARD32 *screens,
+ DMXScreenAttributesPtr attribs,
+ int *errorScreen)
+{
+ int i;
+
+ for (i = 0; i < nscreens; i++) {
+ DMXScreenAttributesPtr attr = &attribs[i];
+ int idx = screens[i];
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+
+ if (errorScreen) *errorScreen = i;
+
+ if (!dmxScreen->beDisplay) return DMX_BAD_VALUE;
+
+ /* Check for illegal values */
+ if (idx < 0 || idx >= dmxNumScreens) return BadValue;
+
+ /* The "screen" and "root" windows must have valid sizes */
+ if (attr->screenWindowWidth <= 0 || attr->screenWindowHeight <= 0 ||
+ attr->rootWindowWidth < 0 || attr->rootWindowHeight < 0)
+ return DMX_BAD_VALUE;
+
+ /* The "screen" window must fit entirely within the BE display */
+ if (attr->screenWindowXoffset < 0 ||
+ attr->screenWindowYoffset < 0 ||
+ attr->screenWindowXoffset
+ + attr->screenWindowWidth > (unsigned)dmxScreen->beWidth ||
+ attr->screenWindowYoffset
+ + attr->screenWindowHeight > (unsigned)dmxScreen->beHeight)
+ return DMX_BAD_VALUE;
+
+ /* The "root" window must fit entirely within the "screen" window */
+ if (attr->rootWindowXoffset < 0 ||
+ attr->rootWindowYoffset < 0 ||
+ attr->rootWindowXoffset
+ + attr->rootWindowWidth > attr->screenWindowWidth ||
+ attr->rootWindowYoffset
+ + attr->rootWindowHeight > attr->screenWindowHeight)
+ return DMX_BAD_VALUE;
+
+ /* The "root" window must not expose unaddressable coordinates */
+ if (attr->rootWindowXorigin < 0 ||
+ attr->rootWindowYorigin < 0 ||
+ attr->rootWindowXorigin + attr->rootWindowWidth > 32767 ||
+ attr->rootWindowYorigin + attr->rootWindowHeight > 32767)
+ return DMX_BAD_VALUE;
+
+ /* The "root" window must fit within the global bounding box */
+ if (attr->rootWindowXorigin
+ + attr->rootWindowWidth > (unsigned)dmxGlobalWidth ||
+ attr->rootWindowYorigin
+ + attr->rootWindowHeight > (unsigned)dmxGlobalHeight)
+ return DMX_BAD_VALUE;
+
+ /* FIXME: Handle the rest of the illegal value checking */
+ }
+
+ /* No illegal values found */
+ if (errorScreen) *errorScreen = 0;
+
+ for (i = 0; i < nscreens; i++) {
+ DMXScreenAttributesPtr attr = &attribs[i];
+ int idx = screens[i];
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+
+ dmxLog(dmxInfo, "Changing screen #%d attributes "
+ "from %dx%d+%d+%d %dx%d+%d+%d +%d+%d "
+ "to %dx%d+%d+%d %dx%d+%d+%d +%d+%d\n",
+ idx,
+ dmxScreen->scrnWidth, dmxScreen->scrnHeight,
+ dmxScreen->scrnX, dmxScreen->scrnY,
+ dmxScreen->rootWidth, dmxScreen->rootHeight,
+ dmxScreen->rootX, dmxScreen->rootY,
+ dmxScreen->rootXOrigin, dmxScreen->rootYOrigin,
+ attr->screenWindowWidth, attr->screenWindowHeight,
+ attr->screenWindowXoffset, attr->screenWindowYoffset,
+ attr->rootWindowWidth, attr->rootWindowHeight,
+ attr->rootWindowXoffset, attr->rootWindowYoffset,
+ attr->rootWindowXorigin, attr->rootWindowYorigin);
+
+ /* Configure "screen" window */
+ dmxConfigureScreenWindow(idx,
+ attr->screenWindowXoffset,
+ attr->screenWindowYoffset,
+ attr->screenWindowWidth,
+ attr->screenWindowHeight);
+
+ /* Configure "root" window */
+ dmxConfigureRootWindow(idx,
+ attr->rootWindowXoffset,
+ attr->rootWindowYoffset,
+ attr->rootWindowWidth,
+ attr->rootWindowHeight);
+
+
+ /* Set "root" window's origin */
+ dmxSetRootWindowOrigin(idx,
+ attr->rootWindowXorigin,
+ attr->rootWindowYorigin);
+ }
+
+ /* Adjust the cursor boundaries */
+ dmxAdjustCursorBoundaries();
+
+ /* Force completion of the changes */
+ dmxSync(NULL, TRUE);
+
+ return Success;
+}
+
+/** Configure the attributes of the global desktop. */
+int dmxConfigureDesktop(DMXDesktopAttributesPtr attribs)
+{
+ if (attribs->width <= 0 || attribs->width >= 32767 ||
+ attribs->height <= 0 || attribs->height >= 32767)
+ return DMX_BAD_VALUE;
+
+ /* If the desktop is shrinking, adjust the "root" windows on each
+ * "screen" window to only show the visible desktop. Also, handle
+ * the special case where the desktop shrinks such that the it no
+ * longer overlaps an portion of a "screen" window. */
+ if (attribs->width < dmxGlobalWidth || attribs->height < dmxGlobalHeight) {
+ int i;
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ if (dmxScreen->rootXOrigin
+ + dmxScreen->rootWidth > attribs->width ||
+ dmxScreen->rootYOrigin
+ + dmxScreen->rootHeight > attribs->height) {
+ int w, h;
+ if ((w = attribs->width - dmxScreen->rootXOrigin) < 0) w = 0;
+ if ((h = attribs->height - dmxScreen->rootYOrigin) < 0) h = 0;
+ if (w > dmxScreen->scrnWidth) w = dmxScreen->scrnWidth;
+ if (h > dmxScreen->scrnHeight) h = dmxScreen->scrnHeight;
+ if (w > dmxScreen->rootWidth) w = dmxScreen->rootWidth;
+ if (h > dmxScreen->rootHeight) h = dmxScreen->rootHeight;
+ dmxConfigureRootWindow(i,
+ dmxScreen->rootX,
+ dmxScreen->rootY,
+ w, h);
+ }
+ }
+ }
+
+ /* Set the global width/height */
+ dmxSetWidthHeight(attribs->width, attribs->height);
+
+ /* Handle shift[XY] changes */
+ if (attribs->shiftX || attribs->shiftY) {
+ int i;
+ for (i = 0; i < dmxNumScreens; i++) {
+ ScreenPtr pScreen = screenInfo.screens[i];
+ WindowPtr pChild = pScreen->root->firstChild;
+ while (pChild) {
+ /* Adjust child window's position */
+ pScreen->MoveWindow(pChild,
+ pChild->origin.x - wBorderWidth(pChild)
+ - attribs->shiftX,
+ pChild->origin.y - wBorderWidth(pChild)
+ - attribs->shiftY,
+ pChild->nextSib,
+ VTMove);
+
+ /* Note that the call to MoveWindow will eventually call
+ * dmxPositionWindow which will automatically create a
+ * window if it is now exposed on screen (for lazy
+ * window creation optimization) and it will properly
+ * set the offscreen flag.
+ */
+
+ pChild = pChild->nextSib;
+ }
+ }
+ }
+
+ /* Update connection block, Xinerama, etc. -- these appears to
+ * already be handled in dmxConnectionBlockCallback(), which is
+ * called from dmxAdjustCursorBoundaries() [below]. */
+
+ /* Adjust the cursor boundaries */
+ dmxAdjustCursorBoundaries();
+
+ /* Force completion of the changes */
+ dmxSync(NULL, TRUE);
+
+ return Success;
+}
+#endif
+
+/** Create the scratch GCs per depth. */
+static void dmxBECreateScratchGCs(int scrnNum)
+{
+ ScreenPtr pScreen = screenInfo.screens[scrnNum];
+ GCPtr *ppGC = pScreen->GCperDepth;
+ int i;
+
+ for (i = 0; i <= pScreen->numDepths; i++)
+ dmxBECreateGC(pScreen, ppGC[i]);
+}
+
+#ifdef PANORAMIX
+static Bool FoundPixImage;
+
+/** Search the Xinerama XRT_PIXMAP resources for the pixmap that needs
+ * to have its image restored. When it is found, see if there is
+ * another screen with the same image. If so, copy the pixmap image
+ * from the existing screen to the newly created pixmap. */
+static void dmxBERestorePixmapImage(pointer value, XID id, RESTYPE type,
+ pointer p)
+{
+ if ((type & TypeMask) == (XRT_PIXMAP & TypeMask)) {
+ PixmapPtr pDst = (PixmapPtr)p;
+ int idx = pDst->drawable.pScreen->myNum;
+ PanoramiXRes *pXinPix = (PanoramiXRes *)value;
+ PixmapPtr pPix;
+ int i;
+
+ dixLookupResourceByType((pointer*) &pPix, pXinPix->info[idx].id,
+ RT_PIXMAP, NullClient, DixUnknownAccess);
+ if (pPix != pDst) return; /* Not a match.... Next! */
+
+ for (i = 0; i < PanoramiXNumScreens; i++) {
+ PixmapPtr pSrc;
+ dmxPixPrivPtr pSrcPriv = NULL;
+
+ if (i == idx) continue; /* Self replication is bad */
+
+ dixLookupResourceByType((pointer*) &pSrc, pXinPix->info[i].id,
+ RT_PIXMAP, NullClient, DixUnknownAccess);
+ pSrcPriv = DMX_GET_PIXMAP_PRIV(pSrc);
+ if (pSrcPriv->pixmap) {
+ DMXScreenInfo *dmxSrcScreen = &dmxScreens[i];
+ DMXScreenInfo *dmxDstScreen = &dmxScreens[idx];
+ dmxPixPrivPtr pDstPriv = DMX_GET_PIXMAP_PRIV(pDst);
+ XImage *img;
+ int j;
+ XlibGC gc = NULL;
+
+ /* This should never happen, but just in case.... */
+ if (pSrc->drawable.width != pDst->drawable.width ||
+ pSrc->drawable.height != pDst->drawable.height)
+ return;
+
+ /* Copy from src pixmap to dst pixmap */
+ img = XGetImage(dmxSrcScreen->beDisplay,
+ pSrcPriv->pixmap,
+ 0, 0,
+ pSrc->drawable.width, pSrc->drawable.height,
+ -1,
+ ZPixmap);
+
+ for (j = 0; j < dmxDstScreen->beNumPixmapFormats; j++) {
+ if (dmxDstScreen->bePixmapFormats[j].depth == img->depth) {
+ unsigned long m;
+ XGCValues v;
+
+ m = GCFunction | GCPlaneMask | GCClipMask;
+ v.function = GXcopy;
+ v.plane_mask = AllPlanes;
+ v.clip_mask = None;
+
+ gc = XCreateGC(dmxDstScreen->beDisplay,
+ dmxDstScreen->scrnDefDrawables[j],
+ m, &v);
+ break;
+ }
+ }
+
+ if (gc) {
+ XPutImage(dmxDstScreen->beDisplay,
+ pDstPriv->pixmap,
+ gc, img, 0, 0, 0, 0,
+ pDst->drawable.width, pDst->drawable.height);
+ XFreeGC(dmxDstScreen->beDisplay, gc);
+ FoundPixImage = True;
+ } else {
+ dmxLog(dmxWarning, "Could not create GC\n");
+ }
+
+ XDestroyImage(img);
+ return;
+ }
+ }
+ }
+}
+#endif
+
+/** Restore the pixmap image either from another screen or from an image
+ * that was saved when the screen was previously detached. */
+static void dmxBERestorePixmap(PixmapPtr pPixmap)
+{
+#ifdef PANORAMIX
+ int i;
+
+ /* If Xinerama is not active, there's nothing we can do (see comment
+ * in #else below for more info). */
+ if (noPanoramiXExtension) {
+ dmxLog(dmxWarning, "Cannot restore pixmap image\n");
+ return;
+ }
+
+ FoundPixImage = False;
+ for (i = currentMaxClients; --i >= 0; )
+ if (clients[i])
+ FindAllClientResources(clients[i], dmxBERestorePixmapImage,
+ (pointer)pPixmap);
+
+ /* No corresponding pixmap image was found on other screens, so we
+ * need to copy it from the saved image when the screen was detached
+ * (if available). */
+ if (!FoundPixImage) {
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+
+ if (pPixPriv->detachedImage) {
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ XlibGC gc = NULL;
+
+ for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
+ if (dmxScreen->bePixmapFormats[i].depth ==
+ pPixPriv->detachedImage->depth) {
+ unsigned long m;
+ XGCValues v;
+
+ m = GCFunction | GCPlaneMask | GCClipMask;
+ v.function = GXcopy;
+ v.plane_mask = AllPlanes;
+ v.clip_mask = None;
+
+ gc = XCreateGC(dmxScreen->beDisplay,
+ dmxScreen->scrnDefDrawables[i],
+ m, &v);
+ break;
+ }
+ }
+
+ if (gc) {
+ XPutImage(dmxScreen->beDisplay,
+ pPixPriv->pixmap,
+ gc,
+ pPixPriv->detachedImage,
+ 0, 0, 0, 0,
+ pPixmap->drawable.width, pPixmap->drawable.height);
+ XFreeGC(dmxScreen->beDisplay, gc);
+ } else {
+ dmxLog(dmxWarning, "Cannot restore pixmap image\n");
+ }
+
+ XDestroyImage(pPixPriv->detachedImage);
+ pPixPriv->detachedImage = NULL;
+ } else {
+ dmxLog(dmxWarning, "Cannot restore pixmap image\n");
+ }
+ }
+#else
+ /* If Xinerama is not enabled, then there is no other copy of the
+ * pixmap image that we can restore. Saving all pixmap data is not
+ * a feasible option since there is no mechanism for updating pixmap
+ * data when a screen is detached, which means that the data that
+ * was previously saved would most likely be out of date. */
+ dmxLog(dmxWarning, "Cannot restore pixmap image\n");
+ return;
+#endif
+}
+
+/** Create resources on the back-end server. This function is called
+ * from #dmxAttachScreen() via the dix layer's FindAllResources
+ * function. It walks all resources, compares them to the screen
+ * number passed in as \a n and calls the appropriate DMX function to
+ * create the associated resource on the back-end server. */
+static void dmxBECreateResources(pointer value, XID id, RESTYPE type,
+ pointer n)
+{
+ int scrnNum = (uintptr_t)n;
+ ScreenPtr pScreen = screenInfo.screens[scrnNum];
+
+ if ((type & TypeMask) == (RT_WINDOW & TypeMask)) {
+ /* Window resources are created below in dmxBECreateWindowTree */
+ } else if ((type & TypeMask) == (RT_PIXMAP & TypeMask)) {
+ PixmapPtr pPix = value;
+ if (pPix->drawable.pScreen->myNum == scrnNum) {
+ dmxBECreatePixmap(pPix);
+ dmxBERestorePixmap(pPix);
+ }
+ } else if ((type & TypeMask) == (RT_GC & TypeMask)) {
+ GCPtr pGC = value;
+ if (pGC->pScreen->myNum == scrnNum) {
+ /* Create the GC on the back-end server */
+ dmxBECreateGC(pScreen, pGC);
+ /* Create any pixmaps associated with this GC */
+ if (!pGC->tileIsPixel) {
+ dmxBECreatePixmap(pGC->tile.pixmap);
+ dmxBERestorePixmap(pGC->tile.pixmap);
+ }
+ if (pGC->stipple != pScreen->PixmapPerDepth[0]) {
+ dmxBECreatePixmap(pGC->stipple);
+ dmxBERestorePixmap(pGC->stipple);
+ }
+ if (pGC->font != defaultFont) {
+ (void)dmxBELoadFont(pScreen, pGC->font);
+ }
+ /* Update the GC on the back-end server */
+ dmxChangeGC(pGC, -1L);
+ }
+ } else if ((type & TypeMask) == (RT_FONT & TypeMask)) {
+ (void)dmxBELoadFont(pScreen, (FontPtr)value);
+ } else if ((type & TypeMask) == (RT_CURSOR & TypeMask)) {
+ dmxBECreateCursor(pScreen, (CursorPtr)value);
+ } else if ((type & TypeMask) == (RT_COLORMAP & TypeMask)) {
+ ColormapPtr pCmap = value;
+ if (pCmap->pScreen->myNum == scrnNum)
+ (void)dmxBECreateColormap((ColormapPtr)value);
+#if 0
+ /* TODO: Recreate Picture and GlyphSet resources */
+ } else if ((type & TypeMask) == (PictureType & TypeMask)) {
+ /* Picture resources are created when windows are created */
+ } else if ((type & TypeMask) == (GlyphSetType & TypeMask)) {
+ dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value);
+#endif
+ } else {
+ /* Other resource types??? */
+ }
+}
+
+/** Create window hierachy on back-end server. The window tree is
+ * created in a special order (bottom most subwindow first) so that the
+ * #dmxCreateNonRootWindow() function does not need to recursively call
+ * itself to create each window's parents. This is required so that we
+ * have the opportunity to create each window's border and background
+ * pixmaps (where appropriate) before the window is created. */
+static void dmxBECreateWindowTree(int idx)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ WindowPtr pRoot = screenInfo.screens[idx]->root;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pRoot);
+ WindowPtr pWin;
+
+ /* Create the pixmaps associated with the root window */
+ if (!pRoot->borderIsPixel) {
+ dmxBECreatePixmap(pRoot->border.pixmap);
+ dmxBERestorePixmap(pRoot->border.pixmap);
+ }
+ if (pRoot->backgroundState == BackgroundPixmap) {
+ dmxBECreatePixmap(pRoot->background.pixmap);
+ dmxBERestorePixmap(pRoot->background.pixmap);
+ }
+
+ /* Create root window first */
+ dmxScreen->rootWin = pWinPriv->window = dmxCreateRootWindow(pRoot);
+ XMapWindow(dmxScreen->beDisplay, dmxScreen->rootWin);
+
+ pWin = pRoot->lastChild;
+ while (pWin) {
+ pWinPriv = DMX_GET_WINDOW_PRIV(pWin);
+
+ /* Create the pixmaps regardless of whether or not the
+ * window is created or not due to lazy window creation.
+ */
+ if (!pWin->borderIsPixel) {
+ dmxBECreatePixmap(pWin->border.pixmap);
+ dmxBERestorePixmap(pWin->border.pixmap);
+ }
+ if (pWin->backgroundState == BackgroundPixmap) {
+ dmxBECreatePixmap(pWin->background.pixmap);
+ dmxBERestorePixmap(pWin->background.pixmap);
+ }
+
+ /* Reset the window attributes */
+ dmxGetDefaultWindowAttributes(pWin,
+ &pWinPriv->cmap,
+ &pWinPriv->visual);
+
+ /* Create the window */
+ if (pWinPriv->mapped && !pWinPriv->offscreen)
+ dmxCreateAndRealizeWindow(pWin, TRUE);
+
+ /* Next, create the bottom-most child */
+ if (pWin->lastChild) {
+ pWin = pWin->lastChild;
+ continue;
+ }
+
+ /* If the window has no children, move on to the next higher window */
+ while (!pWin->prevSib && (pWin != pRoot))
+ pWin = pWin->parent;
+
+ if (pWin->prevSib) {
+ pWin = pWin->prevSib;
+ continue;
+ }
+
+ /* When we reach the root window, we are finished */
+ if (pWin == pRoot)
+ break;
+ }
+}
+
+/* Refresh screen by generating exposure events for all windows */
+static void dmxForceExposures(int idx)
+{
+ ScreenPtr pScreen = screenInfo.screens[idx];
+ WindowPtr pRoot = pScreen->root;
+ Bool anyMarked = FALSE;
+ WindowPtr pChild;
+
+ for (pChild = pRoot->firstChild; pChild; pChild = pChild->nextSib)
+ anyMarked |= pScreen->MarkOverlappedWindows(pChild, pChild,
+ (WindowPtr *)NULL);
+ if (anyMarked) {
+ /* If any windows have been marked, set the root window's
+ * clipList to be broken since it will be recalculated in
+ * ValidateTree()
+ */
+ RegionBreak(&pRoot->clipList);
+ pScreen->ValidateTree(pRoot, NULL, VTBroken);
+ pScreen->HandleExposures(pRoot);
+ if (pScreen->PostValidateTree)
+ pScreen->PostValidateTree(pRoot, NULL, VTBroken);
+ }
+}
+
+/** Compare the new and old screens to see if they are compatible. */
+static Bool dmxCompareScreens(DMXScreenInfo *new, DMXScreenInfo *old)
+{
+ int i;
+
+ if (new->beWidth != old->beWidth) return FALSE;
+ if (new->beHeight != old->beHeight) return FALSE;
+ if (new->beDepth != old->beDepth) return FALSE;
+ if (new->beBPP != old->beBPP) return FALSE;
+
+ if (new->beNumDepths != old->beNumDepths) return FALSE;
+ for (i = 0; i < old->beNumDepths; i++)
+ if (new->beDepths[i] != old->beDepths[i]) return FALSE;
+
+ if (new->beNumPixmapFormats != old->beNumPixmapFormats) return FALSE;
+ for (i = 0; i < old->beNumPixmapFormats; i++) {
+ if (new->bePixmapFormats[i].depth !=
+ old->bePixmapFormats[i].depth) return FALSE;
+ if (new->bePixmapFormats[i].bits_per_pixel !=
+ old->bePixmapFormats[i].bits_per_pixel) return FALSE;
+ if (new->bePixmapFormats[i].scanline_pad !=
+ old->bePixmapFormats[i].scanline_pad) return FALSE;
+ }
+
+ if (new->beNumVisuals != old->beNumVisuals) return FALSE;
+ for (i = 0; i < old->beNumVisuals; i++) {
+ if (new->beVisuals[i].visualid !=
+ old->beVisuals[i].visualid) return FALSE;
+ if (new->beVisuals[i].screen !=
+ old->beVisuals[i].screen) return FALSE;
+ if (new->beVisuals[i].depth !=
+ old->beVisuals[i].depth) return FALSE;
+ if (new->beVisuals[i].class !=
+ old->beVisuals[i].class) return FALSE;
+ if (new->beVisuals[i].red_mask !=
+ old->beVisuals[i].red_mask) return FALSE;
+ if (new->beVisuals[i].green_mask !=
+ old->beVisuals[i].green_mask) return FALSE;
+ if (new->beVisuals[i].blue_mask !=
+ old->beVisuals[i].blue_mask) return FALSE;
+ if (new->beVisuals[i].colormap_size !=
+ old->beVisuals[i].colormap_size) return FALSE;
+ if (new->beVisuals[i].bits_per_rgb !=
+ old->beVisuals[i].bits_per_rgb) return FALSE;
+ }
+
+ if (new->beDefVisualIndex != old->beDefVisualIndex) return FALSE;
+
+ return TRUE;
+}
+
+/** Restore Render's picture */
+static void dmxBERestoreRenderPict(pointer value, XID id, pointer n)
+{
+ PicturePtr pPicture = value; /* The picture */
+ DrawablePtr pDraw = pPicture->pDrawable; /* The picture's drawable */
+ int scrnNum = (uintptr_t)n;
+
+ if (pDraw->pScreen->myNum != scrnNum) {
+ /* Picture not on the screen we are restoring*/
+ return;
+ }
+
+ if (pDraw->type == DRAWABLE_PIXMAP) {
+ PixmapPtr pPixmap = (PixmapPtr)pDraw;
+
+ /* Create and restore the pixmap drawable */
+ dmxBECreatePixmap(pPixmap);
+ dmxBERestorePixmap(pPixmap);
+ }
+
+ dmxBECreatePicture(pPicture);
+}
+
+/** Restore Render's glyphs */
+static void dmxBERestoreRenderGlyph(pointer value, XID id, pointer n)
+{
+ GlyphSetPtr glyphSet = value;
+ int scrnNum = (uintptr_t)n;
+ dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+ DMXScreenInfo *dmxScreen = &dmxScreens[scrnNum];
+ GlyphRefPtr table;
+ char *images;
+ Glyph *gids;
+ XGlyphInfo *glyphs;
+ char *pos;
+ int beret;
+ int len_images = 0;
+ int i;
+ int ctr;
+
+ if (glyphPriv->glyphSets[scrnNum]) {
+ /* Only restore glyphs on the screen we are attaching */
+ return;
+ }
+
+ /* First we must create the glyph set on the backend. */
+ if ((beret = dmxBECreateGlyphSet(scrnNum, glyphSet)) != Success) {
+ dmxLog(dmxWarning,
+ "\tdmxBERestoreRenderGlyph failed to create glyphset!\n");
+ return;
+ }
+
+ /* Now for the complex part, restore the glyph data */
+ table = glyphSet->hash.table;
+
+ /* We need to know how much memory to allocate for this part */
+ for (i = 0; i < glyphSet->hash.hashSet->size; i++) {
+ GlyphRefPtr gr = &table[i];
+ GlyphPtr gl = gr->glyph;
+
+ if (!gl || gl == DeletedGlyph) continue;
+ len_images += gl->size - sizeof(gl->info);
+ }
+
+ /* Now allocate the memory we need */
+ images = calloc(len_images, sizeof(char));
+ gids = malloc(glyphSet->hash.tableEntries*sizeof(Glyph));
+ glyphs = malloc(glyphSet->hash.tableEntries*sizeof(XGlyphInfo));
+
+ pos = images;
+ ctr = 0;
+
+ /* Fill the allocated memory with the proper data */
+ for (i = 0; i < glyphSet->hash.hashSet->size; i++) {
+ GlyphRefPtr gr = &table[i];
+ GlyphPtr gl = gr->glyph;
+
+ if (!gl || gl == DeletedGlyph) continue;
+
+ /* First lets put the data into gids */
+ gids[ctr] = gr->signature;
+
+ /* Next do the glyphs data structures */
+ glyphs[ctr].width = gl->info.width;
+ glyphs[ctr].height = gl->info.height;
+ glyphs[ctr].x = gl->info.x;
+ glyphs[ctr].y = gl->info.y;
+ glyphs[ctr].xOff = gl->info.xOff;
+ glyphs[ctr].yOff = gl->info.yOff;
+
+ /* Copy the images from the DIX's data into the buffer */
+ memcpy(pos, gl+1, gl->size - sizeof(gl->info));
+ pos += gl->size - sizeof(gl->info);
+ ctr++;
+ }
+
+ /* Now restore the glyph data */
+ XRenderAddGlyphs(dmxScreen->beDisplay, glyphPriv->glyphSets[scrnNum],
+ gids,glyphs, glyphSet->hash.tableEntries, images,
+ len_images);
+
+ /* Clean up */
+ free(images);
+ free(gids);
+ free(glyphs);
+}
+
+/** Reattach previously detached back-end screen. */
+int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr)
+{
+ ScreenPtr pScreen;
+ DMXScreenInfo *dmxScreen;
+ CARD32 scrnNum = idx;
+ DMXScreenInfo oldDMXScreen;
+ int i;
+
+ /* Return failure if dynamic addition/removal of screens is disabled */
+ if (!dmxAddRemoveScreens) {
+ dmxLog(dmxWarning,
+ "Attempting to add a screen, but the AddRemoveScreen\n");
+ dmxLog(dmxWarning,
+ "extension has not been enabled. To enable this extension\n");
+ dmxLog(dmxWarning,
+ "add the \"-addremovescreens\" option either to the command\n");
+ dmxLog(dmxWarning,
+ "line or in the configuration file.\n");
+ return 1;
+ }
+
+ /* Cannot add a screen that does not exist */
+ if (idx < 0 || idx >= dmxNumScreens) return 1;
+ pScreen = screenInfo.screens[idx];
+ dmxScreen = &dmxScreens[idx];
+
+ /* Cannot attach to a screen that is already opened */
+ if (dmxScreen->beDisplay) {
+ dmxLog(dmxWarning,
+ "Attempting to add screen #%d but a screen already exists\n",
+ idx);
+ return 1;
+ }
+
+ dmxLogOutput(dmxScreen, "Attaching screen #%d\n", idx);
+
+ /* Save old info */
+ oldDMXScreen = *dmxScreen;
+
+ /* Copy the name to the new screen */
+ dmxScreen->name = strdup(attr->displayName);
+
+ /* Open display and get all of the screen info */
+ if (!dmxOpenDisplay(dmxScreen)) {
+ dmxLog(dmxWarning,
+ "dmxOpenDisplay: Unable to open display %s\n",
+ dmxScreen->name);
+
+ /* Restore the old screen */
+ *dmxScreen = oldDMXScreen;
+ return 1;
+ }
+
+ dmxSetErrorHandler(dmxScreen);
+ dmxCheckForWM(dmxScreen);
+ dmxGetScreenAttribs(dmxScreen);
+
+ if (!dmxGetVisualInfo(dmxScreen)) {
+ dmxLog(dmxWarning, "dmxGetVisualInfo: No matching visuals found\n");
+ XFree(dmxScreen->beVisuals);
+ XCloseDisplay(dmxScreen->beDisplay);
+
+ /* Restore the old screen */
+ *dmxScreen = oldDMXScreen;
+ return 1;
+ }
+
+ dmxGetColormaps(dmxScreen);
+ dmxGetPixmapFormats(dmxScreen);
+
+ /* Verify that the screen to be added has the same info as the
+ * previously added screen. */
+ if (!dmxCompareScreens(dmxScreen, &oldDMXScreen)) {
+ dmxLog(dmxWarning,
+ "New screen data (%s) does not match previously\n",
+ dmxScreen->name);
+ dmxLog(dmxWarning,
+ "attached screen data (%s)\n",
+ oldDMXScreen.name);
+ dmxLog(dmxWarning,
+ "All data must match in order to attach to screen #%d\n",
+ idx);
+ XFree(dmxScreen->beVisuals);
+ XFree(dmxScreen->beDepths);
+ XFree(dmxScreen->bePixmapFormats);
+ XCloseDisplay(dmxScreen->beDisplay);
+
+ /* Restore the old screen */
+ *dmxScreen = oldDMXScreen;
+ return 1;
+ }
+
+ /* Initialize the BE screen resources */
+ dmxBEScreenInit(idx, screenInfo.screens[idx]);
+
+ /* TODO: Handle GLX visual initialization. GLXProxy needs to be
+ * updated to handle dynamic addition/removal of screens. */
+
+ /* Create default stipple */
+ dmxBECreatePixmap(pScreen->PixmapPerDepth[0]);
+ dmxBERestorePixmap(pScreen->PixmapPerDepth[0]);
+
+ /* Create the scratch GCs */
+ dmxBECreateScratchGCs(idx);
+
+ /* Create the default font */
+ (void)dmxBELoadFont(pScreen, defaultFont);
+
+ /* Create all resources that don't depend on windows */
+ for (i = currentMaxClients; --i >= 0; )
+ if (clients[i])
+ FindAllClientResources(clients[i], dmxBECreateResources,
+ (pointer)(uintptr_t)idx);
+
+ /* Create window hierarchy (top down) */
+ dmxBECreateWindowTree(idx);
+
+ /* Restore the picture state for RENDER */
+ for (i = currentMaxClients; --i >= 0; )
+ if (clients[i])
+ FindClientResourcesByType(clients[i],PictureType,
+ dmxBERestoreRenderPict,
+ (pointer)(uintptr_t)idx);
+
+ /* Restore the glyph state for RENDER */
+ for (i = currentMaxClients; --i >= 0; )
+ if (clients[i])
+ FindClientResourcesByType(clients[i],GlyphSetType,
+ dmxBERestoreRenderGlyph,
+ (pointer)(uintptr_t)idx);
+
+ /* Refresh screen by generating exposure events for all windows */
+ dmxForceExposures(idx);
+
+ dmxSync(&dmxScreens[idx], TRUE);
+
+ /* We used these to compare the old and new screens. They are no
+ * longer needed since we have a newly attached screen, so we can
+ * now free the old screen's resources. */
+ XFree(oldDMXScreen.beVisuals);
+ XFree(oldDMXScreen.beDepths);
+ XFree(oldDMXScreen.bePixmapFormats);
+ /* TODO: should oldDMXScreen.name be freed?? */
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension)
+ return dmxConfigureScreenWindows(1, &scrnNum, attr, NULL);
+ else
+#endif
+ return 0; /* Success */
+}
+
+/*
+ * Resources that may have state on the BE server and need to be freed:
+ *
+ * RT_NONE
+ * RT_WINDOW
+ * RT_PIXMAP
+ * RT_GC
+ * RT_FONT
+ * RT_CURSOR
+ * RT_COLORMAP
+ * RT_CMAPENTRY
+ * RT_OTHERCLIENT
+ * RT_PASSIVEGRAB
+ * XRT_WINDOW
+ * XRT_PIXMAP
+ * XRT_GC
+ * XRT_COLORMAP
+ * XRT_PICTURE
+ * PictureType
+ * PictFormatType
+ * GlyphSetType
+ * ClientType
+ * EventType
+ * RT_INPUTCLIENT
+ * XETrapType
+ * RTCounter
+ * RTAwait
+ * RTAlarmClient
+ * RT_XKBCLIENT
+ * RTContext
+ * TagResType
+ * StalledResType
+ * SecurityAuthorizationResType
+ * RTEventClient
+ * __glXContextRes
+ * __glXClientRes
+ * __glXPixmapRes
+ * __glXWindowRes
+ * __glXPbufferRes
+ */
+
+#ifdef PANORAMIX
+/** Search the Xinerama XRT_PIXMAP resources for the pixmap that needs
+ * to have its image saved. */
+static void dmxBEFindPixmapImage(pointer value, XID id, RESTYPE type,
+ pointer p)
+{
+ if ((type & TypeMask) == (XRT_PIXMAP & TypeMask)) {
+ PixmapPtr pDst = (PixmapPtr)p;
+ int idx = pDst->drawable.pScreen->myNum;
+ PanoramiXRes *pXinPix = (PanoramiXRes *)value;
+ PixmapPtr pPix;
+ int i;
+
+ dixLookupResourceByType((pointer*) &pPix, pXinPix->info[idx].id,
+ RT_PIXMAP, NullClient, DixUnknownAccess);
+ if (pPix != pDst) return; /* Not a match.... Next! */
+
+ for (i = 0; i < PanoramiXNumScreens; i++) {
+ PixmapPtr pSrc;
+ dmxPixPrivPtr pSrcPriv = NULL;
+
+ if (i == idx) continue; /* Self replication is bad */
+
+ dixLookupResourceByType((pointer*) &pSrc, pXinPix->info[i].id,
+ RT_PIXMAP, NullClient, DixUnknownAccess);
+ pSrcPriv = DMX_GET_PIXMAP_PRIV(pSrc);
+ if (pSrcPriv->pixmap) {
+ FoundPixImage = True;
+ return;
+ }
+ }
+ }
+}
+#endif
+
+/** Save the pixmap image only when there is not another screen with
+ * that pixmap from which the image can be read when the screen is
+ * reattached. To do this, we first try to find a pixmap on another
+ * screen corresponding to the one we are trying to save. If we find
+ * one, then we do not need to save the image data since during
+ * reattachment, the image data can be read from that other pixmap.
+ * However, if we do not find one, then we need to save the image data.
+ * The common case for these are for the default stipple and root
+ * tile. */
+static void dmxBESavePixmap(PixmapPtr pPixmap)
+{
+#ifdef PANORAMIX
+ int i;
+
+ /* If Xinerama is not active, there's nothing we can do (see comment
+ * in #else below for more info). */
+ if (noPanoramiXExtension) return;
+
+ FoundPixImage = False;
+ for (i = currentMaxClients; --i >= 0; )
+ if (clients[i])
+ FindAllClientResources(clients[i], dmxBEFindPixmapImage,
+ (pointer)pPixmap);
+
+ /* Save the image only if there is no other screens that have a
+ * pixmap that corresponds to the one we are trying to save. */
+ if (!FoundPixImage) {
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+
+ if (!pPixPriv->detachedImage) {
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+
+ pPixPriv->detachedImage = XGetImage(dmxScreen->beDisplay,
+ pPixPriv->pixmap,
+ 0, 0,
+ pPixmap->drawable.width,
+ pPixmap->drawable.height,
+ -1,
+ ZPixmap);
+ if (!pPixPriv->detachedImage)
+ dmxLog(dmxWarning, "Cannot save pixmap image\n");
+ }
+ }
+#else
+ /* NOTE: The only time there is a pixmap on another screen that
+ * corresponds to the one we are trying to save is when Xinerama is
+ * active. Otherwise, the pixmap image data is only stored on a
+ * single screen, which means that once it is detached, that data is
+ * lost. We could save the data here, but then that would require
+ * us to implement the ability for Xdmx to keep the pixmap up to
+ * date while the screen is detached, which is beyond the scope of
+ * the current project. */
+ return;
+#endif
+}
+
+/** Destroy resources on the back-end server. This function is called
+ * from #dmxDetachScreen() via the dix layer's FindAllResources
+ * function. It walks all resources, compares them to the screen
+ * number passed in as \a n and calls the appropriate DMX function to
+ * free the associated resource on the back-end server. */
+static void dmxBEDestroyResources(pointer value, XID id, RESTYPE type,
+ pointer n)
+{
+ int scrnNum = (uintptr_t)n;
+ ScreenPtr pScreen = screenInfo.screens[scrnNum];
+
+ if ((type & TypeMask) == (RT_WINDOW & TypeMask)) {
+ /* Window resources are destroyed below in dmxBEDestroyWindowTree */
+ } else if ((type & TypeMask) == (RT_PIXMAP & TypeMask)) {
+ PixmapPtr pPix = value;
+ if (pPix->drawable.pScreen->myNum == scrnNum) {
+ dmxBESavePixmap(pPix);
+ dmxBEFreePixmap(pPix);
+ }
+ } else if ((type & TypeMask) == (RT_GC & TypeMask)) {
+ GCPtr pGC = value;
+ if (pGC->pScreen->myNum == scrnNum)
+ dmxBEFreeGC(pGC);
+ } else if ((type & TypeMask) == (RT_FONT & TypeMask)) {
+ dmxBEFreeFont(pScreen, (FontPtr)value);
+ } else if ((type & TypeMask) == (RT_CURSOR & TypeMask)) {
+ dmxBEFreeCursor(pScreen, (CursorPtr)value);
+ } else if ((type & TypeMask) == (RT_COLORMAP & TypeMask)) {
+ ColormapPtr pCmap = value;
+ if (pCmap->pScreen->myNum == scrnNum)
+ dmxBEFreeColormap((ColormapPtr)value);
+ } else if ((type & TypeMask) == (PictureType & TypeMask)) {
+ PicturePtr pPict = value;
+ if (pPict->pDrawable->pScreen->myNum == scrnNum) {
+ /* Free the pixmaps on the backend if needed */
+ if (pPict->pDrawable->type == DRAWABLE_PIXMAP) {
+ PixmapPtr pPixmap = (PixmapPtr)(pPict->pDrawable);
+ dmxBESavePixmap(pPixmap);
+ dmxBEFreePixmap(pPixmap);
+ }
+ dmxBEFreePicture((PicturePtr)value);
+ }
+ } else if ((type & TypeMask) == (GlyphSetType & TypeMask)) {
+ dmxBEFreeGlyphSet(pScreen, (GlyphSetPtr)value);
+ } else {
+ /* Other resource types??? */
+ }
+}
+
+/** Destroy the scratch GCs that are created per depth. */
+static void dmxBEDestroyScratchGCs(int scrnNum)
+{
+ ScreenPtr pScreen = screenInfo.screens[scrnNum];
+ GCPtr *ppGC = pScreen->GCperDepth;
+ int i;
+
+ for (i = 0; i <= pScreen->numDepths; i++)
+ dmxBEFreeGC(ppGC[i]);
+}
+
+/** Destroy window hierachy on back-end server. To ensure that all
+ * XDestroyWindow() calls succeed, they must be performed in a bottom
+ * up order so that windows are not destroyed before their children.
+ * XDestroyWindow(), which is called from #dmxBEDestroyWindow(), will
+ * destroy a window as well as all of it's children. */
+static void dmxBEDestroyWindowTree(int idx)
+{
+ WindowPtr pWin = screenInfo.screens[idx]->root;
+ WindowPtr pChild = pWin;
+
+ while (1) {
+ if (pChild->firstChild) {
+ pChild = pChild->firstChild;
+ continue;
+ }
+
+ /* Destroy the window */
+ dmxBEDestroyWindow(pChild);
+
+ /* Make sure we destroy the window's border and background
+ * pixmaps if they exist */
+ if (!pChild->borderIsPixel) {
+ dmxBESavePixmap(pChild->border.pixmap);
+ dmxBEFreePixmap(pChild->border.pixmap);
+ }
+ if (pChild->backgroundState == BackgroundPixmap) {
+ dmxBESavePixmap(pChild->background.pixmap);
+ dmxBEFreePixmap(pChild->background.pixmap);
+ }
+
+ while (!pChild->nextSib && (pChild != pWin)) {
+ pChild = pChild->parent;
+ dmxBEDestroyWindow(pChild);
+ if (!pChild->borderIsPixel) {
+ dmxBESavePixmap(pChild->border.pixmap);
+ dmxBEFreePixmap(pChild->border.pixmap);
+ }
+ if (pChild->backgroundState == BackgroundPixmap) {
+ dmxBESavePixmap(pChild->background.pixmap);
+ dmxBEFreePixmap(pChild->background.pixmap);
+ }
+ }
+
+ if (pChild == pWin)
+ break;
+
+ pChild = pChild->nextSib;
+ }
+}
+
+/** Detach back-end screen. */
+int dmxDetachScreen(int idx)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ int i;
+
+ /* Return failure if dynamic addition/removal of screens is disabled */
+ if (!dmxAddRemoveScreens) {
+ dmxLog(dmxWarning,
+ "Attempting to remove a screen, but the AddRemoveScreen\n");
+ dmxLog(dmxWarning,
+ "extension has not been enabled. To enable this extension\n");
+ dmxLog(dmxWarning,
+ "add the \"-addremovescreens\" option either to the command\n");
+ dmxLog(dmxWarning,
+ "line or in the configuration file.\n");
+ return 1;
+ }
+
+ /* Cannot remove a screen that does not exist */
+ if (idx < 0 || idx >= dmxNumScreens) return 1;
+
+ /* Cannot detach from a screen that is not opened */
+ if (!dmxScreen->beDisplay) {
+ dmxLog(dmxWarning,
+ "Attempting to remove screen #%d but it has not been opened\n",
+ idx);
+ return 1;
+ }
+
+ dmxLogOutput(dmxScreen, "Detaching screen #%d\n", idx);
+
+ /* Detach input */
+ dmxInputDetachAll(dmxScreen);
+
+ /* Save all relevant state (TODO) */
+
+ /* Free all non-window resources related to this screen */
+ for (i = currentMaxClients; --i >= 0; )
+ if (clients[i])
+ FindAllClientResources(clients[i], dmxBEDestroyResources,
+ (pointer)(uintptr_t)idx);
+
+ /* Free scratch GCs */
+ dmxBEDestroyScratchGCs(idx);
+
+ /* Free window resources related to this screen */
+ dmxBEDestroyWindowTree(idx);
+
+ /* Free default stipple */
+ dmxBESavePixmap(screenInfo.screens[idx]->PixmapPerDepth[0]);
+ dmxBEFreePixmap(screenInfo.screens[idx]->PixmapPerDepth[0]);
+
+ /* Free the remaining screen resources and close the screen */
+ dmxBECloseScreen(screenInfo.screens[idx]);
+
+ /* Adjust the cursor boundaries (paints detached console window) */
+ dmxAdjustCursorBoundaries();
+
+ return 0; /* Success */
+}
diff --git a/hw/dmx/dmxextension.h b/hw/dmx/dmxextension.h
new file mode 100644
index 0000000..5a6fd0e
--- /dev/null
+++ b/hw/dmx/dmxextension.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Author:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for DMX extension support. These routines are called by
+ * function in Xserver/Xext/dmx.c. \see dmxextension.c */
+
+#ifndef _DMXEXTENSION_H_
+#define _DMXEXTENSION_H_
+
+/** Screen attributes. Used by #ProcDMXGetScreenAttributes and
+ * \a ProcDMXChangeScreensAttributes. */
+typedef struct {
+ const char *displayName;
+ int logicalScreen;
+
+ unsigned int screenWindowWidth; /* displayName's coordinate system */
+ unsigned int screenWindowHeight; /* displayName's coordinate system */
+ int screenWindowXoffset; /* displayName's coordinate system */
+ int screenWindowYoffset; /* displayName's coordinate system */
+
+ unsigned int rootWindowWidth; /* screenWindow's coordinate system */
+ unsigned int rootWindowHeight; /* screenWindow's coordinate system */
+ int rootWindowXoffset; /* screenWindow's coordinate system */
+ int rootWindowYoffset; /* screenWindow's coordinate system */
+
+ int rootWindowXorigin; /* global coordinate system */
+ int rootWindowYorigin; /* global coordinate system */
+} DMXScreenAttributesRec, *DMXScreenAttributesPtr;
+
+/** Window attributes. Used by #ProcDMXGetWindowAttributes. */
+typedef struct {
+ int screen;
+ Window window;
+ xRectangle pos;
+ xRectangle vis;
+} DMXWindowAttributesRec, *DMXWindowAttributesPtr;
+
+/** Desktop attributes. Used by #ProcDMXGetDesktopAttributes and
+ * #ProcDMXChangeDesktopAttributes. */
+typedef struct {
+ int width;
+ int height;
+ int shiftX;
+ int shiftY;
+} DMXDesktopAttributesRec, *DMXDesktopAttributesPtr;
+
+/** Input attributes. Used by #ProcDMXGetInputAttributes. */
+typedef struct {
+ const char *name;
+ int inputType;
+ int physicalScreen;
+ int physicalId;
+ int isCore;
+ int sendsCore;
+ int detached;
+} DMXInputAttributesRec, *DMXInputAttributesPtr;
+
+
+extern unsigned long dmxGetNumScreens(void);
+extern void dmxForceWindowCreation(WindowPtr pWindow);
+extern void dmxFlushPendingSyncs(void);
+extern Bool dmxGetScreenAttributes(int physical,
+ DMXScreenAttributesPtr attr);
+extern Bool dmxGetWindowAttributes(WindowPtr pWindow,
+ DMXWindowAttributesPtr attr);
+extern void dmxGetDesktopAttributes(DMXDesktopAttributesPtr attr);
+extern int dmxGetInputCount(void);
+extern int dmxGetInputAttributes(int deviceId,
+ DMXInputAttributesPtr attr);
+extern int dmxAddInput(DMXInputAttributesPtr attr, int *deviceId);
+extern int dmxRemoveInput(int deviceId);
+
+extern int dmxConfigureScreenWindows(int nscreens,
+ CARD32 *screens,
+ DMXScreenAttributesPtr attribs,
+ int *errorScreen);
+
+extern int dmxConfigureDesktop(DMXDesktopAttributesPtr attribs);
+
+/* dmxUpdateScreenResources exposed for dmxCreateWindow in dmxwindow.c */
+extern void dmxUpdateScreenResources(ScreenPtr pScreen,
+ int x, int y, int w, int h);
+
+extern int dmxAttachScreen(int idx, DMXScreenAttributesPtr attr);
+extern int dmxDetachScreen(int idx);
+#endif
diff --git a/hw/dmx/dmxfont.c b/hw/dmx/dmxfont.c
new file mode 100644
index 0000000..34161f2
--- /dev/null
+++ b/hw/dmx/dmxfont.c
@@ -0,0 +1,551 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides support for fonts. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_FONTPATH_DEBUG 0
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxfont.h"
+#include "dmxlog.h"
+
+#include <X11/fonts/fontstruct.h>
+#include "dixfont.h"
+#include "dixstruct.h"
+
+static int (*dmxSaveProcVector[256])(ClientPtr);
+static int dmxFontLastError;
+
+static int dmxFontErrorHandler(Display *dpy, XErrorEvent *ev)
+{
+ dmxFontLastError = ev->error_code;
+
+ return 0;
+}
+
+static char **dmxGetFontPath(int *npaths)
+{
+ char **fp;
+ unsigned char *c, *paths;
+ char *newfp;
+ int len, l, i;
+
+ GetFontPath(serverClient, npaths, &len, &paths);
+
+ newfp = malloc(*npaths + len);
+ c = (unsigned char *)newfp;
+ fp = malloc(*npaths * sizeof(*fp));
+
+ memmove(newfp, paths+1, *npaths + len - 1);
+ l = *paths;
+ for (i = 0; i < *npaths; i++) {
+ fp[i] = (char *)c;
+ c += l;
+ l = *c;
+ *c++ = '\0';
+ }
+
+#if DMX_FONTPATH_DEBUG
+ for (i = 0; i < *npaths; i++)
+ dmxLog(dmxDebug, "FontPath[%d] = %s\n", i, fp[i]);
+#endif
+
+ return fp;
+}
+
+static void dmxFreeFontPath(char **fp)
+{
+ free(fp[0]);
+ free(fp);
+}
+
+static Bool dmxCheckFontPathElement(DMXScreenInfo *dmxScreen, char *fp)
+{
+ int (*oldErrorHandler)(Display *, XErrorEvent *);
+
+ if (!dmxScreen->beDisplay)
+ return TRUE;
+
+ dmxFontLastError = 0;
+ oldErrorHandler = XSetErrorHandler(dmxFontErrorHandler);
+ XSetFontPath(dmxScreen->beDisplay, &fp, 1);
+ dmxSync(dmxScreen, TRUE); /* Must complete before removing handler */
+ XSetErrorHandler(oldErrorHandler);
+
+ return dmxFontLastError == 0;
+}
+
+static int dmxSetFontPath(DMXScreenInfo *dmxScreen)
+{
+ int (*oldErrorHandler)(Display *, XErrorEvent *);
+ char **fp;
+ int result = Success;
+ int npaths;
+
+ if (!dmxScreen->beDisplay)
+ return result;
+
+ fp = dmxGetFontPath(&npaths);
+ if (!fp) return BadAlloc;
+
+ dmxFontLastError = 0;
+ oldErrorHandler = XSetErrorHandler(dmxFontErrorHandler);
+ XSetFontPath(dmxScreen->beDisplay, fp, npaths);
+ dmxSync(dmxScreen, TRUE); /* Must complete before removing handler */
+ XSetErrorHandler(oldErrorHandler);
+
+ if (dmxFontLastError) {
+ result = dmxFontLastError;
+ /* We could set *error here to the offending path, but it is
+ * ignored, so we don't bother figuring out which path is bad.
+ * If we do add this support in the future, we'll need to add
+ * error to the function's argument list.
+ */
+ }
+
+ dmxFreeFontPath(fp);
+
+ return result;
+}
+
+static int dmxCheckFontPath(DMXScreenInfo *dmxScreen, int *error)
+{
+ char **oldFontPath;
+ int nOldPaths;
+ int result = Success;
+
+ if (!dmxScreen->beDisplay)
+ return result;
+
+ /* Save old font path */
+ oldFontPath = XGetFontPath(dmxScreen->beDisplay, &nOldPaths);
+
+ result = dmxSetFontPath(dmxScreen);
+
+ /* Restore old font path */
+ XSetFontPath(dmxScreen->beDisplay, oldFontPath, nOldPaths);
+ XFreeFontPath(oldFontPath);
+ dmxSync(dmxScreen, FALSE);
+
+ return result;
+}
+
+static int dmxProcSetFontPath(ClientPtr client)
+{
+ unsigned char *ptr;
+ unsigned long nbytes, total, n;
+ long nfonts;
+ int i, result;
+ unsigned char *oldFontPath, *tmpFontPath;
+ int nOldPaths;
+ int lenOldPaths;
+ REQUEST(xSetFontPathReq);
+
+ REQUEST_AT_LEAST_SIZE(xSetFontPathReq);
+
+ nbytes = (client->req_len << 2) - sizeof(xSetFontPathReq);
+ total = nbytes;
+ ptr = (unsigned char *)&stuff[1];
+ nfonts = stuff->nFonts;
+
+ while (--nfonts >= 0) {
+ if ((total == 0) || (total < (n = (*ptr + 1))))
+ return BadLength;
+ total -= n;
+ ptr += n;
+ }
+ if (total >= 4)
+ return BadLength;
+
+ GetFontPath(serverClient, &nOldPaths, &lenOldPaths, &tmpFontPath);
+ oldFontPath = malloc(nOldPaths + lenOldPaths);
+ memmove(oldFontPath, tmpFontPath, nOldPaths + lenOldPaths);
+
+ result = SetFontPath(client, stuff->nFonts, (unsigned char *)&stuff[1]);
+ if (!result) {
+ int error = 0;
+ for (i = 0; i < dmxNumScreens; i++)
+ if ((result = dmxCheckFontPath(&dmxScreens[i], &error)))
+ break;
+
+ if (result) {
+ /* Restore old fontpath in the DMX server */
+ SetFontPath(client, nOldPaths, oldFontPath);
+ client->errorValue = error;
+ }
+ }
+
+ free(oldFontPath);
+ return result;
+}
+
+/** Initialize font support. In addition to the screen function call
+ * pointers, DMX also hooks in at the ProcVector[] level. Here the old
+ * ProcVector function pointers are saved and the new ProcVector
+ * function pointers are initialized. */
+void dmxInitFonts(void)
+{
+ int i;
+
+ for (i = 0; i < 256; i++)
+ dmxSaveProcVector[i] = ProcVector[i];
+
+ ProcVector[X_SetFontPath] = dmxProcSetFontPath;
+}
+
+/** Reset font support by restoring the original ProcVector function
+ * pointers. */
+void dmxResetFonts(void)
+{
+ int i;
+
+ for (i = 0; i < 256; i++)
+ ProcVector[i] = dmxSaveProcVector[i];
+}
+
+/** Load the font, \a pFont, on the back-end server associated with \a
+ * pScreen. When a font is loaded, the font path on back-end server is
+ * first initialized to that specified on the command line with the
+ * -fontpath options, and then the font is loaded. */
+Bool dmxBELoadFont(ScreenPtr pScreen, FontPtr pFont)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxFontPrivPtr pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex);
+ const char *name;
+ char **oldFontPath = NULL;
+ int nOldPaths;
+ Atom name_atom, value_atom;
+ int i;
+
+ /* Make sure we have a font private struct to work with */
+ if (!pFontPriv)
+ return FALSE;
+
+ /* Don't load a font over top of itself */
+ if (pFontPriv->font[pScreen->myNum]) {
+ return TRUE; /* Already loaded font */
+ }
+
+ /* Save old font path */
+ oldFontPath = XGetFontPath(dmxScreen->beDisplay, &nOldPaths);
+
+ /* Set the font path for the font about to be loaded on the back-end */
+ if (dmxSetFontPath(dmxScreen)) {
+ char **fp;
+ int npaths;
+ Bool *goodfps;
+
+ /* This could fail only when first starting the X server and
+ * loading the default font. If it fails here, then the default
+ * font path is invalid, no default font path will be set, the
+ * DMX server will fail to load the default font, and it will
+ * exit with an error unless we remove the offending font paths
+ * with the -ignorebadfontpaths command line option.
+ */
+
+ fp = dmxGetFontPath(&npaths);
+ if (!fp) {
+ dmxLog(dmxError,
+ "No default font path set.\n");
+ dmxLog(dmxError,
+ "Please see the Xdmx man page for information on how to\n");
+ dmxLog(dmxError,
+ "initialize the DMX server's default font path.\n");
+ XFreeFontPath(oldFontPath);
+ return FALSE;
+ }
+
+ if (!dmxFontPath)
+ dmxLog(dmxWarning, "No default font path is set.\n");
+
+ goodfps = malloc(npaths * sizeof(*goodfps));
+
+ dmxLog(dmxError,
+ "The DMX server failed to set the following font paths on "
+ "screen #%d:\n", pScreen->myNum);
+
+ for (i = 0; i < npaths; i++)
+ if (!(goodfps[i] = dmxCheckFontPathElement(dmxScreen, fp[i])))
+ dmxLog(dmxError, " %s\n", fp[i]);
+
+ if (dmxIgnoreBadFontPaths) {
+ char *newfp;
+ int newnpaths = 0;
+ int len = 0;
+ int j = 0;
+
+ dmxLog(dmxError,
+ "These font paths will not be used because the "
+ "\"-ignorebadfontpaths\"\n");
+ dmxLog(dmxError,
+ "option is set.\n");
+
+ for (i = 0; i < npaths; i++)
+ if (goodfps[i]) {
+ len += strlen(fp[i]) + 1;
+ newnpaths++;
+ }
+
+ if (!newnpaths) {
+ /* No valid font paths were found */
+ dmxLog(dmxError,
+ "After removing the font paths above, no valid font "
+ "paths were\n");
+ dmxLog(dmxError,
+ "available. Please check that the font paths set on "
+ "the command\n");
+ dmxLog(dmxError,
+ "line or in the configuration file via the "
+ "\"-fontpath\" option\n");
+ dmxLog(dmxError,
+ "are valid on all back-end servers. See the Xdmx man "
+ "page for\n");
+ dmxLog(dmxError,
+ "more information on font paths.\n");
+ dmxFreeFontPath(fp);
+ XFreeFontPath(oldFontPath);
+ free(goodfps);
+ return FALSE;
+ }
+
+ newfp = malloc(len * sizeof(*newfp));
+ for (i = 0; i < npaths; i++) {
+ if (goodfps[i]) {
+ int n = strlen(fp[i]);
+ newfp[j++] = n;
+ strncpy(&newfp[j], fp[i], n);
+ j += n;
+ }
+ }
+
+ if (SetFontPath(serverClient, newnpaths, (unsigned char *)newfp)) {
+ /* Note that this should never happen since all of the
+ * FPEs were previously valid. */
+ dmxLog(dmxError, "Cannot reset the default font path.\n");
+ }
+ } else if (dmxFontPath) {
+ dmxLog(dmxError,
+ "Please remove these font paths from the command line "
+ "or\n");
+ dmxLog(dmxError,
+ "configuration file, or set the \"-ignorebadfontpaths\" "
+ "option to\n");
+ dmxLog(dmxError,
+ "ignore them. For more information on these options, see "
+ "the\n");
+ dmxLog(dmxError,
+ "Xdmx man page.\n");
+ } else {
+ dmxLog(dmxError,
+ "Please specify the font paths that are available on all "
+ "back-end\n");
+ dmxLog(dmxError,
+ "servers with the \"-fontpath\" option, or use the "
+ "\"-ignorebadfontpaths\"\n");
+ dmxLog(dmxError,
+ "to ignore bad defaults. For more information on "
+ "these and other\n");
+ dmxLog(dmxError,
+ "font-path-related options, see the Xdmx man page.\n");
+ }
+
+ if (!dmxIgnoreBadFontPaths ||
+ (dmxIgnoreBadFontPaths && dmxSetFontPath(dmxScreen))) {
+ /* We still have errors so return with error */
+ dmxFreeFontPath(fp);
+ XFreeFontPath(oldFontPath);
+ free(goodfps);
+ return FALSE;
+ }
+ }
+
+ /* Find requested font on back-end server */
+ name_atom = MakeAtom("FONT", 4, TRUE);
+ value_atom = 0L;
+
+ for (i = 0; i < pFont->info.nprops; i++) {
+ if ((Atom)pFont->info.props[i].name == name_atom) {
+ value_atom = pFont->info.props[i].value;
+ break;
+ }
+ }
+ if (!value_atom) return FALSE;
+
+ name = NameForAtom(value_atom);
+ if (!name) return FALSE;
+
+ pFontPriv->font[pScreen->myNum] =
+ XLoadQueryFont(dmxScreen->beDisplay, name);
+
+ /* Restore old font path */
+ XSetFontPath(dmxScreen->beDisplay, oldFontPath, nOldPaths);
+ XFreeFontPath(oldFontPath);
+ dmxSync(dmxScreen, FALSE);
+
+ if (!pFontPriv->font[pScreen->myNum]) return FALSE;
+
+ return TRUE;
+}
+
+/** Realize the font, \a pFont, on the back-end server associated with
+ * \a pScreen. */
+Bool dmxRealizeFont(ScreenPtr pScreen, FontPtr pFont)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxFontPrivPtr pFontPriv;
+
+ if (!(pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex))) {
+ FontSetPrivate(pFont, dmxFontPrivateIndex, NULL);
+ pFontPriv = malloc(sizeof(dmxFontPrivRec));
+ if (!pFontPriv) return FALSE;
+ pFontPriv->font = NULL;
+ MAXSCREENSALLOC(pFontPriv->font);
+ if (!pFontPriv->font) {
+ free(pFontPriv);
+ return FALSE;
+ }
+ pFontPriv->refcnt = 0;
+ }
+
+ FontSetPrivate(pFont, dmxFontPrivateIndex, (pointer)pFontPriv);
+
+ if (dmxScreen->beDisplay) {
+ if (!dmxBELoadFont(pScreen, pFont))
+ return FALSE;
+
+ pFontPriv->refcnt++;
+ } else {
+ pFontPriv->font[pScreen->myNum] = NULL;
+ }
+
+ return TRUE;
+}
+
+/** Free \a pFont on the back-end associated with \a pScreen. */
+Bool dmxBEFreeFont(ScreenPtr pScreen, FontPtr pFont)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxFontPrivPtr pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex);
+
+ if (pFontPriv && pFontPriv->font[pScreen->myNum]) {
+ XFreeFont(dmxScreen->beDisplay, pFontPriv->font[pScreen->myNum]);
+ pFontPriv->font[pScreen->myNum] = NULL;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Unrealize the font, \a pFont, on the back-end server associated with
+ * \a pScreen. */
+Bool dmxUnrealizeFont(ScreenPtr pScreen, FontPtr pFont)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxFontPrivPtr pFontPriv;
+
+ if ((pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex))) {
+ /* In case the font failed to load properly */
+ if (!pFontPriv->refcnt) {
+ MAXSCREENSFREE(pFontPriv->font);
+ free(pFontPriv);
+ FontSetPrivate(pFont, dmxFontPrivateIndex, NULL);
+ } else if (pFontPriv->font[pScreen->myNum]) {
+ if (dmxScreen->beDisplay)
+ dmxBEFreeFont(pScreen, pFont);
+
+ /* The code below is non-obvious, so here's an explanation...
+ *
+ * When creating the default GC, the server opens up the
+ * default font once for each screen, which in turn calls
+ * the RealizeFont function pointer once for each screen.
+ * During this process both dix's font refcnt and DMX's font
+ * refcnt are incremented once for each screen.
+ *
+ * Later, when shutting down the X server, dix shuts down
+ * each screen in reverse order. During this shutdown
+ * procedure, each screen's default GC is freed and then
+ * that screen is closed by calling the CloseScreen function
+ * pointer. screenInfo.numScreens is then decremented after
+ * closing each screen. This procedure means that the dix's
+ * font refcnt for the font used by the default GC's is
+ * decremented once for each screen # greater than 0.
+ * However, since dix's refcnt for the default font is not
+ * yet 0 for each screen greater than 0, no call to the
+ * UnrealizeFont function pointer is made for those screens.
+ * Then, when screen 0 is being closed, dix's font refcnt
+ * for the default GC's font is finally 0 and the font is
+ * unrealized. However, since screenInfo.numScreens has
+ * been decremented already down to 1, only one call to
+ * UnrealizeFont is made (for screen 0). Thus, even though
+ * RealizeFont was called once for each screen,
+ * UnrealizeFont is only called for screen 0.
+ *
+ * This is a bug in dix.
+ *
+ * To avoid the memory leak of pFontPriv for each server
+ * generation, we can also free pFontPriv if the refcnt is
+ * not yet 0 but the # of screens is 1 -- i.e., the case
+ * described in the dix bug above. This is only a temporary
+ * workaround until the bug in dix is solved.
+ *
+ * The other problem is that the font structure allocated by
+ * XLoadQueryFont() above is not freed for screens > 0.
+ * This problem cannot be worked around here since the back-
+ * end displays for screens > 0 have already been closed by
+ * the time this code is called from dix.
+ *
+ * When the bug in dix described above is fixed, then we can
+ * remove the "|| screenInfo.numScreens == 1" code below and
+ * the memory leaks will be eliminated.
+ */
+ if (--pFontPriv->refcnt == 0
+#if 1
+ /* Remove this code when the dix bug is fixed */
+ || screenInfo.numScreens == 1
+#endif
+ ) {
+ MAXSCREENSFREE(pFontPriv->font);
+ free(pFontPriv);
+ FontSetPrivate(pFont, dmxFontPrivateIndex, NULL);
+ }
+ }
+ }
+
+ return TRUE;
+}
diff --git a/hw/dmx/dmxfont.h b/hw/dmx/dmxfont.h
new file mode 100644
index 0000000..086e71b
--- /dev/null
+++ b/hw/dmx/dmxfont.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for font-related functions. \see dmxfont.c */
+
+#ifndef DMXFONT_H
+#define DMXFONT_H
+
+#include <X11/fonts/fontstruct.h>
+
+/** Font private area. */
+typedef struct _dmxFontPriv {
+ int refcnt;
+ XFontStruct **font;
+} dmxFontPrivRec, *dmxFontPrivPtr;
+
+extern void dmxInitFonts(void);
+extern void dmxResetFonts(void);
+
+extern Bool dmxRealizeFont(ScreenPtr pScreen, FontPtr pFont);
+extern Bool dmxUnrealizeFont(ScreenPtr pScreen, FontPtr pFont);
+
+extern Bool dmxBELoadFont(ScreenPtr pScreen, FontPtr pFont);
+extern Bool dmxBEFreeFont(ScreenPtr pScreen, FontPtr pFont);
+
+extern int dmxFontPrivateIndex;
+
+#endif /* DMXFONT_H */
diff --git a/hw/dmx/dmxgc.c b/hw/dmx/dmxgc.c
new file mode 100644
index 0000000..f10f9a0
--- /dev/null
+++ b/hw/dmx/dmxgc.c
@@ -0,0 +1,416 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides support for GCs. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxgc.h"
+#include "dmxgcops.h"
+#include "dmxpixmap.h"
+#include "dmxfont.h"
+
+#include "gcstruct.h"
+#include "pixmapstr.h"
+#include "migc.h"
+
+static GCFuncs dmxGCFuncs = {
+ dmxValidateGC,
+ dmxChangeGC,
+ dmxCopyGC,
+ dmxDestroyGC,
+ dmxChangeClip,
+ dmxDestroyClip,
+ dmxCopyClip,
+};
+
+static GCOps dmxGCOps = {
+ dmxFillSpans,
+ dmxSetSpans,
+ dmxPutImage,
+ dmxCopyArea,
+ dmxCopyPlane,
+ dmxPolyPoint,
+ dmxPolylines,
+ dmxPolySegment,
+ dmxPolyRectangle,
+ dmxPolyArc,
+ dmxFillPolygon,
+ dmxPolyFillRect,
+ dmxPolyFillArc,
+ dmxPolyText8,
+ dmxPolyText16,
+ dmxImageText8,
+ dmxImageText16,
+ dmxImageGlyphBlt,
+ dmxPolyGlyphBlt,
+ dmxPushPixels
+};
+
+/** Initialize the GC on \a pScreen */
+Bool dmxInitGC(ScreenPtr pScreen)
+{
+ if (!dixRegisterPrivateKey(&dmxGCPrivateKeyRec, PRIVATE_GC, sizeof(dmxGCPrivRec)))
+ return FALSE;
+ return TRUE;
+}
+
+/** Create the GC on the back-end server. */
+void dmxBECreateGC(ScreenPtr pScreen, GCPtr pGC)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ int i;
+
+ for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
+ if (pGC->depth == dmxScreen->bePixmapFormats[i].depth) {
+ unsigned long mask;
+ XGCValues gcvals;
+
+ mask = GCGraphicsExposures;
+ gcvals.graphics_exposures = FALSE;
+
+ /* Create GC in the back-end servers */
+ pGCPriv->gc = XCreateGC(dmxScreen->beDisplay,
+ dmxScreen->scrnDefDrawables[i],
+ mask, &gcvals);
+ break;
+ }
+ }
+}
+
+/** Create a graphics context on the back-end server associated /a pGC's
+ * screen. */
+Bool dmxCreateGC(GCPtr pGC)
+{
+ ScreenPtr pScreen = pGC->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Bool ret;
+
+ DMX_UNWRAP(CreateGC, dmxScreen, pScreen);
+ if ((ret = pScreen->CreateGC(pGC))) {
+ /* Save the old funcs */
+ pGCPriv->funcs = pGC->funcs;
+ pGCPriv->ops = NULL;
+
+ pGC->funcs = &dmxGCFuncs;
+
+ if (dmxScreen->beDisplay) {
+ dmxBECreateGC(pScreen, pGC);
+ } else {
+ pGCPriv->gc = NULL;
+ }
+
+ /* Check for "magic special case"
+ * 1. see CreateGC in dix/gc.c for more info
+ * 2. see dmxChangeGC for more info
+ */
+ pGCPriv->msc = (!pGC->tileIsPixel && !pGC->tile.pixmap);
+ }
+ DMX_WRAP(CreateGC, dmxCreateGC, dmxScreen, pScreen);
+
+ return ret;
+}
+
+/** Validate a graphics context, \a pGC, locally in the DMX server and
+ * recompute the composite clip, if necessary. */
+void dmxValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
+{
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+
+ DMX_GC_FUNC_PROLOGUE(pGC);
+#if 0
+ pGC->funcs->ValidateGC(pGC, changes, pDrawable);
+#endif
+
+ if (pDrawable->type == DRAWABLE_WINDOW ||
+ pDrawable->type == DRAWABLE_PIXMAP) {
+ /* Save the old ops, since we're about to change the ops in the
+ * epilogue.
+ */
+ pGCPriv->ops = pGC->ops;
+ } else {
+ pGCPriv->ops = NULL;
+ }
+
+ /* If the client clip is different or moved OR the subwindowMode has
+ * changed OR the window's clip has changed since the last
+ * validation, then we need to recompute the composite clip.
+ */
+ if ((changes & (GCClipXOrigin |
+ GCClipYOrigin |
+ GCClipMask |
+ GCSubwindowMode)) ||
+ (pDrawable->serialNumber !=
+ (pGC->serialNumber & DRAWABLE_SERIAL_BITS))) {
+ miComputeCompositeClip(pGC, pDrawable);
+ }
+
+ DMX_GC_FUNC_EPILOGUE(pGC);
+}
+
+/** Set the values in the graphics context on the back-end server
+ * associated with \a pGC's screen. */
+void dmxChangeGC(GCPtr pGC, unsigned long mask)
+{
+ ScreenPtr pScreen = pGC->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ XGCValues v;
+
+ DMX_GC_FUNC_PROLOGUE(pGC);
+#if 0
+ pGC->funcs->ChangeGC(pGC, mask);
+#endif
+
+ /* Handle "magic special case" from CreateGC */
+ if (pGCPriv->msc) {
+ /* The "magic special case" is used to handle the case where a
+ * foreground pixel is set when the GC is created so that a
+ * "pseudo default-tile" can be created and used in case the
+ * fillstyle was set to FillTiled. This specific case is tested
+ * in xtest (XCreateGC test #3). What has happened in dix by
+ * the time it reaches here is (1) the pGC->tile.pixel has been
+ * set to pGC->fgPixel and pGC->tileIsPixel is set, (2) if a
+ * tile has also been set, then pGC->tileIsPixel is unset and
+ * pGC->tile.pixmap is initialized; else, the default tile is
+ * created and pGC->tileIsPixel is unset and pGC->tile.pixmap is
+ * initialized to the "pseudo default-tile". In either case,
+ * pGC->tile.pixmap is set; however, in the "magic special case"
+ * the mask is not updated to allow us to detect that we should
+ * initialize the GCTile in the back-end server. Thus, we catch
+ * this case in dmxCreateGC and add GCTile to the mask here.
+ * Are there any cases that I've missed?
+ */
+
+ /* Make sure that the tile.pixmap is set, just in case the user
+ * set GCTile in the mask but forgot to set vals.pixmap
+ */
+ if (pGC->tile.pixmap) mask |= GCTile;
+
+ /* This only happens once when the GC is created */
+ pGCPriv->msc = FALSE;
+ }
+
+ /* Update back-end server's gc */
+ if (mask & GCFunction) v.function = pGC->alu;
+ if (mask & GCPlaneMask) v.plane_mask = pGC->planemask;
+ if (mask & GCForeground) v.foreground = pGC->fgPixel;
+ if (mask & GCBackground) v.background = pGC->bgPixel;
+ if (mask & GCLineWidth) v.line_width = pGC->lineWidth;
+ if (mask & GCLineStyle) v.line_style = pGC->lineStyle;
+ if (mask & GCCapStyle) v.cap_style = pGC->capStyle;
+ if (mask & GCJoinStyle) v.join_style = pGC->joinStyle;
+ if (mask & GCFillStyle) v.fill_style = pGC->fillStyle;
+ if (mask & GCFillRule) v.fill_rule = pGC->fillRule;
+ if (mask & GCTile) {
+ if (pGC->tileIsPixel) {
+ mask &= ~GCTile;
+ } else {
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pGC->tile.pixmap);
+ v.tile = (Drawable)pPixPriv->pixmap;
+ }
+ }
+ if (mask & GCStipple) {
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pGC->stipple);
+ v.stipple = (Drawable)pPixPriv->pixmap;
+ }
+ if (mask & GCTileStipXOrigin) v.ts_x_origin = pGC->patOrg.x;
+ if (mask & GCTileStipYOrigin) v.ts_y_origin = pGC->patOrg.y;
+ if (mask & GCFont) {
+ if (dmxScreen->beDisplay) {
+ dmxFontPrivPtr pFontPriv;
+ pFontPriv = FontGetPrivate(pGC->font, dmxFontPrivateIndex);
+ v.font = pFontPriv->font[pScreen->myNum]->fid;
+ } else {
+ mask &= ~GCFont;
+ }
+ }
+ if (mask & GCSubwindowMode) v.subwindow_mode = pGC->subWindowMode;
+
+ /* Graphics exposures are not needed on the back-ends since they can
+ be generated on the front-end thereby saving bandwidth. */
+ if (mask & GCGraphicsExposures) mask &= ~GCGraphicsExposures;
+
+ if (mask & GCClipXOrigin) v.clip_x_origin = pGC->clipOrg.x;
+ if (mask & GCClipYOrigin) v.clip_y_origin = pGC->clipOrg.y;
+ if (mask & GCClipMask) mask &= ~GCClipMask; /* See ChangeClip */
+ if (mask & GCDashOffset) v.dash_offset = pGC->dashOffset;
+ if (mask & GCDashList) {
+ mask &= ~GCDashList;
+ if (dmxScreen->beDisplay)
+ XSetDashes(dmxScreen->beDisplay, pGCPriv->gc,
+ pGC->dashOffset, (char *)pGC->dash,
+ pGC->numInDashList);
+ }
+ if (mask & GCArcMode) v.arc_mode = pGC->arcMode;
+
+ if (mask && dmxScreen->beDisplay) {
+ XChangeGC(dmxScreen->beDisplay, pGCPriv->gc, mask, &v);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_GC_FUNC_EPILOGUE(pGC);
+}
+
+/** Copy \a pGCSrc to \a pGCDst on the back-end server associated with
+ * \a pGCSrc's screen. */
+void dmxCopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)
+{
+ ScreenPtr pScreen = pGCSrc->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCSrcPriv = DMX_GET_GC_PRIV(pGCSrc);
+ dmxGCPrivPtr pGCDstPriv = DMX_GET_GC_PRIV(pGCDst);
+
+ DMX_GC_FUNC_PROLOGUE(pGCDst);
+ pGCDst->funcs->CopyGC(pGCSrc, changes, pGCDst);
+
+ /* Copy the GC on the back-end server */
+ if (dmxScreen->beDisplay)
+ XCopyGC(dmxScreen->beDisplay, pGCSrcPriv->gc, changes, pGCDstPriv->gc);
+
+ DMX_GC_FUNC_EPILOGUE(pGCDst);
+}
+
+/** Free the \a pGC on the back-end server. */
+Bool dmxBEFreeGC(GCPtr pGC)
+{
+ ScreenPtr pScreen = pGC->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+
+ if (pGCPriv->gc) {
+ XFreeGC(dmxScreen->beDisplay, pGCPriv->gc);
+ pGCPriv->gc = NULL;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Destroy the graphics context, \a pGC and free the corresponding GC
+ * on the back-end server. */
+void dmxDestroyGC(GCPtr pGC)
+{
+ ScreenPtr pScreen = pGC->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+
+ DMX_GC_FUNC_PROLOGUE(pGC);
+
+ /* Free the GC on the back-end server */
+ if (dmxScreen->beDisplay)
+ dmxBEFreeGC(pGC);
+
+ pGC->funcs->DestroyGC(pGC);
+ DMX_GC_FUNC_EPILOGUE(pGC);
+}
+
+/** Change the clip rects for a GC. */
+void dmxChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects)
+{
+ ScreenPtr pScreen = pGC->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ XRectangle *pRects;
+ BoxPtr pBox;
+ int i, nRects;
+
+ DMX_GC_FUNC_PROLOGUE(pGC);
+ pGC->funcs->ChangeClip(pGC, type, pvalue, nrects);
+
+ /* Set the client clip on the back-end server */
+ switch (pGC->clientClipType) {
+ case CT_NONE:
+ if (dmxScreen->beDisplay)
+ XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
+ break;
+
+ case CT_REGION:
+ if (dmxScreen->beDisplay) {
+ nRects = RegionNumRects((RegionPtr)pGC->clientClip);
+ pRects = malloc(nRects * sizeof(*pRects));
+ pBox = RegionRects((RegionPtr)pGC->clientClip);
+
+ for (i = 0; i < nRects; i++) {
+ pRects[i].x = pBox[i].x1;
+ pRects[i].y = pBox[i].y1;
+ pRects[i].width = pBox[i].x2 - pBox[i].x1;
+ pRects[i].height = pBox[i].y2 - pBox[i].y1;
+ }
+
+ XSetClipRectangles(dmxScreen->beDisplay, pGCPriv->gc,
+ pGC->clipOrg.x, pGC->clipOrg.y,
+ pRects, nRects, Unsorted);
+
+ free(pRects);
+ }
+ break;
+
+ case CT_PIXMAP:
+ /* Condensed down to REGION in the mi code */
+ break;
+ }
+
+ DMX_GC_FUNC_EPILOGUE(pGC);
+}
+
+/** Destroy a GC's clip rects. */
+void dmxDestroyClip(GCPtr pGC)
+{
+ ScreenPtr pScreen = pGC->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+
+ DMX_GC_FUNC_PROLOGUE(pGC);
+ pGC->funcs->DestroyClip(pGC);
+
+ /* Set the client clip on the back-end server to None */
+ if (dmxScreen->beDisplay)
+ XSetClipMask(dmxScreen->beDisplay, pGCPriv->gc, None);
+
+ DMX_GC_FUNC_EPILOGUE(pGC);
+}
+
+/** Copy a GC's clip rects. */
+void dmxCopyClip(GCPtr pGCDst, GCPtr pGCSrc)
+{
+ DMX_GC_FUNC_PROLOGUE(pGCDst);
+ pGCDst->funcs->CopyClip(pGCDst, pGCSrc);
+ DMX_GC_FUNC_EPILOGUE(pGCDst);
+}
diff --git a/hw/dmx/dmxgc.h b/hw/dmx/dmxgc.h
new file mode 100644
index 0000000..4ff3cd8
--- /dev/null
+++ b/hw/dmx/dmxgc.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for GC support. \see dmxgc.c */
+
+#ifndef DMXGC_H
+#define DMXGC_H
+
+#include "gcstruct.h"
+
+/** GC private area. */
+typedef struct _dmxGCPriv {
+ GCOps *ops;
+ GCFuncs *funcs;
+ XlibGC gc;
+ Bool msc;
+} dmxGCPrivRec, *dmxGCPrivPtr;
+
+
+extern Bool dmxInitGC(ScreenPtr pScreen);
+
+extern Bool dmxCreateGC(GCPtr pGC);
+extern void dmxValidateGC(GCPtr pGC, unsigned long changes,
+ DrawablePtr pDrawable);
+extern void dmxChangeGC(GCPtr pGC, unsigned long mask);
+extern void dmxCopyGC(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst);
+extern void dmxDestroyGC(GCPtr pGC);
+extern void dmxChangeClip(GCPtr pGC, int type, pointer pvalue, int nrects);
+extern void dmxDestroyClip(GCPtr pGC);
+extern void dmxCopyClip(GCPtr pGCDst, GCPtr pGCSrc);
+
+extern void dmxBECreateGC(ScreenPtr pScreen, GCPtr pGC);
+extern Bool dmxBEFreeGC(GCPtr pGC);
+
+/** Get private. */
+#define DMX_GET_GC_PRIV(_pGC) \
+ (dmxGCPrivPtr)dixLookupPrivate(&(_pGC)->devPrivates, dmxGCPrivateKey)
+
+#define DMX_GC_FUNC_PROLOGUE(_pGC) \
+do { \
+ dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \
+ DMX_UNWRAP(funcs, _pGCPriv, (_pGC)); \
+ if (_pGCPriv->ops) \
+ DMX_UNWRAP(ops, _pGCPriv, (_pGC)); \
+} while (0)
+
+#define DMX_GC_FUNC_EPILOGUE(_pGC) \
+do { \
+ dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \
+ DMX_WRAP(funcs, &dmxGCFuncs, _pGCPriv, (_pGC)); \
+ if (_pGCPriv->ops) \
+ DMX_WRAP(ops, &dmxGCOps, _pGCPriv, (_pGC)); \
+} while (0)
+
+#endif /* DMXGC_H */
diff --git a/hw/dmx/dmxgcops.c b/hw/dmx/dmxgcops.c
new file mode 100644
index 0000000..bc8cd9e
--- /dev/null
+++ b/hw/dmx/dmxgcops.c
@@ -0,0 +1,605 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides support for GC operations. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxgc.h"
+#include "dmxgcops.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+
+#include "mi.h"
+#include "gcstruct.h"
+#include "pixmapstr.h"
+#include "dixfontstr.h"
+
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+#endif
+
+#define DMX_GCOPS_SET_DRAWABLE(_pDraw, _draw) \
+do { \
+ if ((_pDraw)->type == DRAWABLE_WINDOW) { \
+ dmxWinPrivPtr pWinPriv = \
+ DMX_GET_WINDOW_PRIV((WindowPtr)(_pDraw)); \
+ (_draw) = (Drawable)pWinPriv->window; \
+ } else { \
+ dmxPixPrivPtr pPixPriv = \
+ DMX_GET_PIXMAP_PRIV((PixmapPtr)(_pDraw)); \
+ (_draw) = (Drawable)pPixPriv->pixmap; \
+ } \
+} while (0)
+
+#define DMX_GCOPS_OFFSCREEN(_pDraw) \
+ (!dmxScreens[(_pDraw)->pScreen->myNum].beDisplay || \
+ (dmxOffScreenOpt && \
+ (_pDraw)->type == DRAWABLE_WINDOW && \
+ (DMX_GET_WINDOW_PRIV((WindowPtr)(_pDraw))->offscreen || \
+ !DMX_GET_WINDOW_PRIV((WindowPtr)(_pDraw))->window)))
+
+/** Fill spans -- this function should never be called. */
+void dmxFillSpans(DrawablePtr pDrawable, GCPtr pGC,
+ int nInit, DDXPointPtr pptInit, int *pwidthInit,
+ int fSorted)
+{
+ /* Error -- this should never happen! */
+}
+
+/** Set spans -- this function should never be called. */
+void dmxSetSpans(DrawablePtr pDrawable, GCPtr pGC,
+ char *psrc, DDXPointPtr ppt, int *pwidth, int nspans,
+ int fSorted)
+{
+ /* Error -- this should never happen! */
+}
+
+/** Transfer \a pBits image to back-end server associated with \a
+ * pDrawable's screen. If primitive subdivision optimization is
+ * enabled, then only transfer the sections of \a pBits that are
+ * visible (i.e., not-clipped) to the back-end server. */
+void dmxPutImage(DrawablePtr pDrawable, GCPtr pGC,
+ int depth, int x, int y, int w, int h,
+ int leftPad, int format, char *pBits)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ XImage *img;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ img = XCreateImage(dmxScreen->beDisplay,
+ dmxScreen->beVisuals[dmxScreen->beDefVisualIndex].visual,
+ depth, format, leftPad, pBits, w, h,
+ BitmapPad(dmxScreen->beDisplay),
+ (format == ZPixmap) ?
+ PixmapBytePad(w, depth) : BitmapBytePad(w+leftPad));
+
+ if (img) {
+ Drawable draw;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ if (dmxSubdividePrimitives && pGC->pCompositeClip) {
+ RegionPtr pSubImages;
+ RegionPtr pClip;
+ BoxRec box;
+ BoxPtr pBox;
+ int nBox;
+
+ box.x1 = x;
+ box.y1 = y;
+ box.x2 = x + w;
+ box.y2 = y + h;
+ pSubImages = RegionCreate(&box, 1);
+
+ pClip = RegionCreate(NullBox, 1);
+ RegionCopy(pClip, pGC->pCompositeClip);
+ RegionTranslate(pClip,
+ -pDrawable->x, -pDrawable->y);
+ RegionIntersect(pSubImages, pSubImages, pClip);
+
+ nBox = RegionNumRects(pSubImages);
+ pBox = RegionRects(pSubImages);
+
+ while (nBox--) {
+ XPutImage(dmxScreen->beDisplay, draw, pGCPriv->gc, img,
+ pBox->x1 - box.x1,
+ pBox->y1 - box.y1,
+ pBox->x1,
+ pBox->y1,
+ pBox->x2 - pBox->x1,
+ pBox->y2 - pBox->y1);
+ pBox++;
+ }
+ RegionDestroy(pClip);
+ RegionDestroy(pSubImages);
+ } else {
+ XPutImage(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ img, 0, 0, x, y, w, h);
+ }
+ XFree(img); /* Use XFree instead of XDestroyImage
+ * because pBits is passed in from the
+ * caller. */
+
+ dmxSync(dmxScreen, FALSE);
+ } else {
+ /* Error -- this should not happen! */
+ }
+}
+
+/** Copy area from \a pSrc drawable to \a pDst drawable on the back-end
+ * server associated with \a pSrc drawable's screen. If the offscreen
+ * optimization is enabled, only copy when both \a pSrc and \a pDst are
+ * at least partially visible. */
+RegionPtr dmxCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
+ int srcx, int srcy, int w, int h, int dstx, int dsty)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pSrc->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable srcDraw, dstDraw;
+
+ if (DMX_GCOPS_OFFSCREEN(pSrc) || DMX_GCOPS_OFFSCREEN(pDst))
+ return miHandleExposures(pSrc, pDst, pGC, srcx, srcy, w, h,
+ dstx, dsty, 0L);
+
+ DMX_GCOPS_SET_DRAWABLE(pSrc, srcDraw);
+ DMX_GCOPS_SET_DRAWABLE(pDst, dstDraw);
+
+ XCopyArea(dmxScreen->beDisplay, srcDraw, dstDraw, pGCPriv->gc,
+ srcx, srcy, w, h, dstx, dsty);
+ dmxSync(dmxScreen, FALSE);
+
+ return miHandleExposures(pSrc, pDst, pGC, srcx, srcy, w, h,
+ dstx, dsty, 0L);
+}
+
+/** Copy plane number \a bitPlane from \a pSrc drawable to \a pDst
+ * drawable on the back-end server associated with \a pSrc drawable's
+ * screen. If the offscreen optimization is enabled, only copy when
+ * both \a pSrc and \a pDst are at least partially visible. */
+RegionPtr dmxCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
+ int srcx, int srcy, int width, int height,
+ int dstx, int dsty, unsigned long bitPlane)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pSrc->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable srcDraw, dstDraw;
+
+ if (DMX_GCOPS_OFFSCREEN(pSrc) || DMX_GCOPS_OFFSCREEN(pDst))
+ return miHandleExposures(pSrc, pDst, pGC, srcx, srcy, width, height,
+ dstx, dsty, bitPlane);
+
+ DMX_GCOPS_SET_DRAWABLE(pSrc, srcDraw);
+ DMX_GCOPS_SET_DRAWABLE(pDst, dstDraw);
+
+ XCopyPlane(dmxScreen->beDisplay, srcDraw, dstDraw, pGCPriv->gc,
+ srcx, srcy, width, height, dstx, dsty, bitPlane);
+ dmxSync(dmxScreen, FALSE);
+
+ return miHandleExposures(pSrc, pDst, pGC, srcx, srcy, width, height,
+ dstx, dsty, bitPlane);
+}
+
+/** Render list of points, \a pptInit in \a pDrawable on the back-end
+ * server associated with \a pDrawable's screen. If the offscreen
+ * optimization is enabled, only draw when \a pDrawable is at least
+ * partially visible. */
+void dmxPolyPoint(DrawablePtr pDrawable, GCPtr pGC,
+ int mode, int npt, DDXPointPtr pptInit)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawPoints(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XPoint *)pptInit, npt, mode);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render list of connected lines, \a pptInit in \a pDrawable on the
+ * back-end server associated with \a pDrawable's screen. If the
+ * offscreen optimization is enabled, only draw when \a pDrawable is at
+ * least partially visible. */
+void dmxPolylines(DrawablePtr pDrawable, GCPtr pGC,
+ int mode, int npt, DDXPointPtr pptInit)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawLines(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XPoint *)pptInit, npt, mode);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render list of disjoint segments, \a pSegs in \a pDrawable on the
+ * back-end server associated with \a pDrawable's screen. If the
+ * offscreen optimization is enabled, only draw when \a pDrawable is at
+ * least partially visible. */
+void dmxPolySegment(DrawablePtr pDrawable, GCPtr pGC,
+ int nseg, xSegment *pSegs)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawSegments(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XSegment *)pSegs, nseg);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render list of rectangle outlines, \a pRects in \a pDrawable on the
+ * back-end server associated with \a pDrawable's screen. If the
+ * offscreen optimization is enabled, only draw when \a pDrawable is at
+ * least partially visible. */
+void dmxPolyRectangle(DrawablePtr pDrawable, GCPtr pGC,
+ int nrects, xRectangle *pRects)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawRectangles(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XRectangle *)pRects, nrects);
+
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render list of arc outlines, \a parcs in \a pDrawable on the
+ * back-end server associated with \a pDrawable's screen. If the
+ * offscreen optimization is enabled, only draw when \a pDrawable is at
+ * least partially visible. */
+void dmxPolyArc(DrawablePtr pDrawable, GCPtr pGC,
+ int narcs, xArc *parcs)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawArcs(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XArc *)parcs, narcs);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render a filled polygons in \a pDrawable on the back-end server
+ * associated with \a pDrawable's screen. If the offscreen
+ * optimization is enabled, only draw when \a pDrawable is at least
+ * partially visible. */
+void dmxFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
+ int shape, int mode, int count, DDXPointPtr pPts)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XFillPolygon(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XPoint *)pPts, count, shape, mode);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render list of filled rectangles, \a prectInit in \a pDrawable on
+ * the back-end server associated with \a pDrawable's screen. If the
+ * offscreen optimization is enabled, only draw when \a pDrawable is at
+ * least partially visible. */
+void dmxPolyFillRect(DrawablePtr pDrawable, GCPtr pGC,
+ int nrectFill, xRectangle *prectInit)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XFillRectangles(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XRectangle *)prectInit, nrectFill);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render list of filled arcs, \a parcs in \a pDrawable on the back-end
+ * server associated with \a pDrawable's screen. If the offscreen
+ * optimization is enabled, only draw when \a pDrawable is at least
+ * partially visible. */
+void dmxPolyFillArc(DrawablePtr pDrawable, GCPtr pGC,
+ int narcs, xArc *parcs)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XFillArcs(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ (XArc *)parcs, narcs);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render string of 8-bit \a chars (foreground only) in \a pDrawable on
+ * the back-end server associated with \a pDrawable's screen. If the
+ * offscreen optimization is enabled, only draw when \a pDrawable is at
+ * least partially visible. */
+int dmxPolyText8(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, char *chars)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ unsigned long n, i;
+ int w;
+ CharInfoPtr charinfo[255];
+ Drawable draw;
+
+ GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)chars,
+ Linear8Bit, &n, charinfo);
+
+ /* Calculate text width */
+ w = 0;
+ for (i = 0; i < n; i++) w += charinfo[i]->metrics.characterWidth;
+
+ if (n != 0 && !DMX_GCOPS_OFFSCREEN(pDrawable)) {
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawString(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ x, y, chars, count);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ return x+w;
+}
+
+/** Render string of 16-bit \a chars (foreground only) in \a pDrawable
+ * on the back-end server associated with \a pDrawable's screen. If
+ * the offscreen optimization is enabled, only draw when \a pDrawable
+ * is at least partially visible. */
+int dmxPolyText16(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, unsigned short *chars)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ unsigned long n, i;
+ int w;
+ CharInfoPtr charinfo[255];
+ Drawable draw;
+
+ GetGlyphs(pGC->font, (unsigned long)count, (unsigned char *)chars,
+ (FONTLASTROW(pGC->font) == 0) ? Linear16Bit : TwoD16Bit,
+ &n, charinfo);
+
+ /* Calculate text width */
+ w = 0;
+ for (i = 0; i < n; i++) w += charinfo[i]->metrics.characterWidth;
+
+ if (n != 0 && !DMX_GCOPS_OFFSCREEN(pDrawable)) {
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawString16(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ x, y, (XChar2b *)chars, count);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ return x+w;
+}
+
+/** Render string of 8-bit \a chars (both foreground and background) in
+ * \a pDrawable on the back-end server associated with \a pDrawable's
+ * screen. If the offscreen optimization is enabled, only draw when \a
+ * pDrawable is at least partially visible. */
+void dmxImageText8(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, char *chars)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawImageString(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ x, y, chars, count);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Render string of 16-bit \a chars (both foreground and background) in
+ * \a pDrawable on the back-end server associated with \a pDrawable's
+ * screen. If the offscreen optimization is enabled, only draw when \a
+ * pDrawable is at least partially visible. */
+void dmxImageText16(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, unsigned short *chars)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(pGC);
+ Drawable draw;
+
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) return;
+
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+
+ XDrawImageString16(dmxScreen->beDisplay, draw, pGCPriv->gc,
+ x, y, (XChar2b *)chars, count);
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Image Glyph Blt -- this function should never be called. */
+void dmxImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, unsigned int nglyph,
+ CharInfoPtr *ppci, pointer pglyphBase)
+{
+ /* Error -- this should never happen! */
+}
+
+/** Poly Glyph Blt -- this function should never be called. */
+void dmxPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, unsigned int nglyph,
+ CharInfoPtr *ppci, pointer pglyphBase)
+{
+ /* Error -- this should never happen! */
+}
+
+/** Push Pixels -- this function should never be called. */
+void dmxPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
+ int w, int h, int x, int y)
+{
+ /* Error -- this should never happen! */
+}
+
+/**********************************************************************
+ * Miscellaneous drawing commands
+ */
+
+/** When Xinerama is active, the client pixmaps are always obtained from
+ * screen 0. When screen 0 is detached, the pixmaps must be obtained
+ * from any other screen that is not detached. Usually, this is screen
+ * 1. */
+static DMXScreenInfo *dmxFindAlternatePixmap(DrawablePtr pDrawable, XID *draw)
+{
+#ifdef PANORAMIX
+ PanoramiXRes *pXinPix;
+ int i;
+ DMXScreenInfo *dmxScreen;
+
+ if (noPanoramiXExtension) return NULL;
+ if (pDrawable->type != DRAWABLE_PIXMAP) return NULL;
+
+ if (Success != dixLookupResourceByType((pointer*) &pXinPix,
+ pDrawable->id, XRT_PIXMAP,
+ NullClient, DixUnknownAccess))
+ return NULL;
+
+ for (i = 1; i < PanoramiXNumScreens; i++) {
+ dmxScreen = &dmxScreens[i];
+ if (dmxScreen->beDisplay) {
+ PixmapPtr pSrc;
+ dmxPixPrivPtr pSrcPriv;
+
+ dixLookupResourceByType((pointer*) &pSrc, pXinPix->info[i].id,
+ RT_PIXMAP, NullClient, DixUnknownAccess);
+ pSrcPriv = DMX_GET_PIXMAP_PRIV(pSrc);
+ if (pSrcPriv->pixmap) {
+ *draw = pSrcPriv->pixmap;
+ return dmxScreen;
+ }
+ }
+ }
+#endif
+ return NULL;
+}
+
+/** Get an image from the back-end server associated with \a pDrawable's
+ * screen. If \a pDrawable is a window, it must be viewable to get an
+ * image from it. If it is not viewable, then get the image from the
+ * first ancestor of \a pDrawable that is viewable. If no viewable
+ * ancestor is found, then simply return without getting an image. */
+void dmxGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h,
+ unsigned int format, unsigned long planeMask, char *pdstLine)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pDrawable->pScreen->myNum];
+ XImage *img;
+ Drawable draw;
+
+ /* Cannot get image from unviewable window */
+ if (pDrawable->type == DRAWABLE_WINDOW) {
+ WindowPtr pWindow = (WindowPtr)pDrawable;
+ if (!pWindow->viewable) {
+ while (!pWindow->viewable && pWindow->parent) {
+ sx += pWindow->origin.x - wBorderWidth(pWindow);
+ sx += pWindow->origin.y - wBorderWidth(pWindow);
+ pWindow = pWindow->parent;
+ }
+ if (!pWindow->viewable) {
+ return;
+ }
+ }
+ DMX_GCOPS_SET_DRAWABLE(&pWindow->drawable, draw);
+ if (DMX_GCOPS_OFFSCREEN(&pWindow->drawable))
+ return;
+ } else {
+ DMX_GCOPS_SET_DRAWABLE(pDrawable, draw);
+ if (DMX_GCOPS_OFFSCREEN(pDrawable)) {
+ /* Try to find the pixmap on a non-detached Xinerama screen */
+ dmxScreen = dmxFindAlternatePixmap(pDrawable, &draw);
+ if (!dmxScreen) return;
+ }
+ }
+
+ img = XGetImage(dmxScreen->beDisplay, draw,
+ sx, sy, w, h, planeMask, format);
+ if (img) {
+ int len = img->bytes_per_line * img->height;
+ memmove(pdstLine, img->data, len);
+ XDestroyImage(img);
+ }
+
+ dmxSync(dmxScreen, FALSE);
+}
+
+/** Get Spans -- this function should never be called. */
+void dmxGetSpans(DrawablePtr pDrawable, int wMax,
+ DDXPointPtr ppt, int *pwidth, int nspans,
+ char *pdstStart)
+{
+ /* Error -- this should never happen! */
+}
diff --git a/hw/dmx/dmxgcops.h b/hw/dmx/dmxgcops.h
new file mode 100644
index 0000000..da14d4d
--- /dev/null
+++ b/hw/dmx/dmxgcops.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for gcops support. \see dmxgcops.c */
+
+#ifndef DMXGCOPS_H
+#define DMXGCOPS_H
+
+extern void dmxFillSpans(DrawablePtr pDrawable, GCPtr pGC,
+ int nInit, DDXPointPtr pptInit, int *pwidthInit,
+ int fSorted);
+extern void dmxSetSpans(DrawablePtr pDrawable, GCPtr pGC,
+ char *psrc, DDXPointPtr ppt, int *pwidth, int nspans,
+ int fSorted);
+extern void dmxPutImage(DrawablePtr pDrawable, GCPtr pGC,
+ int depth, int x, int y, int w, int h,
+ int leftPad, int format, char *pBits);
+extern RegionPtr dmxCopyArea(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
+ int srcx, int srcy, int w, int h,
+ int dstx, int dsty);
+extern RegionPtr dmxCopyPlane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
+ int srcx, int srcy, int width, int height,
+ int dstx, int dsty, unsigned long bitPlane);
+extern void dmxPolyPoint(DrawablePtr pDrawable, GCPtr pGC,
+ int mode, int npt, DDXPointPtr pptInit);
+extern void dmxPolylines(DrawablePtr pDrawable, GCPtr pGC,
+ int mode, int npt, DDXPointPtr pptInit);
+extern void dmxPolySegment(DrawablePtr pDrawable, GCPtr pGC,
+ int nseg, xSegment *pSegs);
+extern void dmxPolyRectangle(DrawablePtr pDrawable, GCPtr pGC,
+ int nrects, xRectangle *pRects);
+extern void dmxPolyArc(DrawablePtr pDrawable, GCPtr pGC,
+ int narcs, xArc *parcs);
+extern void dmxFillPolygon(DrawablePtr pDrawable, GCPtr pGC,
+ int shape, int mode, int count, DDXPointPtr pPts);
+extern void dmxPolyFillRect(DrawablePtr pDrawable, GCPtr pGC,
+ int nrectFill, xRectangle *prectInit);
+extern void dmxPolyFillArc(DrawablePtr pDrawable, GCPtr pGC,
+ int narcs, xArc *parcs);
+extern int dmxPolyText8(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, char *chars);
+extern int dmxPolyText16(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, unsigned short *chars);
+extern void dmxImageText8(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, char *chars);
+extern void dmxImageText16(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, int count, unsigned short *chars);
+extern void dmxImageGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, unsigned int nglyph,
+ CharInfoPtr *ppci, pointer pglyphBase);
+extern void dmxPolyGlyphBlt(DrawablePtr pDrawable, GCPtr pGC,
+ int x, int y, unsigned int nglyph,
+ CharInfoPtr *ppci, pointer pglyphBase);
+extern void dmxPushPixels(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
+ int w, int h, int x, int y);
+
+extern void dmxGetImage(DrawablePtr pDrawable, int sx, int sy, int w, int h,
+ unsigned int format, unsigned long planeMask,
+ char *pdstLine);
+extern void dmxGetSpans(DrawablePtr pDrawable, int wMax,
+ DDXPointPtr ppt, int *pwidth, int nspans,
+ char *pdstStart);
+
+#endif /* DMXGCOPS_H */
diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
new file mode 100644
index 0000000..74b3582
--- /dev/null
+++ b/hw/dmx/dmxinit.c
@@ -0,0 +1,1028 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * David H. Dawes <dawes@xfree86.org>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide expected functions for initialization from the ddx layer and
+ * global variables for the DMX server. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxinit.h"
+#include "dmxsync.h"
+#include "dmxlog.h"
+#include "dmxinput.h"
+#include "dmxscrinit.h"
+#include "dmxcursor.h"
+#include "dmxfont.h"
+#include "config/dmxconfig.h"
+#include "dmxcb.h"
+#include "dmxprop.h"
+#include "dmxstat.h"
+#include "dmxpict.h"
+
+#include <X11/Xos.h> /* For gettimeofday */
+#include "dixstruct.h"
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+#endif
+
+#include <signal.h> /* For SIGQUIT */
+
+#ifdef GLXEXT
+#include <GL/glx.h>
+#include <GL/glxint.h>
+#include "dmx_glxvisuals.h"
+#include <X11/extensions/Xext.h>
+#include <X11/extensions/extutil.h>
+#endif /* GLXEXT */
+
+/* Global variables available to all Xserver/hw/dmx routines. */
+int dmxNumScreens;
+DMXScreenInfo *dmxScreens;
+
+int dmxNumInputs;
+DMXInputInfo *dmxInputs;
+
+int dmxShadowFB = FALSE;
+
+XErrorEvent dmxLastErrorEvent;
+Bool dmxErrorOccurred = FALSE;
+
+char *dmxFontPath = NULL;
+
+Bool dmxOffScreenOpt = TRUE;
+
+Bool dmxSubdividePrimitives = TRUE;
+
+Bool dmxLazyWindowCreation = TRUE;
+
+Bool dmxUseXKB = TRUE;
+
+int dmxDepth = 0;
+
+#ifndef GLXEXT
+static Bool dmxGLXProxy = FALSE;
+#else
+Bool dmxGLXProxy = TRUE;
+
+Bool dmxGLXSwapGroupSupport = TRUE;
+
+Bool dmxGLXSyncSwap = FALSE;
+
+Bool dmxGLXFinishSwap = FALSE;
+#endif
+
+Bool dmxIgnoreBadFontPaths = FALSE;
+
+Bool dmxAddRemoveScreens = FALSE;
+
+/* dmxErrorHandler catches errors that occur when calling one of the
+ * back-end servers. Some of this code is based on _XPrintDefaultError
+ * in xc/lib/X11/XlibInt.c */
+static int dmxErrorHandler(Display *dpy, XErrorEvent *ev)
+{
+#define DMX_ERROR_BUF_SIZE 256
+ /* RATS: these buffers are only used in
+ * length-limited calls. */
+ char buf[DMX_ERROR_BUF_SIZE];
+ char request[DMX_ERROR_BUF_SIZE];
+ _XExtension *ext = NULL;
+
+ dmxErrorOccurred = TRUE;
+ dmxLastErrorEvent = *ev;
+
+ XGetErrorText(dpy, ev->error_code, buf, sizeof(buf));
+ dmxLog(dmxWarning, "dmxErrorHandler: %s\n", buf);
+
+ /* Find major opcode name */
+ if (ev->request_code < 128) {
+ XmuSnprintf(request, sizeof(request), "%d", ev->request_code);
+ XGetErrorDatabaseText(dpy, "XRequest", request, "", buf, sizeof(buf));
+ } else {
+ for (ext = dpy->ext_procs;
+ ext && ext->codes.major_opcode != ev->request_code;
+ ext = ext->next);
+ if (ext) strncpy(buf, ext->name, sizeof(buf));
+ else buf[0] = '\0';
+ }
+ dmxLog(dmxWarning, " Major opcode: %d (%s)\n",
+ ev->request_code, buf);
+
+ /* Find minor opcode name */
+ if (ev->request_code >= 128 && ext) {
+ XmuSnprintf(request, sizeof(request), "%d", ev->request_code);
+ XmuSnprintf(request, sizeof(request), "%s.%d",
+ ext->name, ev->minor_code);
+ XGetErrorDatabaseText(dpy, "XRequest", request, "", buf, sizeof(buf));
+ dmxLog(dmxWarning, " Minor opcode: %d (%s)\n",
+ ev->minor_code, buf);
+ }
+
+ /* Provide value information */
+ switch (ev->error_code) {
+ case BadValue:
+ dmxLog(dmxWarning, " Value: 0x%x\n",
+ ev->resourceid);
+ break;
+ case BadAtom:
+ dmxLog(dmxWarning, " AtomID: 0x%x\n",
+ ev->resourceid);
+ break;
+ default:
+ dmxLog(dmxWarning, " ResourceID: 0x%x\n",
+ ev->resourceid);
+ break;
+ }
+
+ /* Provide serial number information */
+ dmxLog(dmxWarning, " Failed serial number: %d\n",
+ ev->serial);
+ dmxLog(dmxWarning, " Current serial number: %d\n",
+ dpy->request);
+ return 0;
+}
+
+#ifdef GLXEXT
+static int dmxNOPErrorHandler(Display *dpy, XErrorEvent *ev)
+{
+ return 0;
+}
+#endif
+
+Bool dmxOpenDisplay(DMXScreenInfo *dmxScreen)
+{
+ if (!(dmxScreen->beDisplay = XOpenDisplay(dmxScreen->name)))
+ return FALSE;
+
+ dmxPropertyDisplay(dmxScreen);
+ return TRUE;
+}
+
+void dmxSetErrorHandler(DMXScreenInfo *dmxScreen)
+{
+ XSetErrorHandler(dmxErrorHandler);
+}
+
+static void dmxPrintScreenInfo(DMXScreenInfo *dmxScreen)
+{
+ XWindowAttributes attribs;
+ int ndepths = 0, *depths = NULL;
+ int i;
+ Display *dpy = dmxScreen->beDisplay;
+ Screen *s = DefaultScreenOfDisplay(dpy);
+ int scr = DefaultScreen(dpy);
+
+ XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &attribs);
+ if (!(depths = XListDepths(dpy, scr, &ndepths))) ndepths = 0;
+
+ dmxLogOutput(dmxScreen, "Name of display: %s\n", DisplayString(dpy));
+ dmxLogOutput(dmxScreen, "Version number: %d.%d\n",
+ ProtocolVersion(dpy), ProtocolRevision(dpy));
+ dmxLogOutput(dmxScreen, "Vendor string: %s\n", ServerVendor(dpy));
+ if (!strstr(ServerVendor(dpy), "XFree86")) {
+ dmxLogOutput(dmxScreen, "Vendor release: %d\n", VendorRelease(dpy));
+ } else {
+ /* This code based on xdpyinfo.c */
+ int v = VendorRelease(dpy);
+ int major = -1, minor = -1, patch = -1, subpatch = -1;
+
+ if (v < 336)
+ major = v / 100, minor = (v / 10) % 10, patch = v % 10;
+ else if (v < 3900) {
+ major = v / 1000;
+ minor = (v / 100) % 10;
+ if (((v / 10) % 10) || (v % 10)) {
+ patch = (v / 10) % 10;
+ if (v % 10) subpatch = v % 10;
+ }
+ } else if (v < 40000000) {
+ major = v / 1000;
+ minor = (v / 10) % 10;
+ if (v % 10) patch = v % 10;
+ } else {
+ major = v / 10000000;
+ minor = (v / 100000) % 100;
+ patch = (v / 1000) % 100;
+ if (v % 1000) subpatch = v % 1000;
+ }
+ dmxLogOutput(dmxScreen, "Vendor release: %d (XFree86 version: %d.%d",
+ v, major, minor);
+ if (patch > 0) dmxLogOutputCont(dmxScreen, ".%d", patch);
+ if (subpatch > 0) dmxLogOutputCont(dmxScreen, ".%d", subpatch);
+ dmxLogOutputCont(dmxScreen, ")\n");
+ }
+
+
+ dmxLogOutput(dmxScreen, "Dimensions: %dx%d pixels\n",
+ attribs.width, attribs.height);
+ dmxLogOutput(dmxScreen, "%d depths on screen %d: ", ndepths, scr);
+ for (i = 0; i < ndepths; i++)
+ dmxLogOutputCont(dmxScreen, "%c%d", i ? ',' : ' ', depths[i]);
+ dmxLogOutputCont(dmxScreen, "\n");
+ dmxLogOutput(dmxScreen, "Depth of root window: %d plane%s (%d)\n",
+ attribs.depth, attribs.depth == 1 ? "" : "s",
+ DisplayPlanes(dpy, scr));
+ dmxLogOutput(dmxScreen, "Number of colormaps: %d min, %d max\n",
+ MinCmapsOfScreen(s), MaxCmapsOfScreen(s));
+ dmxLogOutput(dmxScreen, "Options: backing-store %s, save-unders %s\n",
+ (DoesBackingStore (s) == NotUseful) ? "no" :
+ ((DoesBackingStore (s) == Always) ? "yes" : "when mapped"),
+ DoesSaveUnders (s) ? "yes" : "no");
+ dmxLogOutput(dmxScreen, "Window Manager running: %s\n",
+ (dmxScreen->WMRunningOnBE) ? "yes" : "no");
+
+ if (dmxScreen->WMRunningOnBE) {
+ dmxLogOutputWarning(dmxScreen,
+ "Window manager running "
+ "-- colormaps not supported\n");
+ }
+ XFree(depths);
+}
+
+void dmxGetScreenAttribs(DMXScreenInfo *dmxScreen)
+{
+ XWindowAttributes attribs;
+ Display *dpy = dmxScreen->beDisplay;
+#ifdef GLXEXT
+ int dummy;
+#endif
+
+ XGetWindowAttributes(dpy, DefaultRootWindow(dpy), &attribs);
+
+ dmxScreen->beWidth = attribs.width;
+ dmxScreen->beHeight = attribs.height;
+
+ /* Fill in missing geometry information */
+ if (dmxScreen->scrnXSign < 0) {
+ if (dmxScreen->scrnWidth) {
+ dmxScreen->scrnX = (attribs.width - dmxScreen->scrnWidth
+ - dmxScreen->scrnX);
+ } else {
+ dmxScreen->scrnWidth = attribs.width - dmxScreen->scrnX;
+ dmxScreen->scrnX = 0;
+ }
+ }
+ if (dmxScreen->scrnYSign < 0) {
+ if (dmxScreen->scrnHeight) {
+ dmxScreen->scrnY = (attribs.height - dmxScreen->scrnHeight
+ - dmxScreen->scrnY);
+ } else {
+ dmxScreen->scrnHeight = attribs.height - dmxScreen->scrnY;
+ dmxScreen->scrnY = 0;
+ }
+ }
+ if (!dmxScreen->scrnWidth)
+ dmxScreen->scrnWidth = attribs.width - dmxScreen->scrnX;
+ if (!dmxScreen->scrnHeight)
+ dmxScreen->scrnHeight = attribs.height - dmxScreen->scrnY;
+
+ if (!dmxScreen->rootWidth) dmxScreen->rootWidth = dmxScreen->scrnWidth;
+ if (!dmxScreen->rootHeight) dmxScreen->rootHeight = dmxScreen->scrnHeight;
+ if (dmxScreen->rootWidth + dmxScreen->rootX > dmxScreen->scrnWidth)
+ dmxScreen->rootWidth = dmxScreen->scrnWidth - dmxScreen->rootX;
+ if (dmxScreen->rootHeight + dmxScreen->rootY > dmxScreen->scrnHeight)
+ dmxScreen->rootHeight = dmxScreen->scrnHeight - dmxScreen->rootY;
+
+ /* FIXME: Get these from the back-end server */
+ dmxScreen->beXDPI = 75;
+ dmxScreen->beYDPI = 75;
+
+ dmxScreen->beDepth = attribs.depth; /* FIXME: verify that this
+ * works always. In
+ * particular, this will work
+ * well for depth=16, will fail
+ * because of colormap issues
+ * at depth 8. More work needs
+ * to be done here. */
+
+ if (dmxScreen->beDepth <= 8) dmxScreen->beBPP = 8;
+ else if (dmxScreen->beDepth <= 16) dmxScreen->beBPP = 16;
+ else dmxScreen->beBPP = 32;
+
+#ifdef GLXEXT
+ /* get the majorOpcode for the back-end GLX extension */
+ XQueryExtension(dpy, "GLX", &dmxScreen->glxMajorOpcode,
+ &dummy, &dmxScreen->glxErrorBase);
+#endif
+
+ dmxPrintScreenInfo(dmxScreen);
+ dmxLogOutput(dmxScreen, "%dx%d+%d+%d on %dx%d at depth=%d, bpp=%d\n",
+ dmxScreen->scrnWidth, dmxScreen->scrnHeight,
+ dmxScreen->scrnX, dmxScreen->scrnY,
+ dmxScreen->beWidth, dmxScreen->beHeight,
+ dmxScreen->beDepth, dmxScreen->beBPP);
+ if (dmxScreen->beDepth == 8)
+ dmxLogOutputWarning(dmxScreen,
+ "Support for depth == 8 is not complete\n");
+}
+
+Bool dmxGetVisualInfo(DMXScreenInfo *dmxScreen)
+{
+ int i;
+ XVisualInfo visinfo;
+
+ visinfo.screen = DefaultScreen(dmxScreen->beDisplay);
+ dmxScreen->beVisuals = XGetVisualInfo(dmxScreen->beDisplay,
+ VisualScreenMask,
+ &visinfo,
+ &dmxScreen->beNumVisuals);
+
+ dmxScreen->beDefVisualIndex = -1;
+
+ if (defaultColorVisualClass >= 0 || dmxDepth > 0) {
+ for (i = 0; i < dmxScreen->beNumVisuals; i++)
+ if (defaultColorVisualClass >= 0) {
+ if (dmxScreen->beVisuals[i].class == defaultColorVisualClass) {
+ if (dmxDepth > 0) {
+ if (dmxScreen->beVisuals[i].depth == dmxDepth) {
+ dmxScreen->beDefVisualIndex = i;
+ break;
+ }
+ } else {
+ dmxScreen->beDefVisualIndex = i;
+ break;
+ }
+ }
+ } else if (dmxScreen->beVisuals[i].depth == dmxDepth) {
+ dmxScreen->beDefVisualIndex = i;
+ break;
+ }
+ } else {
+ visinfo.visualid =
+ XVisualIDFromVisual(DefaultVisual(dmxScreen->beDisplay,
+ visinfo.screen));
+
+ for (i = 0; i < dmxScreen->beNumVisuals; i++)
+ if (visinfo.visualid == dmxScreen->beVisuals[i].visualid) {
+ dmxScreen->beDefVisualIndex = i;
+ break;
+ }
+ }
+
+ for (i = 0; i < dmxScreen->beNumVisuals; i++)
+ dmxLogVisual(dmxScreen, &dmxScreen->beVisuals[i],
+ (i == dmxScreen->beDefVisualIndex));
+
+ return dmxScreen->beDefVisualIndex >= 0;
+}
+
+void dmxGetColormaps(DMXScreenInfo *dmxScreen)
+{
+ int i;
+
+ dmxScreen->beNumDefColormaps = dmxScreen->beNumVisuals;
+ dmxScreen->beDefColormaps = malloc(dmxScreen->beNumDefColormaps *
+ sizeof(*dmxScreen->beDefColormaps));
+
+ for (i = 0; i < dmxScreen->beNumDefColormaps; i++)
+ dmxScreen->beDefColormaps[i] =
+ XCreateColormap(dmxScreen->beDisplay,
+ DefaultRootWindow(dmxScreen->beDisplay),
+ dmxScreen->beVisuals[i].visual,
+ AllocNone);
+
+ dmxScreen->beBlackPixel = BlackPixel(dmxScreen->beDisplay,
+ DefaultScreen(dmxScreen->beDisplay));
+ dmxScreen->beWhitePixel = WhitePixel(dmxScreen->beDisplay,
+ DefaultScreen(dmxScreen->beDisplay));
+}
+
+void dmxGetPixmapFormats(DMXScreenInfo *dmxScreen)
+{
+ dmxScreen->beDepths =
+ XListDepths(dmxScreen->beDisplay, DefaultScreen(dmxScreen->beDisplay),
+ &dmxScreen->beNumDepths);
+
+ dmxScreen->bePixmapFormats =
+ XListPixmapFormats(dmxScreen->beDisplay,
+ &dmxScreen->beNumPixmapFormats);
+}
+
+static Bool dmxSetPixmapFormats(ScreenInfo *pScreenInfo,
+ DMXScreenInfo *dmxScreen)
+{
+ XPixmapFormatValues *bePixmapFormat;
+ PixmapFormatRec *format;
+ int i, j;
+
+ pScreenInfo->imageByteOrder = ImageByteOrder(dmxScreen->beDisplay);
+ pScreenInfo->bitmapScanlineUnit = BitmapUnit(dmxScreen->beDisplay);
+ pScreenInfo->bitmapScanlinePad = BitmapPad(dmxScreen->beDisplay);
+ pScreenInfo->bitmapBitOrder = BitmapBitOrder(dmxScreen->beDisplay);
+
+ pScreenInfo->numPixmapFormats = 0;
+ for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
+ bePixmapFormat = &dmxScreen->bePixmapFormats[i];
+ for (j = 0; j < dmxScreen->beNumDepths; j++)
+ if ((bePixmapFormat->depth == 1) ||
+ (bePixmapFormat->depth == dmxScreen->beDepths[j])) {
+ format = &pScreenInfo->formats[pScreenInfo->numPixmapFormats];
+
+ format->depth = bePixmapFormat->depth;
+ format->bitsPerPixel = bePixmapFormat->bits_per_pixel;
+ format->scanlinePad = bePixmapFormat->scanline_pad;
+
+ pScreenInfo->numPixmapFormats++;
+ break;
+ }
+ }
+
+ return TRUE;
+}
+
+void dmxCheckForWM(DMXScreenInfo *dmxScreen)
+{
+ Status status;
+ XWindowAttributes xwa;
+
+ status = XGetWindowAttributes(dmxScreen->beDisplay,
+ DefaultRootWindow(dmxScreen->beDisplay),
+ &xwa);
+ dmxScreen->WMRunningOnBE =
+ (status &&
+ ((xwa.all_event_masks & SubstructureRedirectMask) ||
+ (xwa.all_event_masks & SubstructureNotifyMask)));
+}
+
+/** Initialize the display and collect relevant information about the
+ * display properties */
+static void dmxDisplayInit(DMXScreenInfo *dmxScreen)
+{
+ if (!dmxOpenDisplay(dmxScreen))
+ dmxLog(dmxFatal,
+ "dmxOpenDisplay: Unable to open display %s\n",
+ dmxScreen->name);
+
+ dmxSetErrorHandler(dmxScreen);
+ dmxCheckForWM(dmxScreen);
+ dmxGetScreenAttribs(dmxScreen);
+
+ if (!dmxGetVisualInfo(dmxScreen))
+ dmxLog(dmxFatal, "dmxGetVisualInfo: No matching visuals found\n");
+
+ dmxGetColormaps(dmxScreen);
+ dmxGetPixmapFormats(dmxScreen);
+}
+
+/* If this doesn't compile, just add || defined(yoursystem) to the line
+ * below. This information is to help with bug reports and is not
+ * critical. */
+#if !defined(_POSIX_SOURCE)
+static const char *dmxExecOS(void) { return ""; }
+#else
+#include <sys/utsname.h>
+static const char *dmxExecOS(void)
+{
+ static char buffer[128];
+ static int initialized = 0;
+ struct utsname u;
+
+ if (!initialized++) {
+ memset(buffer, 0, sizeof(buffer));
+ uname(&u);
+ XmuSnprintf(buffer, sizeof(buffer)-1, "%s %s %s",
+ u.sysname, u.release, u.version);
+ }
+ return buffer;
+}
+#endif
+
+static const char *dmxBuildCompiler(void)
+{
+ static char buffer[128];
+ static int initialized = 0;
+
+ if (!initialized++) {
+ memset(buffer, 0, sizeof(buffer));
+#if defined(__GNUC__) && defined(__GNUC_MINOR__) &&defined(__GNUC_PATCHLEVEL__)
+ XmuSnprintf(buffer, sizeof(buffer)-1, "gcc %d.%d.%d",
+ __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
+#endif
+ }
+ return buffer;
+}
+
+static const char *dmxExecHost(void)
+{
+ static char buffer[128];
+ static int initialized = 0;
+
+ if (!initialized++) {
+ memset(buffer, 0, sizeof(buffer));
+ XmuGetHostname(buffer, sizeof(buffer) - 1);
+ }
+ return buffer;
+}
+
+/** This routine is called in Xserver/dix/main.c from \a main(). */
+void InitOutput(ScreenInfo *pScreenInfo, int argc, char *argv[])
+{
+ int i;
+ static unsigned long dmxGeneration = 0;
+#ifdef GLXEXT
+ Bool glxSupported = TRUE;
+#endif
+
+ if (dmxGeneration != serverGeneration) {
+ int vendrel = VENDOR_RELEASE;
+ int major, minor, year, month, day;
+
+ dmxGeneration = serverGeneration;
+
+ major = vendrel / 100000000;
+ vendrel -= major * 100000000;
+ minor = vendrel / 1000000;
+ vendrel -= minor * 1000000;
+ year = vendrel / 10000;
+ vendrel -= year * 10000;
+ month = vendrel / 100;
+ vendrel -= month * 100;
+ day = vendrel;
+
+ /* Add other epoch tests here */
+ if (major > 0 && minor > 0) year += 2000;
+
+ dmxLog(dmxInfo, "Generation: %d\n", dmxGeneration);
+ dmxLog(dmxInfo, "DMX version: %d.%d.%02d%02d%02d (%s)\n",
+ major, minor, year, month, day, VENDOR_STRING);
+
+ SetVendorRelease(VENDOR_RELEASE);
+ SetVendorString(VENDOR_STRING);
+
+ if (dmxGeneration == 1) {
+ dmxLog(dmxInfo, "DMX Build OS: %s (%s)\n", OSNAME, OSVENDOR);
+ dmxLog(dmxInfo, "DMX Build Compiler: %s\n", dmxBuildCompiler());
+ dmxLog(dmxInfo, "DMX Execution OS: %s\n", dmxExecOS());
+ dmxLog(dmxInfo, "DMX Execution Host: %s\n", dmxExecHost());
+ }
+ dmxLog(dmxInfo, "MAXSCREENS: %d\n", MAXSCREENS);
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ if (dmxScreens[i].beDisplay)
+ dmxLog(dmxWarning, "Display \"%s\" still open\n",
+ dmxScreens[i].name);
+ dmxStatFree(dmxScreens[i].stat);
+ dmxScreens[i].stat = NULL;
+ }
+ for (i = 0; i < dmxNumInputs; i++) dmxInputFree(&dmxInputs[i]);
+ free(dmxScreens);
+ free(dmxInputs);
+ dmxScreens = NULL;
+ dmxInputs = NULL;
+ dmxNumScreens = 0;
+ dmxNumInputs = 0;
+ }
+
+ /* Make sure that the command-line arguments are sane. */
+ if (dmxAddRemoveScreens && dmxGLXProxy) {
+ /* Currently it is not possible to support GLX and Render
+ * extensions with dynamic screen addition/removal due to the
+ * state that each extension keeps, which cannot be restored. */
+ dmxLog(dmxWarning,
+ "GLX Proxy and Render extensions do not yet support dynamic\n");
+ dmxLog(dmxWarning,
+ "screen addition and removal. Please specify -noglxproxy\n");
+ dmxLog(dmxWarning,
+ "and -norender on the command line or in the configuration\n");
+ dmxLog(dmxWarning,
+ "file to disable these two extensions if you wish to use\n");
+ dmxLog(dmxWarning,
+ "the dynamic addition and removal of screens support.\n");
+ dmxLog(dmxFatal,
+ "Dynamic screen addition/removal error (see above).\n");
+ }
+
+ /* ddxProcessArgument has been called at this point, but any data
+ * from the configuration file has not been applied. Do so, and be
+ * sure we have at least one back-end display. */
+ dmxConfigConfigure();
+ if (!dmxNumScreens)
+ dmxLog(dmxFatal, "InitOutput: no back-end displays found\n");
+ if (!dmxNumInputs)
+ dmxLog(dmxInfo, "InitOutput: no inputs found\n");
+
+ /* Disable lazy window creation optimization if offscreen
+ * optimization is disabled */
+ if (!dmxOffScreenOpt && dmxLazyWindowCreation) {
+ dmxLog(dmxInfo,
+ "InitOutput: Disabling lazy window creation optimization\n");
+ dmxLog(dmxInfo,
+ " since it requires the offscreen optimization\n");
+ dmxLog(dmxInfo,
+ " to function properly.\n");
+ dmxLazyWindowCreation = FALSE;
+ }
+
+ /* Open each display and gather information about it. */
+ for (i = 0; i < dmxNumScreens; i++)
+ dmxDisplayInit(&dmxScreens[i]);
+
+#if PANORAMIX
+ /* Register a Xinerama callback which will run from within
+ * PanoramiXCreateConnectionBlock. We can use the callback to
+ * determine if Xinerama is loaded and to check the visuals
+ * determined by PanoramiXConsolidate. */
+ XineramaRegisterConnectionBlockCallback(dmxConnectionBlockCallback);
+#endif
+
+ /* Since we only have a single screen thus far, we only need to set
+ the pixmap formats to match that screen. FIXME: this isn't true.*/
+ if (!dmxSetPixmapFormats(pScreenInfo, &dmxScreens[0])) return;
+
+ /* Might want to install a signal handler to allow cleaning up after
+ * unexpected signals. The DIX/OS layer already handles SIGINT and
+ * SIGTERM, so everything is OK for expected signals. --DD
+ *
+ * SIGHUP, SIGINT, and SIGTERM are trapped in os/connection.c
+ * SIGQUIT is another common signal that is sent from the keyboard.
+ * Trap it here, to ensure that the keyboard modifier map and other
+ * state for the input devices are restored. (This makes the
+ * behavior of SIGQUIT somewhat unexpected, since it will be the
+ * same as the behavior of SIGINT. However, leaving the modifier
+ * map of the input devices empty is even more unexpected.) --RF
+ */
+ OsSignal(SIGQUIT, GiveUp);
+
+#ifdef GLXEXT
+ /* Check if GLX extension exists on all back-end servers */
+ for (i = 0; i < dmxNumScreens; i++)
+ glxSupported &= (dmxScreens[i].glxMajorOpcode > 0);
+#endif
+
+ /* Tell dix layer about the backend displays */
+ for (i = 0; i < dmxNumScreens; i++) {
+
+#ifdef GLXEXT
+ if (glxSupported) {
+ /*
+ * Builds GLX configurations from the list of visuals
+ * supported by the back-end server, and give that
+ * configuration list to the glx layer - so that he will
+ * build the visuals accordingly.
+ */
+
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ __GLXvisualConfig *configs = NULL;
+ dmxGlxVisualPrivate **configprivs = NULL;
+ int nconfigs = 0;
+ int (*oldErrorHandler)(Display *, XErrorEvent *);
+ int i;
+
+ /* Catch errors if when using an older GLX w/o FBconfigs */
+ oldErrorHandler = XSetErrorHandler(dmxNOPErrorHandler);
+
+ /* Get FBConfigs of the back-end server */
+ dmxScreen->fbconfigs = GetGLXFBConfigs(dmxScreen->beDisplay,
+ dmxScreen->glxMajorOpcode,
+ &dmxScreen->numFBConfigs);
+
+ XSetErrorHandler(oldErrorHandler);
+
+ dmxScreen->glxVisuals =
+ GetGLXVisualConfigs(dmxScreen->beDisplay,
+ DefaultScreen(dmxScreen->beDisplay),
+ &dmxScreen->numGlxVisuals);
+
+ if (dmxScreen->fbconfigs) {
+ configs =
+ GetGLXVisualConfigsFromFBConfigs(dmxScreen->fbconfigs,
+ dmxScreen->numFBConfigs,
+ dmxScreen->beVisuals,
+ dmxScreen->beNumVisuals,
+ dmxScreen->glxVisuals,
+ dmxScreen->numGlxVisuals,
+ &nconfigs);
+ } else {
+ configs = dmxScreen->glxVisuals;
+ nconfigs = dmxScreen->numGlxVisuals;
+ }
+
+ configprivs = malloc(nconfigs * sizeof(dmxGlxVisualPrivate*));
+
+ if (configs != NULL && configprivs != NULL) {
+
+ /* Initialize our private info for each visual
+ * (currently only x_visual_depth and x_visual_class)
+ */
+ for (i = 0; i < nconfigs; i++) {
+
+ configprivs[i] = (dmxGlxVisualPrivate *)
+ malloc(sizeof(dmxGlxVisualPrivate));
+ configprivs[i]->x_visual_depth = 0;
+ configprivs[i]->x_visual_class = 0;
+
+ /* Find the visual depth */
+ if (configs[i].vid > 0) {
+ int j;
+ for (j = 0; j < dmxScreen->beNumVisuals; j++) {
+ if (dmxScreen->beVisuals[j].visualid ==
+ configs[i].vid) {
+ configprivs[i]->x_visual_depth =
+ dmxScreen->beVisuals[j].depth;
+ configprivs[i]->x_visual_class =
+ dmxScreen->beVisuals[j].class;
+ break;
+ }
+ }
+ }
+ }
+
+ XFlush(dmxScreen->beDisplay);
+ }
+ }
+#endif /* GLXEXT */
+
+ AddScreen(dmxScreenInit, argc, argv);
+ }
+
+ /* Compute origin information. */
+ dmxInitOrigins();
+
+ /* Compute overlap information. */
+ dmxInitOverlap();
+
+ /* Make sure there is a global width/height available */
+ dmxComputeWidthHeight(DMX_NO_RECOMPUTE_BOUNDING_BOX);
+
+ /* FIXME: The following is temporarily placed here. When the DMX
+ * extension is available, it will be move there.
+ */
+ dmxInitFonts();
+
+ /* Initialize the render extension */
+ if (!noRenderExtension)
+ dmxInitRender();
+
+ /* Initialized things that need timer hooks */
+ dmxStatInit();
+ dmxSyncInit(); /* Calls RegisterBlockAndWakeupHandlers */
+
+ dmxLog(dmxInfo, "Shadow framebuffer support %s\n",
+ dmxShadowFB ? "enabled" : "disabled");
+}
+
+/* RATS: Assuming the fp string (which comes from the command-line argv
+ vector) is NULL-terminated, the buffer is large enough for the
+ strcpy. */
+static void dmxSetDefaultFontPath(char *fp)
+{
+ int fplen = strlen(fp) + 1;
+
+ if (dmxFontPath) {
+ int len;
+
+ len = strlen(dmxFontPath);
+ dmxFontPath = realloc(dmxFontPath, len+fplen+1);
+ dmxFontPath[len] = ',';
+ strncpy(&dmxFontPath[len+1], fp, fplen);
+ } else {
+ dmxFontPath = malloc(fplen);
+ strncpy(dmxFontPath, fp, fplen);
+ }
+
+ defaultFontPath = dmxFontPath;
+}
+
+/** This function is called in Xserver/os/utils.c from \a AbortServer().
+ * We must ensure that backend and console state is restored in the
+ * event the server shutdown wasn't clean. */
+void AbortDDX(void)
+{
+ int i;
+
+ for (i=0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+
+ if (dmxScreen->beDisplay) XCloseDisplay(dmxScreen->beDisplay);
+ dmxScreen->beDisplay = NULL;
+ }
+}
+
+#ifdef DDXBEFORERESET
+void ddxBeforeReset(void)
+{
+}
+#endif
+
+/** This function is called in Xserver/dix/main.c from \a main() when
+ * dispatchException & DE_TERMINATE (which is the only way to exit the
+ * main loop without an interruption. */
+void ddxGiveUp(void)
+{
+ AbortDDX();
+}
+
+/** This function is called in Xserver/os/osinit.c from \a OsInit(). */
+void OsVendorInit(void)
+{
+}
+
+/** This function is called in Xserver/os/utils.c from \a FatalError()
+ * and \a VFatalError(). (Note that setting the function pointer \a
+ * OsVendorVErrorFProc will cause \a VErrorF() (which is called by the
+ * two routines mentioned here, as well as by others) to use the
+ * referenced routine instead of \a vfprintf().) */
+void OsVendorFatalError(void)
+{
+}
+
+/** Process our command line arguments. */
+int ddxProcessArgument(int argc, char *argv[], int i)
+{
+ int retval = 0;
+
+ if (!strcmp(argv[i], "-display")) {
+ if (++i < argc) dmxConfigStoreDisplay(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-inputfrom") || !strcmp(argv[i], "-input")) {
+ if (++i < argc) dmxConfigStoreInput(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-xinputfrom") || !strcmp(argv[i],"-xinput")) {
+ if (++i < argc) dmxConfigStoreXInput(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-noshadowfb")) {
+ dmxLog(dmxWarning,
+ "-noshadowfb has been deprecated "
+ "since it is now the default\n");
+ dmxShadowFB = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-nomulticursor")) {
+ dmxCursorNoMulti();
+ retval = 1;
+ } else if (!strcmp(argv[i], "-shadowfb")) {
+ dmxShadowFB = TRUE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-configfile")) {
+ if (++i < argc) dmxConfigStoreFile(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-config")) {
+ if (++i < argc) dmxConfigStoreConfig(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-fontpath")) {
+ if (++i < argc) dmxSetDefaultFontPath(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-stat")) {
+ if ((i += 2) < argc) dmxStatActivate(argv[i-1], argv[i]);
+ retval = 3;
+ } else if (!strcmp(argv[i], "-syncbatch")) {
+ if (++i < argc) dmxSyncActivate(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-nooffscreenopt")) {
+ dmxOffScreenOpt = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-nosubdivprims")) {
+ dmxSubdividePrimitives = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-nowindowopt")) {
+ dmxLazyWindowCreation = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-noxkb")) {
+ dmxUseXKB = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-depth")) {
+ if (++i < argc) dmxDepth = atoi(argv[i]);
+ retval = 2;
+ } else if (!strcmp(argv[i], "-norender")) {
+ noRenderExtension = TRUE;
+ retval = 1;
+#ifdef GLXEXT
+ } else if (!strcmp(argv[i], "-noglxproxy")) {
+ dmxGLXProxy = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-noglxswapgroup")) {
+ dmxGLXSwapGroupSupport = FALSE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-glxsyncswap")) {
+ dmxGLXSyncSwap = TRUE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-glxfinishswap")) {
+ dmxGLXFinishSwap = TRUE;
+ retval = 1;
+#endif
+ } else if (!strcmp(argv[i], "-ignorebadfontpaths")) {
+ dmxIgnoreBadFontPaths = TRUE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-addremovescreens")) {
+ dmxAddRemoveScreens = TRUE;
+ retval = 1;
+ } else if (!strcmp(argv[i], "-param")) {
+ if ((i += 2) < argc) {
+ if (!strcasecmp(argv[i-1], "xkbrules"))
+ dmxConfigSetXkbRules(argv[i]);
+ else if (!strcasecmp(argv[i-1], "xkbmodel"))
+ dmxConfigSetXkbModel(argv[i]);
+ else if (!strcasecmp(argv[i-1], "xkblayout"))
+ dmxConfigSetXkbLayout(argv[i]);
+ else if (!strcasecmp(argv[i-1], "xkbvariant"))
+ dmxConfigSetXkbVariant(argv[i]);
+ else if (!strcasecmp(argv[i-1], "xkboptions"))
+ dmxConfigSetXkbOptions(argv[i]);
+ else
+ dmxLog(dmxWarning,
+ "-param requires: XkbRules, XkbModel, XkbLayout,"
+ " XkbVariant, or XkbOptions\n");
+ }
+ retval = 3;
+ }
+ if (!serverGeneration) dmxConfigSetMaxScreens();
+ return retval;
+}
+
+/** Provide succinct usage information for the DMX server. */
+void ddxUseMsg(void)
+{
+ ErrorF("\n\nDevice Dependent Usage:\n");
+ ErrorF("-display string Specify the back-end display(s)\n");
+ ErrorF("-input string Specify input source for core device\n");
+ ErrorF("-xinput string Specify input source for XInput device\n");
+ ErrorF("-shadowfb Enable shadow frame buffer\n");
+ ErrorF("-configfile file Read from a configuration file\n");
+ ErrorF("-config config Select a specific configuration\n");
+ ErrorF("-nomulticursor Turn of multiple cursor support\n");
+ ErrorF("-fontpath Sets the default font path\n");
+ ErrorF("-stat inter scrns Print out performance statistics\n");
+ ErrorF("-syncbatch inter Set interval for XSync batching\n");
+ ErrorF("-nooffscreenopt Disable offscreen optimization\n");
+ ErrorF("-nosubdivprims Disable primitive subdivision\n");
+ ErrorF(" optimization\n");
+ ErrorF("-nowindowopt Disable lazy window creation optimization\n");
+ ErrorF("-noxkb Disable use of the XKB extension with\n");
+ ErrorF(" backend displays (cf. -kb).\n");
+ ErrorF("-depth Specify the default root window depth\n");
+ ErrorF("-norender Disable RENDER extension support\n");
+#ifdef GLXEXT
+ ErrorF("-noglxproxy Disable GLX Proxy\n");
+ ErrorF("-noglxswapgroup Disable swap group and swap barrier\n");
+ ErrorF(" extensions in GLX proxy\n");
+ ErrorF("-glxsyncswap Force XSync after swap buffers\n");
+ ErrorF("-glxfinishswap Force glFinish after swap buffers\n");
+#endif
+ ErrorF("-ignorebadfontpaths Ignore bad font paths during initialization\n");
+ ErrorF("-addremovescreens Enable dynamic screen addition/removal\n");
+ ErrorF("-param ... Specify configuration parameters (e.g.,\n");
+ ErrorF(" XkbRules, XkbModel, XkbLayout, etc.)\n");
+ ErrorF("\n");
+ ErrorF(" If the -input string matches a -display string, then input\n"
+ " is taken from that backend display. (XInput cannot be taken\n"
+ " from a backend display.) Placing \",console\" after the\n"
+ " display name will force a console window to be opened on\n"
+ " that display in addition to the backend input. This is\n"
+ " useful if the backend window does not cover the whole\n"
+ " physical display.\n\n");
+
+ ErrorF(" Otherwise, if the -input or -xinput string specifies another\n"
+ " X display, then a console window will be created on that\n"
+ " display. Placing \",windows\" or \",nowindows\" after the\n"
+ " display name will control the display of window outlines in\n"
+ " the console.\n\n");
+
+ ErrorF(" -input or -xinput dummy specifies no input.\n");
+ ErrorF(" -input or -xinput local specifies the use of a raw keyboard,\n"
+ " mouse, or other (extension) device:\n"
+ " -input local,kbd,ps2 will use a ps2 mouse\n"
+ " -input local,kbd,ms will use a serial mouse\n"
+ " -input local,usb-kbd,usb-mou will use USB devices \n"
+ " -xinput local,usb-oth will use a non-mouse and\n"
+ " non-keyboard USB device with XInput\n\n");
+
+ ErrorF(" Special Keys:\n");
+ ErrorF(" Ctrl-Alt-g Server grab/ungrab (console only)\n");
+ ErrorF(" Ctrl-Alt-f Fine (1-pixel) mouse mode (console only)\n");
+ ErrorF(" Ctrl-Alt-q Quit (core devices only)\n");
+ ErrorF(" Ctrl-Alt-F* Switch to VC (local only)\n");
+}
diff --git a/hw/dmx/dmxinit.h b/hw/dmx/dmxinit.h
new file mode 100644
index 0000000..7d166fd
--- /dev/null
+++ b/hw/dmx/dmxinit.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2004 Red Hat Inc., Raleigh, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for initialization. \see dmxinit.c */
+
+#ifndef DMXINIT_H
+#define DMXINIT_H
+
+#include "scrnintstr.h"
+
+extern Bool dmxOpenDisplay(DMXScreenInfo *dmxScreen);
+extern void dmxSetErrorHandler(DMXScreenInfo *dmxScreen);
+extern void dmxCheckForWM(DMXScreenInfo *dmxScreen);
+extern void dmxGetScreenAttribs(DMXScreenInfo *dmxScreen);
+extern Bool dmxGetVisualInfo(DMXScreenInfo *dmxScreen);
+extern void dmxGetColormaps(DMXScreenInfo *dmxScreen);
+extern void dmxGetPixmapFormats(DMXScreenInfo *dmxScreen);
+
+#endif /* DMXINIT_H */
diff --git a/hw/dmx/dmxinput.c b/hw/dmx/dmxinput.c
new file mode 100644
index 0000000..568bb88
--- /dev/null
+++ b/hw/dmx/dmxinput.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide the main entry points for input initialization and processing
+ * that arequired by the dix layer.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxlog.h"
+#include "dmxinput.h"
+
+#include "inputstr.h"
+#include "input.h"
+#include "mi.h"
+
+/** Returns TRUE if the key is a valid modifier. For PC-class
+ * keyboards, all keys can be used as modifiers, so return TRUE
+ * always. */
+Bool LegalModifier(unsigned int key, DeviceIntPtr pDev)
+{
+ return TRUE;
+}
+
+/** Called from dix/main.c on each server generation to initialize
+ * inputs. All the work is done in dmxInputInit. \see
+ * dmxInputInit() */
+void InitInput(int argc, char **argv)
+{
+ int i;
+ DMXInputInfo *dmxInput;
+
+ if (!dmxNumInputs)
+ dmxLog(dmxFatal, "InitInput: no inputs specified\n");
+
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
+ dmxInputInit(dmxInput);
+
+ mieqInit();
+}
+
+void CloseInput(void)
+{
+}
+
+/** Called from dix/dispatch.c in Dispatch() whenever input events
+ * require processing. All the work is done in the lower level
+ * routines. */
+void ProcessInputEvents(void)
+{
+ int i;
+ DMXInputInfo *dmxInput;
+
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
+ if (!dmxInput->detached && dmxInput->processInputEvents)
+ dmxInput->processInputEvents(dmxInput);
+}
+
+/** This routine is called from \a dmxwindow.c whenever the layout of
+ * windows on the display might have changed. This information is used
+ * by input drivers (currently only the console driver) that provide
+ * information about window layout to the user. */
+void dmxUpdateWindowInfo(DMXUpdateType type, WindowPtr pWindow)
+{
+ int i;
+ DMXInputInfo *dmxInput;
+
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
+ if (!dmxInput->detached && dmxInput->updateWindowInfo)
+ dmxInput->updateWindowInfo(dmxInput, type, pWindow);
+}
+
+int
+NewInputDeviceRequest (InputOption *options, InputAttributes *attrs,
+ DeviceIntPtr *pdev)
+{
+ return BadRequest;
+}
+
+void
+DeleteInputDeviceRequest(DeviceIntPtr pDev)
+{
+}
diff --git a/hw/dmx/dmxinput.h b/hw/dmx/dmxinput.h
new file mode 100644
index 0000000..edfff9f
--- /dev/null
+++ b/hw/dmx/dmxinput.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides access to:
+ * - global variables available to all hw/dmx routines, and
+ * - enumerations and typedefs needed by input routines in hw/dmx (and
+ * hw/dmx/input).
+ *
+ * The goal is that no files in hw/dmx should include header files from
+ * hw/dmx/input -- the interface defined here should be the only
+ * interface exported to the hw/dmx layer. \see input/dmxinputinit.c.
+ */
+
+#ifndef DMXINPUT_H
+#define DMXINPUT_H
+
+/** Maximum number of file descriptors for SIGIO handling */
+#define DMX_MAX_SIGIO_FDS 4
+
+struct _DMXInputInfo;
+
+/** Reason why window layout was updated. */
+typedef enum {
+ DMX_UPDATE_REALIZE, /**< Window realized */
+ DMX_UPDATE_UNREALIZE, /**< Window unrealized */
+ DMX_UPDATE_RESTACK, /**< Stacking order changed */
+ DMX_UPDATE_COPY, /**< Window copied */
+ DMX_UPDATE_RESIZE, /**< Window resized */
+ DMX_UPDATE_REPARENT /**< Window reparented */
+} DMXUpdateType;
+
+typedef void (*ProcessInputEventsProc)(struct _DMXInputInfo *);
+typedef void (*UpdateWindowInfoProc)(struct _DMXInputInfo *,
+ DMXUpdateType, WindowPtr);
+
+/** An opaque structure that is only exposed in the dmx/input layer. */
+typedef struct _DMXLocalInputInfo *DMXLocalInputInfoPtr;
+
+/** State of the SIGIO engine */
+typedef enum {
+ DMX_NOSIGIO = 0, /**< Device does not use SIGIO at all. */
+ DMX_USESIGIO, /**< Device can use SIGIO, but is not
+ * (e.g., because the VT is switch
+ * away). */
+ DMX_ACTIVESIGIO /**< Device is currently using SIGIO. */
+} dmxSigioState;
+
+/** DMXInputInfo is typedef'd in \a dmx.h so that all routines can have
+ * access to the global pointers. However, the elements are only
+ * available to input-related routines. */
+struct _DMXInputInfo {
+ const char *name; /**< Name of input display or device
+ * (from command line or config
+ * file) */
+ Bool freename; /**< If true, free name on destroy */
+ Bool detached; /**< If true, input screen is detached */
+ int inputIdx; /**< Index into #dmxInputs global */
+ int scrnIdx; /**< Index into #dmxScreens global */
+ Bool core; /**< If True, initialize these
+ * devices as devices that send core
+ * events */
+ Bool console; /**< True if console and backend
+ * input share the same backend
+ * display */
+
+ Bool windows; /**< True if window outlines are
+ * draw in console */
+
+ ProcessInputEventsProc processInputEvents;
+ UpdateWindowInfoProc updateWindowInfo;
+
+ /* Local input information */
+ dmxSigioState sigioState; /**< Current stat */
+ int sigioFdCount; /**< Number of fds in use */
+ int sigioFd[DMX_MAX_SIGIO_FDS]; /**< List of fds */
+ Bool sigioAdded[DMX_MAX_SIGIO_FDS]; /**< Active fds */
+
+
+ /** True if a VT switch is pending, but has not yet happened. */
+ int vt_switch_pending;
+
+ /** True if a VT switch has happened. */
+ int vt_switched;
+
+ /** Number of devices handled in this _DMXInputInfo structure. */
+ int numDevs;
+
+ /** List of actual input devices. Each _DMXInputInfo structure can
+ * refer to more than one device. For example, the keyboard and the
+ * pointer of a backend display; or all of the XInput extension
+ * devices on a backend display. */
+ DMXLocalInputInfoPtr *devs;
+
+ char *keycodes; /**< XKB keycodes from command line */
+ char *symbols; /**< XKB symbols from command line */
+ char *geometry; /**< XKB geometry from command line */
+};
+
+extern int dmxNumInputs; /**< Number of #dmxInputs */
+extern DMXInputInfo *dmxInputs; /**< List of inputs */
+
+extern void dmxInputInit(DMXInputInfo *dmxInput);
+extern void dmxInputReInit(DMXInputInfo *dmxInput);
+extern void dmxInputLateReInit(DMXInputInfo *dmxInput);
+extern void dmxInputFree(DMXInputInfo *dmxInput);
+extern void dmxInputLogDevices(void);
+extern void dmxUpdateWindowInfo(DMXUpdateType type, WindowPtr pWindow);
+
+/* These functions are defined in input/dmxeq.c */
+extern void dmxeqSwitchScreen(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX);
+
+/* This type is used in input/dmxevents.c. Also, these functions are
+ * defined in input/dmxevents.c */
+typedef enum {
+ DMX_NO_BLOCK = 0,
+ DMX_BLOCK = 1
+} DMXBlockType;
+
+extern void dmxGetGlobalPosition(int *x, int *y);
+extern DMXScreenInfo *dmxFindFirstScreen(int x, int y);
+extern void dmxCoreMotion(DevicePtr pDev, int x, int y, int delta,
+ DMXBlockType block);
+
+/* Support for dynamic addition of inputs. This functions is defined in
+ * config/dmxconfig.c */
+extern DMXInputInfo *dmxConfigAddInput(const char *name, int core);
+#endif /* DMXINPUT_H */
diff --git a/hw/dmx/dmxlog.c b/hw/dmx/dmxlog.c
new file mode 100644
index 0000000..94b8035
--- /dev/null
+++ b/hw/dmx/dmxlog.c
@@ -0,0 +1,346 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This file encapsulated all of the logging functions that are used by
+ * DMX for informational, warning, and error messages. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxlog.h"
+#include "dmxinput.h"
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+
+static dmxLogLevel dmxCurrentLogLevel = dmxDebug;
+
+/** Set the default level for logging to #dmxLogLevel. Returns the
+ * previous log level. */
+dmxLogLevel dmxSetLogLevel(dmxLogLevel newLevel)
+{
+ dmxLogLevel oldLevel = dmxCurrentLogLevel;
+ if (newLevel > dmxFatal) newLevel = dmxFatal;
+ dmxCurrentLogLevel = newLevel;
+ return oldLevel;
+}
+
+/** Returns the log level set by #dmxLogLevel. */
+dmxLogLevel dmxGetLogLevel(void)
+{
+ return dmxCurrentLogLevel;
+}
+
+#ifdef DMX_LOG_STANDALONE
+/* When using this file as part of a stand-alone (i.e., non-X-Server
+ * program, then the ultimate output routines have to be defined. */
+
+/** Provide an ErrorF function when used stand-alone. */
+void ErrorF(const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ vfprintf(stderr, format, args); /* RATS: We assume the format string
+ * is trusted, since it is always
+ * from a log message in our code. */
+ va_end(args);
+}
+
+/** Provide an VFatalError function when used stand-alone. */
+static void VFatalError(const char *format, va_list args)
+{
+ vfprintf(stderr, format, args); /* RATS: We assume the format string
+ * is trusted, since it is always
+ * from a log message in our code. */
+ exit(1);
+}
+
+/** Provide an VErrorF function when used stand-alone. */
+void VErrorF(const char *format, va_list args)
+{
+ vfprintf(stderr, format, args); /* RATS: We assume the format string
+ * is trusted, since it is always
+ * from a log message in our code. */
+}
+#else
+/** This function was removed between XFree86 4.3.0 and XFree86 4.4.0. */
+extern void AbortServer(void);
+static void VFatalError(const char *format, va_list args)
+{
+ VErrorF(format, args);
+ ErrorF("\n");
+#ifdef DDXOSFATALERROR
+ OsVendorFatalError();
+#endif
+ AbortServer();
+ /*NOTREACHED*/
+}
+#endif
+
+/* Prints a consistent header for each line. */
+static void dmxHeader(dmxLogLevel logLevel, DMXInputInfo *dmxInput,
+ DMXScreenInfo *dmxScreen)
+{
+ const char *type = "??";
+
+ switch (logLevel) {
+ case dmxDebug: type = ".."; break;
+ case dmxInfo: type = "II"; break;
+ case dmxWarning: type = "**"; break;
+ case dmxError: type = "!!"; break;
+ case dmxFatal: type = "Fatal Error"; break;
+ }
+
+ if (dmxInput && dmxScreen) {
+ ErrorF("(%s) dmx[i%d/%s;o%d/%s]: ", type,
+ dmxInput->inputIdx, dmxInput->name,
+ dmxScreen->index, dmxScreen->name);
+ } else if (dmxScreen) {
+ ErrorF("(%s) dmx[o%d/%s]: ", type,
+ dmxScreen->index, dmxScreen->name);
+ } else if (dmxInput) {
+ const char *pt = strchr(dmxInput->name, ',');
+ int len = (pt
+ ? (size_t)(pt-dmxInput->name)
+ : strlen(dmxInput->name));
+
+ ErrorF("(%s) dmx[i%d/%*.*s]: ", type,
+ dmxInput->inputIdx, len, len, dmxInput->name);
+ } else {
+ ErrorF("(%s) dmx: ", type);
+ }
+}
+
+/* Prints the error message with the appropriate low-level X output
+ * routine. */
+static void dmxMessage(dmxLogLevel logLevel, const char *format, va_list args)
+{
+ if (logLevel == dmxFatal || logLevel >= dmxCurrentLogLevel) {
+ if (logLevel == dmxFatal) VFatalError(format, args);
+ else VErrorF(format, args);
+ }
+}
+
+/** Log the specified message at the specified \a logLevel. \a format
+ * can be a printf-like format expression. */
+void dmxLog(dmxLogLevel logLevel, const char *format, ...)
+{
+ va_list args;
+
+ dmxHeader(logLevel, NULL, NULL);
+ va_start(args, format);
+ dmxMessage(logLevel, format, args);
+ va_end(args);
+}
+
+/** Continue a log message without printing the message prefix. */
+void dmxLogCont(dmxLogLevel logLevel, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ dmxMessage(logLevel, format, args);
+ va_end(args);
+}
+
+#ifndef DMX_LOG_STANDALONE
+/** Log an informational message (at level #dmxInfo) related to ouput.
+ * The message prefix will contain backend information from \a
+ * dmxScreen. */
+void dmxLogOutput(DMXScreenInfo *dmxScreen, const char *format, ...)
+{
+ va_list args;
+
+ dmxHeader(dmxInfo, NULL, dmxScreen);
+ va_start(args, format);
+ dmxMessage(dmxInfo, format, args);
+ va_end(args);
+}
+
+/** Continue a message related to output without printing the message
+ * prefix. */
+void dmxLogOutputCont(DMXScreenInfo *dmxScreen, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ dmxMessage(dmxInfo, format, args);
+ va_end(args);
+}
+
+/** Log a warning message (at level #dmxWarning) related to output.
+ * The message prefix will contain backend information from \a
+ * dmxScreen. */
+void dmxLogOutputWarning(DMXScreenInfo *dmxScreen, const char *format, ...)
+{
+ va_list args;
+
+ dmxHeader(dmxWarning, NULL, dmxScreen);
+ va_start(args, format);
+ dmxMessage(dmxWarning, format, args);
+ va_end(args);
+}
+
+/** Log an informational message (at level #dmxInfo) related to input.
+ * The message prefix will contain information from \a dmxInput. */
+void dmxLogInput(DMXInputInfo *dmxInput, const char *format, ...)
+{
+ va_list args;
+
+ dmxHeader(dmxInfo, dmxInput, NULL);
+ va_start(args, format);
+ dmxMessage(dmxInfo, format, args);
+ va_end(args);
+}
+
+/** Continue a message related to input without printing the message
+ * prefix. */
+void dmxLogInputCont(DMXInputInfo *dmxInput, const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+ dmxMessage(dmxInfo, format, args);
+ va_end(args);
+}
+
+/** Print \a argc messages, each describing an element in \a argv. This
+ * is maingly for debugging purposes. */
+void dmxLogArgs(dmxLogLevel logLevel, int argc, char **argv)
+{
+ int i;
+ for (i = 0; i < argc; i++)
+ dmxLog(logLevel, " Arg[%d] = \"%s\"\n", i, argv[i]);
+}
+
+/** Print messages at level #dmxInfo describing the visuals in \a vi. */
+void dmxLogVisual(DMXScreenInfo *dmxScreen, XVisualInfo *vi, int defaultVisual)
+{
+ const char *class = "Unknown";
+
+ switch (vi->class) {
+ case StaticGray: class = "StaticGray "; break;
+ case GrayScale: class = "GrayScale "; break;
+ case StaticColor: class = "StaticColor"; break;
+ case PseudoColor: class = "PseudoColor"; break;
+ case TrueColor: class = "TrueColor "; break;
+ case DirectColor: class = "DirectColor"; break;
+ }
+
+ if (dmxScreen) {
+ dmxLogOutput(dmxScreen,
+ "0x%02x %s %2db %db/rgb %3d 0x%04x 0x%04x 0x%04x%s\n",
+ vi->visualid, class, vi->depth, vi->bits_per_rgb,
+ vi->colormap_size,
+ vi->red_mask, vi->green_mask, vi->blue_mask,
+ defaultVisual ? " *" : "");
+ } else {
+ dmxLog(dmxInfo,
+ " 0x%02x %s %2db %db/rgb %3d 0x%04x 0x%04x 0x%04x%s\n",
+ vi->visualid, class, vi->depth, vi->bits_per_rgb,
+ vi->colormap_size,
+ vi->red_mask, vi->green_mask, vi->blue_mask,
+ defaultVisual ? " *" : "");
+ }
+}
+
+/** Translate a (normalized) XInput event \a type into a human-readable
+ * string. */
+const char *dmxXInputEventName(int type)
+{
+ switch (type) {
+ case XI_DeviceValuator: return "XI_DeviceValuator";
+ case XI_DeviceKeyPress: return "XI_DeviceKeyPress";
+ case XI_DeviceKeyRelease: return "XI_DeviceKeyRelease";
+ case XI_DeviceButtonPress: return "XI_DeviceButtonPress";
+ case XI_DeviceButtonRelease: return "XI_DeviceButtonRelease";
+ case XI_DeviceMotionNotify: return "XI_DeviceMotionNotify";
+ case XI_DeviceFocusIn: return "XI_DeviceFocusIn";
+ case XI_DeviceFocusOut: return "XI_DeviceFocusOut";
+ case XI_ProximityIn: return "XI_ProximityIn";
+ case XI_ProximityOut: return "XI_ProximityOut";
+ case XI_DeviceStateNotify: return "XI_DeviceStateNotify";
+ case XI_DeviceMappingNotify: return "XI_DeviceMappingNotify";
+ case XI_ChangeDeviceNotify: return "XI_ChangeDeviceNotify";
+ case XI_DeviceKeystateNotify: return "XI_DeviceKeystateNotify";
+ case XI_DeviceButtonstateNotify: return "XI_DeviceButtonstateNotify";
+ default: return "unknown";
+ }
+}
+
+#endif
+
+/** Translate an event \a type into a human-readable string. */
+const char *dmxEventName(int type)
+{
+ switch (type) {
+ case KeyPress: return "KeyPress";
+ case KeyRelease: return "KeyRelease";
+ case ButtonPress: return "ButtonPress";
+ case ButtonRelease: return "ButtonRelease";
+ case MotionNotify: return "MotionNotify";
+ case EnterNotify: return "EnterNotify";
+ case LeaveNotify: return "LeaveNotify";
+ case FocusIn: return "FocusIn";
+ case FocusOut: return "FocusOut";
+ case KeymapNotify: return "KeymapNotify";
+ case Expose: return "Expose";
+ case GraphicsExpose: return "GraphicsExpose";
+ case NoExpose: return "NoExpose";
+ case VisibilityNotify: return "VisibilityNotify";
+ case CreateNotify: return "CreateNotify";
+ case DestroyNotify: return "DestroyNotify";
+ case UnmapNotify: return "UnmapNotify";
+ case MapNotify: return "MapNotify";
+ case MapRequest: return "MapRequest";
+ case ReparentNotify: return "ReparentNotify";
+ case ConfigureNotify: return "ConfigureNotify";
+ case ConfigureRequest: return "ConfigureRequest";
+ case GravityNotify: return "GravityNotify";
+ case ResizeRequest: return "ResizeRequest";
+ case CirculateNotify: return "CirculateNotify";
+ case CirculateRequest: return "CirculateRequest";
+ case PropertyNotify: return "PropertyNotify";
+ case SelectionClear: return "SelectionClear";
+ case SelectionRequest: return "SelectionRequest";
+ case SelectionNotify: return "SelectionNotify";
+ case ColormapNotify: return "ColormapNotify";
+ case ClientMessage: return "ClientMessage";
+ case MappingNotify: return "MappingNotify";
+ default: return "<unknown>";
+ }
+}
+
diff --git a/hw/dmx/dmxlog.h b/hw/dmx/dmxlog.h
new file mode 100644
index 0000000..7b614bd
--- /dev/null
+++ b/hw/dmx/dmxlog.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This header is included by all files that need to use the DMX logging
+ * facilities. */
+
+#ifndef _DMXLOG_H_
+#define _DMXLOG_H_
+
+/** Logging levels -- output is tunable with #dmxSetLogLevel. */
+typedef enum {
+ dmxDebug, /**< Usually verbose debugging info */
+ dmxInfo, /**< Non-warning information */
+ dmxWarning, /**< A warning that may indicate DMX
+ * will not function as the user
+ * intends. */
+ dmxError, /**< A non-fatal error that probably
+ * indicates DMX will not function as
+ * desired.*/
+ dmxFatal /**< A fatal error that will cause DMX
+ * to shut down. */
+} dmxLogLevel;
+
+/* Logging functions used by Xserver/hw/dmx routines. */
+extern dmxLogLevel dmxSetLogLevel(dmxLogLevel newLevel);
+extern dmxLogLevel dmxGetLogLevel(void);
+extern void dmxLog(dmxLogLevel logLevel, const char *format, ...);
+extern void dmxLogCont(dmxLogLevel logLevel, const char *format, ...);
+extern const char *dmxEventName(int type);
+
+#ifndef DMX_LOG_STANDALONE
+extern void dmxLogOutput(DMXScreenInfo *dmxScreen, const char *format, ...);
+extern void dmxLogOutputCont(DMXScreenInfo *dmxScreen, const char *format,
+ ...);
+extern void dmxLogOutputWarning(DMXScreenInfo *dmxScreen, const char *format,
+ ...);
+extern void dmxLogInput(DMXInputInfo *dmxInput, const char *format, ...);
+extern void dmxLogInputCont(DMXInputInfo *dmxInput, const char *format, ...);
+extern void dmxLogArgs(dmxLogLevel logLevel, int argc, char **argv);
+extern void dmxLogVisual(DMXScreenInfo *dmxScreen, XVisualInfo *vi,
+ int defaultVisual);
+extern const char *dmxXInputEventName(int type);
+#endif
+
+#endif
diff --git a/hw/dmx/dmxpict.c b/hw/dmx/dmxpict.c
new file mode 100644
index 0000000..bbde8fd
--- /dev/null
+++ b/hw/dmx/dmxpict.c
@@ -0,0 +1,1324 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide support for the RENDER extension (version 0.8).
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxpict.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+
+#include "fb.h"
+#include "pixmapstr.h"
+#include "dixstruct.h"
+
+#include <X11/extensions/render.h>
+#include <X11/extensions/renderproto.h>
+#include <X11/extensions/Xfixes.h>
+#include "picture.h"
+#include "picturestr.h"
+#include "mipict.h"
+#include "fbpict.h"
+
+
+extern int RenderErrBase;
+extern int (*ProcRenderVector[RenderNumberRequests])(ClientPtr);
+
+static int (*dmxSaveRenderVector[RenderNumberRequests])(ClientPtr);
+
+
+static int dmxProcRenderCreateGlyphSet(ClientPtr client);
+static int dmxProcRenderFreeGlyphSet(ClientPtr client);
+static int dmxProcRenderAddGlyphs(ClientPtr client);
+static int dmxProcRenderFreeGlyphs(ClientPtr client);
+static int dmxProcRenderCompositeGlyphs(ClientPtr client);
+static int dmxProcRenderSetPictureTransform(ClientPtr client);
+static int dmxProcRenderSetPictureFilter(ClientPtr client);
+#if 0
+/* FIXME: Not (yet) supported */
+static int dmxProcRenderCreateCursor(ClientPtr client);
+static int dmxProcRenderCreateAnimCursor(ClientPtr client);
+#endif
+
+/** Catch errors that might occur when allocating Glyph Sets. Errors
+ * are saved in dmxGlyphLastError for later handling. */
+static int dmxGlyphLastError;
+static int dmxGlyphErrorHandler(Display *dpy, XErrorEvent *ev)
+{
+ dmxGlyphLastError = ev->error_code;
+ return 0;
+}
+
+
+/** Initialize the Proc Vector for the RENDER extension. The functions
+ * here cannot be handled by the mi layer RENDER hooks either because
+ * the required information is no longer available when it reaches the
+ * mi layer or no mi layer hooks exist. This function is called from
+ * InitOutput() since it should be initialized only once per server
+ * generation. */
+void dmxInitRender(void)
+{
+ int i;
+
+ for (i = 0; i < RenderNumberRequests; i++)
+ dmxSaveRenderVector[i] = ProcRenderVector[i];
+
+ ProcRenderVector[X_RenderCreateGlyphSet]
+ = dmxProcRenderCreateGlyphSet;
+ ProcRenderVector[X_RenderFreeGlyphSet]
+ = dmxProcRenderFreeGlyphSet;
+ ProcRenderVector[X_RenderAddGlyphs]
+ = dmxProcRenderAddGlyphs;
+ ProcRenderVector[X_RenderFreeGlyphs]
+ = dmxProcRenderFreeGlyphs;
+ ProcRenderVector[X_RenderCompositeGlyphs8]
+ = dmxProcRenderCompositeGlyphs;
+ ProcRenderVector[X_RenderCompositeGlyphs16]
+ = dmxProcRenderCompositeGlyphs;
+ ProcRenderVector[X_RenderCompositeGlyphs32]
+ = dmxProcRenderCompositeGlyphs;
+ ProcRenderVector[X_RenderSetPictureTransform]
+ = dmxProcRenderSetPictureTransform;
+ ProcRenderVector[X_RenderSetPictureFilter]
+ = dmxProcRenderSetPictureFilter;
+}
+
+/** Reset the Proc Vector for the RENDER extension back to the original
+ * functions. This function is called from dmxCloseScreen() during the
+ * server reset (only for screen #0). */
+void dmxResetRender(void)
+{
+ int i;
+
+ for (i = 0; i < RenderNumberRequests; i++)
+ ProcRenderVector[i] = dmxSaveRenderVector[i];
+}
+
+/** Initialize the RENDER extension, allocate the picture privates and
+ * wrap mi function hooks. If the shadow frame buffer is used, then
+ * call the appropriate fb initialization function. */
+Bool dmxPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps;
+
+ /* The shadow framebuffer only relies on FB to be initialized */
+ if (dmxShadowFB) return fbPictureInit(pScreen, formats, nformats);
+
+ if (!miPictureInit(pScreen, formats, nformats))
+ return FALSE;
+
+ if (!dixRegisterPrivateKey(&dmxPictPrivateKeyRec, PRIVATE_PICTURE, sizeof(dmxPictPrivRec)))
+ return FALSE;
+
+ ps = GetPictureScreen(pScreen);
+
+ DMX_WRAP(CreatePicture, dmxCreatePicture, dmxScreen, ps);
+ DMX_WRAP(DestroyPicture, dmxDestroyPicture, dmxScreen, ps);
+
+ DMX_WRAP(ChangePictureClip, dmxChangePictureClip, dmxScreen, ps);
+ DMX_WRAP(DestroyPictureClip, dmxDestroyPictureClip, dmxScreen, ps);
+
+ DMX_WRAP(ChangePicture, dmxChangePicture, dmxScreen, ps);
+ DMX_WRAP(ValidatePicture, dmxValidatePicture, dmxScreen, ps);
+
+ DMX_WRAP(Composite, dmxComposite, dmxScreen, ps);
+ DMX_WRAP(Glyphs, dmxGlyphs, dmxScreen, ps);
+ DMX_WRAP(CompositeRects, dmxCompositeRects, dmxScreen, ps);
+
+ DMX_WRAP(Trapezoids, dmxTrapezoids, dmxScreen, ps);
+ DMX_WRAP(Triangles, dmxTriangles, dmxScreen, ps);
+ DMX_WRAP(TriStrip, dmxTriStrip, dmxScreen, ps);
+ DMX_WRAP(TriFan, dmxTriFan, dmxScreen, ps);
+
+ return TRUE;
+}
+
+
+/** Find the appropriate format on the requested screen given the
+ * internal format requested. The list of formats is searched
+ * sequentially as the XRenderFindFormat() function does not always
+ * find the appropriate format when a specific format is requested. */
+static XRenderPictFormat *dmxFindFormat(DMXScreenInfo *dmxScreen,
+ PictFormatPtr pFmt)
+{
+ XRenderPictFormat *pFormat = NULL;
+ int i = 0;
+
+ if (!pFmt || !dmxScreen->beDisplay) return pFormat;
+
+ while (1) {
+ pFormat = XRenderFindFormat(dmxScreen->beDisplay, 0, 0, i++);
+ if (!pFormat) break;
+
+ if (pFormat->type != pFmt->type) continue;
+ if (pFormat->depth != pFmt->depth) continue;
+ if (pFormat->direct.red != pFmt->direct.red) continue;
+ if (pFormat->direct.redMask != pFmt->direct.redMask) continue;
+ if (pFormat->direct.green != pFmt->direct.green) continue;
+ if (pFormat->direct.greenMask != pFmt->direct.greenMask) continue;
+ if (pFormat->direct.blue != pFmt->direct.blue) continue;
+ if (pFormat->direct.blueMask != pFmt->direct.blueMask) continue;
+ if (pFormat->direct.alpha != pFmt->direct.alpha) continue;
+ if (pFormat->direct.alphaMask != pFmt->direct.alphaMask) continue;
+
+ /* We have a match! */
+ break;
+ }
+
+ return pFormat;
+}
+
+/** Free \a glyphSet on back-end screen number \a idx. */
+Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet)
+{
+ dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+ int idx = pScreen->myNum;
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+
+ if (glyphPriv->glyphSets[idx]) {
+ XRenderFreeGlyphSet(dmxScreen->beDisplay, glyphPriv->glyphSets[idx]);
+ glyphPriv->glyphSets[idx] = (GlyphSet)0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Create \a glyphSet on the backend screen number \a idx. */
+int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet)
+{
+ XRenderPictFormat *pFormat;
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+ PictFormatPtr pFmt = glyphSet->format;
+ int (*oldErrorHandler)(Display *, XErrorEvent *);
+
+ pFormat = dmxFindFormat(dmxScreen, pFmt);
+ if (!pFormat) {
+ return BadMatch;
+ }
+
+ dmxGlyphLastError = 0;
+ oldErrorHandler = XSetErrorHandler(dmxGlyphErrorHandler);
+
+ /* Catch when this fails */
+ glyphPriv->glyphSets[idx]
+ = XRenderCreateGlyphSet(dmxScreen->beDisplay, pFormat);
+
+ XSetErrorHandler(oldErrorHandler);
+
+ if (dmxGlyphLastError) {
+ return dmxGlyphLastError;
+ }
+
+ return Success;
+}
+
+/** Create a Glyph Set on each screen. Save the glyphset ID from each
+ * screen in the Glyph Set's private structure. Fail if the format
+ * requested is not available or if the Glyph Set cannot be created on
+ * the screen. */
+static int dmxProcRenderCreateGlyphSet(ClientPtr client)
+{
+ int ret;
+ REQUEST(xRenderCreateGlyphSetReq);
+
+ ret = dmxSaveRenderVector[stuff->renderReqType](client);
+
+ if (ret == Success) {
+ GlyphSetPtr glyphSet;
+ dmxGlyphPrivPtr glyphPriv;
+ int i;
+
+ /* Look up glyphSet that was just created ???? */
+ /* Store glyphsets from backends in glyphSet->devPrivate ????? */
+ /* Make sure we handle all errors here!! */
+
+ dixLookupResourceByType((pointer*) &glyphSet,
+ stuff->gsid, GlyphSetType,
+ client, DixDestroyAccess);
+
+ glyphPriv = malloc(sizeof(dmxGlyphPrivRec));
+ if (!glyphPriv) return BadAlloc;
+ glyphPriv->glyphSets = NULL;
+ MAXSCREENSALLOC_RETURN(glyphPriv->glyphSets, BadAlloc);
+ DMX_SET_GLYPH_PRIV(glyphSet, glyphPriv);
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ int beret;
+
+ if (!dmxScreen->beDisplay) {
+ glyphPriv->glyphSets[i] = 0;
+ continue;
+ }
+
+ if ((beret = dmxBECreateGlyphSet(i, glyphSet)) != Success) {
+ int j;
+
+ /* Free the glyph sets we've allocated thus far */
+ for (j = 0; j < i; j++)
+ dmxBEFreeGlyphSet(screenInfo.screens[j], glyphSet);
+
+ /* Free the resource created by render */
+ FreeResource(stuff->gsid, RT_NONE);
+
+ return beret;
+ }
+ }
+ }
+
+ return ret;
+}
+
+/** Free the previously allocated Glyph Sets for each screen. */
+static int dmxProcRenderFreeGlyphSet(ClientPtr client)
+{
+ GlyphSetPtr glyphSet;
+ REQUEST(xRenderFreeGlyphSetReq);
+
+ REQUEST_SIZE_MATCH(xRenderFreeGlyphSetReq);
+ dixLookupResourceByType((pointer*) &glyphSet,
+ stuff->glyphset, GlyphSetType,
+ client, DixDestroyAccess);
+
+ if (glyphSet && glyphSet->refcnt == 1) {
+ dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+ int i;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+
+ if (dmxScreen->beDisplay) {
+ if (dmxBEFreeGlyphSet(screenInfo.screens[i], glyphSet))
+ dmxSync(dmxScreen, FALSE);
+ }
+ }
+
+ MAXSCREENSFREE(glyphPriv->glyphSets);
+ free(glyphPriv);
+ DMX_SET_GLYPH_PRIV(glyphSet, NULL);
+ }
+
+ return dmxSaveRenderVector[stuff->renderReqType](client);
+}
+
+/** Add glyphs to the Glyph Set on each screen. */
+static int dmxProcRenderAddGlyphs(ClientPtr client)
+{
+ int ret;
+ REQUEST(xRenderAddGlyphsReq);
+
+ ret = dmxSaveRenderVector[stuff->renderReqType](client);
+
+ if (ret == Success) {
+ GlyphSetPtr glyphSet;
+ dmxGlyphPrivPtr glyphPriv;
+ int i;
+ int nglyphs;
+ CARD32 *gids;
+ Glyph *gidsCopy;
+ xGlyphInfo *gi;
+ CARD8 *bits;
+ int nbytes;
+
+ dixLookupResourceByType((pointer*) &glyphSet,
+ stuff->glyphset, GlyphSetType,
+ client, DixReadAccess);
+ glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+
+ nglyphs = stuff->nglyphs;
+ gids = (CARD32 *)(stuff + 1);
+ gi = (xGlyphInfo *)(gids + nglyphs);
+ bits = (CARD8 *)(gi + nglyphs);
+ nbytes = ((stuff->length << 2) -
+ sizeof(xRenderAddGlyphsReq) -
+ (sizeof(CARD32) + sizeof(xGlyphInfo)) * nglyphs);
+
+ gidsCopy = malloc(sizeof(*gidsCopy) * nglyphs);
+ for (i = 0; i < nglyphs; i++) gidsCopy[i] = gids[i];
+
+ /* FIXME: Will this ever fail? */
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+
+ if (dmxScreen->beDisplay) {
+ XRenderAddGlyphs(dmxScreen->beDisplay,
+ glyphPriv->glyphSets[i],
+ gidsCopy,
+ (XGlyphInfo *)gi,
+ nglyphs,
+ (char *)bits,
+ nbytes);
+ dmxSync(dmxScreen, FALSE);
+ }
+ }
+ free(gidsCopy);
+ }
+
+ return ret;
+}
+
+/** Free glyphs from the Glyph Set for each screen. */
+static int dmxProcRenderFreeGlyphs(ClientPtr client)
+{
+ GlyphSetPtr glyphSet;
+ REQUEST(xRenderFreeGlyphsReq);
+
+ REQUEST_AT_LEAST_SIZE(xRenderFreeGlyphsReq);
+ dixLookupResourceByType((pointer*) &glyphSet,
+ stuff->glyphset, GlyphSetType,
+ client, DixWriteAccess);
+
+ if (glyphSet) {
+ dmxGlyphPrivPtr glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+ int i;
+ int nglyphs;
+ Glyph *gids;
+
+ nglyphs = ((client->req_len << 2) - sizeof(xRenderFreeGlyphsReq)) >> 2;
+ if (nglyphs) {
+ gids = malloc(sizeof(*gids) * nglyphs);
+ for (i = 0; i < nglyphs; i++)
+ gids[i] = ((CARD32 *)(stuff + 1))[i];
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+
+ if (dmxScreen->beDisplay) {
+ XRenderFreeGlyphs(dmxScreen->beDisplay,
+ glyphPriv->glyphSets[i], gids, nglyphs);
+ dmxSync(dmxScreen, FALSE);
+ }
+ }
+ free(gids);
+ }
+ }
+
+ return dmxSaveRenderVector[stuff->renderReqType](client);
+}
+
+/** Composite glyphs on each screen into the requested picture. If
+ * either the src or dest picture has not been allocated due to lazy
+ * window creation, this request will gracefully return. */
+static int dmxProcRenderCompositeGlyphs(ClientPtr client)
+{
+ int ret;
+ REQUEST(xRenderCompositeGlyphsReq);
+
+ ret = dmxSaveRenderVector[stuff->renderReqType](client);
+
+ /* For the following to work with PanoramiX, it assumes that Render
+ * wraps the ProcRenderVector after dmxRenderInit has been called.
+ */
+ if (ret == Success) {
+ PicturePtr pSrc;
+ dmxPictPrivPtr pSrcPriv;
+ PicturePtr pDst;
+ dmxPictPrivPtr pDstPriv;
+ PictFormatPtr pFmt;
+ XRenderPictFormat *pFormat;
+ int size;
+
+ int scrnNum;
+ DMXScreenInfo *dmxScreen;
+
+ CARD8 *buffer;
+ CARD8 *end;
+ int space;
+
+ int nglyph;
+ char *glyphs;
+ char *curGlyph;
+
+ xGlyphElt *elt;
+ int nelt;
+ XGlyphElt8 *elts;
+ XGlyphElt8 *curElt;
+
+ GlyphSetPtr glyphSet;
+ dmxGlyphPrivPtr glyphPriv;
+
+ dixLookupResourceByType((pointer*) &pSrc,
+ stuff->src, PictureType,
+ client, DixReadAccess);
+
+ pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
+ if (!pSrcPriv->pict)
+ return ret;
+
+ dixLookupResourceByType((pointer*) &pDst,
+ stuff->dst, PictureType,
+ client, DixWriteAccess);
+
+ pDstPriv = DMX_GET_PICT_PRIV(pDst);
+ if (!pDstPriv->pict)
+ return ret;
+
+ scrnNum = pDst->pDrawable->pScreen->myNum;
+ dmxScreen = &dmxScreens[scrnNum];
+
+ /* Note: If the back-end display has been detached, then it
+ * should not be possible to reach here since the pSrcPriv->pict
+ * and pDstPriv->pict will have already been set to 0.
+ */
+ if (!dmxScreen->beDisplay)
+ return ret;
+
+ if (stuff->maskFormat)
+ dixLookupResourceByType((pointer*) &pFmt,
+ stuff->maskFormat, PictFormatType,
+ client, DixReadAccess);
+ else
+ pFmt = NULL;
+
+ pFormat = dmxFindFormat(dmxScreen, pFmt);
+
+ switch (stuff->renderReqType) {
+ case X_RenderCompositeGlyphs8: size = sizeof(CARD8); break;
+ case X_RenderCompositeGlyphs16: size = sizeof(CARD16); break;
+ case X_RenderCompositeGlyphs32: size = sizeof(CARD32); break;
+ default: return BadPictOp; /* Can't happen */
+ }
+
+ buffer = (CARD8 *)(stuff + 1);
+ end = (CARD8 *)stuff + (stuff->length << 2);
+ nelt = 0;
+ nglyph = 0;
+ while (buffer + sizeof(xGlyphElt) < end) {
+ elt = (xGlyphElt *)buffer;
+ buffer += sizeof(xGlyphElt);
+
+ if (elt->len == 0xff) {
+ buffer += 4;
+ } else {
+ nelt++;
+ nglyph += elt->len;
+ space = size * elt->len;
+ if (space & 3) space += 4 - (space & 3);
+ buffer += space;
+ }
+ }
+
+ /* The following only works for Render version > 0.2 */
+
+ /* All of the XGlyphElt* structure sizes are identical */
+ elts = malloc(nelt * sizeof(XGlyphElt8));
+ if (!elts)
+ return BadAlloc;
+
+ glyphs = malloc(nglyph * size);
+ if (!glyphs) {
+ free(elts);
+ return BadAlloc;
+ }
+
+ buffer = (CARD8 *)(stuff + 1);
+ end = (CARD8 *)stuff + (stuff->length << 2);
+ curGlyph = glyphs;
+ curElt = elts;
+
+ dixLookupResourceByType((pointer*) &glyphSet,
+ stuff->glyphset, GlyphSetType,
+ client, DixReadAccess);
+ glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+
+ while (buffer + sizeof(xGlyphElt) < end) {
+ elt = (xGlyphElt *)buffer;
+ buffer += sizeof(xGlyphElt);
+
+ if (elt->len == 0xff) {
+ dixLookupResourceByType((pointer*) &glyphSet,
+ *((CARD32 *)buffer),
+ GlyphSetType,
+ client,
+ DixReadAccess);
+ glyphPriv = DMX_GET_GLYPH_PRIV(glyphSet);
+ buffer += 4;
+ } else {
+ curElt->glyphset = glyphPriv->glyphSets[scrnNum];
+ curElt->xOff = elt->deltax;
+ curElt->yOff = elt->deltay;
+ curElt->nchars = elt->len;
+ curElt->chars = curGlyph;
+
+ memcpy(curGlyph, buffer, size*elt->len);
+ curGlyph += size * elt->len;
+
+ curElt++;
+
+ space = size * elt->len;
+ if (space & 3) space += 4 - (space & 3);
+ buffer += space;
+ }
+ }
+
+ switch (stuff->renderReqType) {
+ case X_RenderCompositeGlyphs8:
+ XRenderCompositeText8(dmxScreen->beDisplay, stuff->op,
+ pSrcPriv->pict, pDstPriv->pict,
+ pFormat,
+ stuff->xSrc, stuff->ySrc,
+ 0, 0, elts, nelt);
+ break;
+ case X_RenderCompositeGlyphs16:
+ XRenderCompositeText16(dmxScreen->beDisplay, stuff->op,
+ pSrcPriv->pict, pDstPriv->pict,
+ pFormat,
+ stuff->xSrc, stuff->ySrc,
+ 0, 0, (XGlyphElt16 *)elts, nelt);
+ break;
+ case X_RenderCompositeGlyphs32:
+ XRenderCompositeText32(dmxScreen->beDisplay, stuff->op,
+ pSrcPriv->pict, pDstPriv->pict,
+ pFormat,
+ stuff->xSrc, stuff->ySrc,
+ 0, 0, (XGlyphElt32 *)elts, nelt);
+ break;
+ }
+
+ dmxSync(dmxScreen, FALSE);
+
+ free(elts);
+ free(glyphs);
+ }
+
+ return ret;
+}
+
+/** Set the picture transform on each screen. */
+static int dmxProcRenderSetPictureTransform(ClientPtr client)
+{
+ DMXScreenInfo *dmxScreen;
+ PicturePtr pPicture;
+ dmxPictPrivPtr pPictPriv;
+ XTransform xform;
+ REQUEST(xRenderSetPictureTransformReq);
+
+ REQUEST_SIZE_MATCH(xRenderSetPictureTransformReq);
+ VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess);
+
+ /* For the following to work with PanoramiX, it assumes that Render
+ * wraps the ProcRenderVector after dmxRenderInit has been called.
+ */
+ dmxScreen = &dmxScreens[pPicture->pDrawable->pScreen->myNum];
+ pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ if (pPictPriv->pict) {
+ xform.matrix[0][0] = stuff->transform.matrix11;
+ xform.matrix[0][1] = stuff->transform.matrix12;
+ xform.matrix[0][2] = stuff->transform.matrix13;
+ xform.matrix[1][0] = stuff->transform.matrix21;
+ xform.matrix[1][1] = stuff->transform.matrix22;
+ xform.matrix[1][2] = stuff->transform.matrix23;
+ xform.matrix[2][0] = stuff->transform.matrix31;
+ xform.matrix[2][1] = stuff->transform.matrix32;
+ xform.matrix[2][2] = stuff->transform.matrix33;
+
+ XRenderSetPictureTransform(dmxScreen->beDisplay,
+ pPictPriv->pict,
+ &xform);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ return dmxSaveRenderVector[stuff->renderReqType](client);
+}
+
+/** Set the picture filter on each screen. */
+static int dmxProcRenderSetPictureFilter(ClientPtr client)
+{
+ DMXScreenInfo *dmxScreen;
+ PicturePtr pPicture;
+ dmxPictPrivPtr pPictPriv;
+ char *filter;
+ XFixed *params;
+ int nparams;
+ REQUEST(xRenderSetPictureFilterReq);
+
+ REQUEST_AT_LEAST_SIZE(xRenderSetPictureFilterReq);
+ VERIFY_PICTURE(pPicture, stuff->picture, client, DixWriteAccess);
+
+ /* For the following to work with PanoramiX, it assumes that Render
+ * wraps the ProcRenderVector after dmxRenderInit has been called.
+ */
+ dmxScreen = &dmxScreens[pPicture->pDrawable->pScreen->myNum];
+ pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ if (pPictPriv->pict) {
+ filter = (char *)(stuff + 1);
+ params = (XFixed *)(filter + ((stuff->nbytes + 3) & ~3));
+ nparams = ((XFixed *)stuff + client->req_len) - params;
+
+ XRenderSetPictureFilter(dmxScreen->beDisplay,
+ pPictPriv->pict,
+ filter,
+ params,
+ nparams);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ return dmxSaveRenderVector[stuff->renderReqType](client);
+}
+
+
+/** Create a picture on the appropriate screen. This is the actual
+ * function that creates the picture. However, if the associated
+ * window has not yet been created due to lazy window creation, then
+ * delay the picture creation until the window is mapped. */
+static Picture dmxDoCreatePicture(PicturePtr pPicture)
+{
+ DrawablePtr pDraw = pPicture->pDrawable;
+ ScreenPtr pScreen = pDraw->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ XRenderPictFormat *pFormat;
+ Drawable draw;
+
+ if (pPicture->pDrawable->type == DRAWABLE_WINDOW) {
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV((WindowPtr)(pDraw));
+
+ if (!(draw = pWinPriv->window)) {
+ /* Window has not been created yet due to the window
+ * optimization. Delay picture creation until window is
+ * mapped.
+ */
+ pWinPriv->hasPict = TRUE;
+ return 0;
+ }
+ } else {
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV((PixmapPtr)(pDraw));
+
+ if (!(draw = pPixPriv->pixmap)) {
+ /* FIXME: Zero width/height pixmap?? */
+ return 0;
+ }
+ }
+
+ /* This should not be reached if the back-end display has been
+ * detached because the pWinPriv->window or the pPixPriv->pixmap
+ * will be NULL; however, we add it here for completeness
+ */
+ if (!dmxScreen->beDisplay)
+ return 0;
+
+ pFormat = dmxFindFormat(dmxScreen, pPicture->pFormat);
+
+ return XRenderCreatePicture(dmxScreen->beDisplay, draw, pFormat, 0, 0);
+}
+
+/** Create a list of pictures. This function is called by
+ * dmxCreateAndRealizeWindow() during the lazy window creation
+ * realization process. It creates the entire list of pictures that
+ * are associated with the given window. */
+void dmxCreatePictureList(WindowPtr pWindow)
+{
+ PicturePtr pPicture = GetPictureWindow(pWindow);
+
+ while (pPicture) {
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ /* Create the picture for this window */
+ pPictPriv->pict = dmxDoCreatePicture(pPicture);
+
+ /* ValidatePicture takes care of the state changes */
+
+ pPicture = pPicture->pNext;
+ }
+}
+
+/** Create \a pPicture on the backend. */
+int dmxBECreatePicture(PicturePtr pPicture)
+{
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ /* Create picutre on BE */
+ pPictPriv->pict = dmxDoCreatePicture(pPicture);
+
+ /* Flush changes to the backend server */
+ dmxValidatePicture(pPicture, (1 << (CPLastBit+1)) - 1);
+
+ return Success;
+}
+
+/** Create a picture. This function handles the CreatePicture
+ * unwrapping/wrapping and calls dmxDoCreatePicture to actually create
+ * the picture on the appropriate screen. */
+int dmxCreatePicture(PicturePtr pPicture)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+ int ret = Success;
+
+ DMX_UNWRAP(CreatePicture, dmxScreen, ps);
+#if 1
+ if (ps->CreatePicture)
+ ret = ps->CreatePicture(pPicture);
+#endif
+
+ /* Create picture on back-end server */
+ pPictPriv->pict = dmxDoCreatePicture(pPicture);
+ pPictPriv->savedMask = 0;
+
+ DMX_WRAP(CreatePicture, dmxCreatePicture, dmxScreen, ps);
+
+ return ret;
+}
+
+/** Destroy \a pPicture on the back-end server. */
+Bool dmxBEFreePicture(PicturePtr pPicture)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ if (pPictPriv->pict) {
+ XRenderFreePicture(dmxScreen->beDisplay, pPictPriv->pict);
+ pPictPriv->pict = (Picture)0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Destroy a list of pictures that are associated with the window that
+ * is being destroyed. This function is called by #dmxDestroyWindow().
+ * */
+Bool dmxDestroyPictureList(WindowPtr pWindow)
+{
+ PicturePtr pPicture = GetPictureWindow(pWindow);
+ Bool ret = FALSE;
+
+ while (pPicture) {
+ ret |= dmxBEFreePicture(pPicture);
+ pPicture = pPicture->pNext;
+ }
+
+ return ret;
+}
+
+/** Destroy a picture. This function calls the wrapped function that
+ * frees the resources in the DMX server associated with this
+ * picture. */
+void dmxDestroyPicture(PicturePtr pPicture)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+
+ DMX_UNWRAP(DestroyPicture, dmxScreen, ps);
+
+ /* Destroy picture on back-end server */
+ if (dmxBEFreePicture(pPicture))
+ dmxSync(dmxScreen, FALSE);
+
+#if 1
+ if (ps->DestroyPicture)
+ ps->DestroyPicture(pPicture);
+#endif
+ DMX_WRAP(DestroyPicture, dmxDestroyPicture, dmxScreen, ps);
+}
+
+/** Change the picture's list of clip rectangles. */
+int dmxChangePictureClip(PicturePtr pPicture, int clipType,
+ pointer value, int n)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ DMX_UNWRAP(ChangePictureClip, dmxScreen, ps);
+#if 1
+ if (ps->ChangePictureClip)
+ ps->ChangePictureClip(pPicture, clipType, value, n);
+#endif
+
+ /* Change picture clip rects on back-end server */
+ if (pPictPriv->pict) {
+ /* The clip has already been changed into a region by the mi
+ * routine called above.
+ */
+ if (clipType == CT_NONE) {
+ /* Disable clipping, show all */
+ XFixesSetPictureClipRegion(dmxScreen->beDisplay,
+ pPictPriv->pict, 0, 0, None);
+ } else if (pPicture->clientClip) {
+ RegionPtr pClip = pPicture->clientClip;
+ BoxPtr pBox = RegionRects(pClip);
+ int nBox = RegionNumRects(pClip);
+ XRectangle *pRects;
+ XRectangle *pRect;
+ int nRects;
+
+ nRects = nBox;
+ pRects = pRect = malloc(nRects * sizeof(*pRect));
+
+ while (nBox--) {
+ pRect->x = pBox->x1;
+ pRect->y = pBox->y1;
+ pRect->width = pBox->x2 - pBox->x1;
+ pRect->height = pBox->y2 - pBox->y1;
+ pBox++;
+ pRect++;
+ }
+
+ XRenderSetPictureClipRectangles(dmxScreen->beDisplay,
+ pPictPriv->pict,
+ 0, 0,
+ pRects,
+ nRects);
+ free(pRects);
+ } else {
+ XRenderSetPictureClipRectangles(dmxScreen->beDisplay,
+ pPictPriv->pict,
+ 0, 0, NULL, 0);
+ }
+ dmxSync(dmxScreen, FALSE);
+ } else {
+ /* FIXME: Handle saving clip region when offscreen */
+ }
+
+ DMX_WRAP(ChangePictureClip, dmxChangePictureClip, dmxScreen, ps);
+
+ return Success;
+}
+
+/** Destroy the picture's list of clip rectangles. */
+void dmxDestroyPictureClip(PicturePtr pPicture)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ DMX_UNWRAP(DestroyPictureClip, dmxScreen, ps);
+#if 1
+ if (ps->DestroyPictureClip)
+ ps->DestroyPictureClip(pPicture);
+#endif
+
+ /* Destroy picture clip rects on back-end server */
+ if (pPictPriv->pict) {
+ XRenderSetPictureClipRectangles(dmxScreen->beDisplay,
+ pPictPriv->pict,
+ 0, 0, NULL, 0);
+ dmxSync(dmxScreen, FALSE);
+ } else {
+ /* FIXME: Handle destroying clip region when offscreen */
+ }
+
+ DMX_WRAP(DestroyPictureClip, dmxDestroyPictureClip, dmxScreen, ps);
+}
+
+/** Change the attributes of the pictures. If the picture has not yet
+ * been created due to lazy window creation, save the mask so that it
+ * can be used to appropriately initialize the picture's attributes
+ * when it is created later. */
+void dmxChangePicture(PicturePtr pPicture, Mask mask)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ DMX_UNWRAP(ChangePicture, dmxScreen, ps);
+#if 1
+ if (ps->ChangePicture)
+ ps->ChangePicture(pPicture, mask);
+#endif
+
+ /* Picture attribute changes are handled in ValidatePicture */
+ pPictPriv->savedMask |= mask;
+
+ DMX_WRAP(ChangePicture, dmxChangePicture, dmxScreen, ps);
+}
+
+/** Validate the picture's attributes before rendering to it. Update
+ * any picture attributes that have been changed by one of the higher
+ * layers. */
+void dmxValidatePicture(PicturePtr pPicture, Mask mask)
+{
+ ScreenPtr pScreen = pPicture->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pPicture);
+
+ DMX_UNWRAP(ValidatePicture, dmxScreen, ps);
+
+ /* Change picture attributes on back-end server */
+ if (pPictPriv->pict) {
+ XRenderPictureAttributes attribs;
+
+ if (mask & CPRepeat) {
+ attribs.repeat = pPicture->repeatType;
+ }
+ if (mask & CPAlphaMap) {
+ if (pPicture->alphaMap) {
+ dmxPictPrivPtr pAlphaPriv;
+ pAlphaPriv = DMX_GET_PICT_PRIV(pPicture->alphaMap);
+ if (pAlphaPriv->pict) {
+ attribs.alpha_map = pAlphaPriv->pict;
+ } else {
+ /* FIXME: alpha picture drawable has not been created?? */
+ return; /* or should this be: attribs.alpha_map = None; */
+ }
+ } else {
+ attribs.alpha_map = None;
+ }
+ }
+ if (mask & CPAlphaXOrigin)
+ attribs.alpha_x_origin = pPicture->alphaOrigin.x;
+ if (mask & CPAlphaYOrigin)
+ attribs.alpha_y_origin = pPicture->alphaOrigin.y;
+ if (mask & CPClipXOrigin)
+ attribs.clip_x_origin = pPicture->clipOrigin.x;
+ if (mask & CPClipYOrigin)
+ attribs.clip_y_origin = pPicture->clipOrigin.y;
+ if (mask & CPClipMask)
+ mask &= ~CPClipMask; /* Handled in ChangePictureClip */
+ if (mask & CPGraphicsExposure)
+ attribs.graphics_exposures = pPicture->graphicsExposures;
+ if (mask & CPSubwindowMode)
+ attribs.subwindow_mode = pPicture->subWindowMode;
+ if (mask & CPPolyEdge)
+ attribs.poly_edge = pPicture->polyEdge;
+ if (mask & CPPolyMode)
+ attribs.poly_mode = pPicture->polyMode;
+ if (mask & CPComponentAlpha)
+ attribs.component_alpha = pPicture->componentAlpha;
+
+ XRenderChangePicture(dmxScreen->beDisplay, pPictPriv->pict,
+ mask, &attribs);
+ dmxSync(dmxScreen, FALSE);
+ } else {
+ pPictPriv->savedMask |= mask;
+ }
+
+#if 1
+ if (ps->ValidatePicture)
+ ps->ValidatePicture(pPicture, mask);
+#endif
+
+ DMX_WRAP(ValidatePicture, dmxValidatePicture, dmxScreen, ps);
+}
+
+/** Composite a picture on the appropriate screen by combining the
+ * specified rectangle of the transformed src and mask operands with
+ * the specified rectangle of the dst using op as the compositing
+ * operator. For a complete description see the protocol document of
+ * the RENDER library. */
+void dmxComposite(CARD8 op,
+ PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+ INT16 xSrc, INT16 ySrc,
+ INT16 xMask, INT16 yMask,
+ INT16 xDst, INT16 yDst,
+ CARD16 width, CARD16 height)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
+ dmxPictPrivPtr pMaskPriv = NULL;
+ dmxPictPrivPtr pDstPriv = DMX_GET_PICT_PRIV(pDst);
+
+ if (pMask) pMaskPriv = DMX_GET_PICT_PRIV(pMask);
+
+ DMX_UNWRAP(Composite, dmxScreen, ps);
+#if 0
+ if (ps->Composite)
+ ps->Composite(op, pSrc, pMask, pDst,
+ xSrc, ySrc, xMask, yMask, xDst, yDst,
+ width, height);
+#endif
+
+ /* Composite on back-end server */
+ if (pSrcPriv->pict && pDstPriv->pict &&
+ ((pMaskPriv && pMaskPriv->pict) || !pMaskPriv)) {
+ XRenderComposite(dmxScreen->beDisplay,
+ op,
+ pSrcPriv->pict,
+ pMaskPriv ? pMaskPriv->pict : None,
+ pDstPriv->pict,
+ xSrc, ySrc,
+ xMask, yMask,
+ xDst, yDst,
+ width, height);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+
+ DMX_WRAP(Composite, dmxComposite, dmxScreen, ps);
+}
+
+/** Null function to catch when/if RENDER calls lower level mi hooks.
+ * Compositing glyphs is handled by dmxProcRenderCompositeGlyphs().
+ * This function should never be called. */
+void dmxGlyphs(CARD8 op,
+ PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int nlists, GlyphListPtr lists, GlyphPtr *glyphs)
+{
+ /* This won't work, so we need to wrap ProcRenderCompositeGlyphs */
+}
+
+/** Fill a rectangle on the appropriate screen by combining the color
+ * with the dest picture in the area specified by the list of
+ * rectangles. For a complete description see the protocol document of
+ * the RENDER library. */
+void dmxCompositeRects(CARD8 op,
+ PicturePtr pDst,
+ xRenderColor *color,
+ int nRect, xRectangle *rects)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pPictPriv = DMX_GET_PICT_PRIV(pDst);
+
+ DMX_UNWRAP(CompositeRects, dmxScreen, ps);
+#if 0
+ if (ps->CompositeRects)
+ ps->CompositeRects(op, pDst, color, nRect, rects);
+#endif
+
+ /* CompositeRects on back-end server */
+ if (pPictPriv->pict) {
+ XRenderFillRectangles(dmxScreen->beDisplay,
+ op,
+ pPictPriv->pict,
+ (XRenderColor *)color,
+ (XRectangle *)rects,
+ nRect);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_WRAP(CompositeRects, dmxCompositeRects, dmxScreen, ps);
+}
+
+/** Indexed color visuals are not yet supported. */
+Bool dmxInitIndexed(ScreenPtr pScreen, PictFormatPtr pFormat)
+{
+ return TRUE;
+}
+
+/** Indexed color visuals are not yet supported. */
+void dmxCloseIndexed(ScreenPtr pScreen, PictFormatPtr pFormat)
+{
+}
+
+/** Indexed color visuals are not yet supported. */
+void dmxUpdateIndexed(ScreenPtr pScreen, PictFormatPtr pFormat,
+ int ndef, xColorItem *pdef)
+{
+}
+
+/** Composite a list of trapezoids on the appropriate screen. For a
+ * complete description see the protocol document of the RENDER
+ * library. */
+void dmxTrapezoids(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int ntrap, xTrapezoid *traps)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
+ dmxPictPrivPtr pDstPriv = DMX_GET_PICT_PRIV(pDst);
+
+ DMX_UNWRAP(Trapezoids, dmxScreen, ps);
+#if 0
+ if (ps->Trapezoids)
+ ps->Trapezoids(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntrap, *traps);
+#endif
+
+ /* Draw trapezoids on back-end server */
+ if (pDstPriv->pict) {
+ XRenderPictFormat *pFormat;
+
+ pFormat = dmxFindFormat(dmxScreen, maskFormat);
+ if (!pFormat) {
+ /* FIXME: Error! */
+ }
+
+ XRenderCompositeTrapezoids(dmxScreen->beDisplay,
+ op,
+ pSrcPriv->pict,
+ pDstPriv->pict,
+ pFormat,
+ xSrc, ySrc,
+ (XTrapezoid *)traps,
+ ntrap);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_WRAP(Trapezoids, dmxTrapezoids, dmxScreen, ps);
+}
+
+/** Composite a list of triangles on the appropriate screen. For a
+ * complete description see the protocol document of the RENDER
+ * library. */
+void dmxTriangles(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int ntri, xTriangle *tris)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
+ dmxPictPrivPtr pDstPriv = DMX_GET_PICT_PRIV(pDst);
+
+ DMX_UNWRAP(Triangles, dmxScreen, ps);
+#if 0
+ if (ps->Triangles)
+ ps->Triangles(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntri, *tris);
+#endif
+
+ /* Draw trapezoids on back-end server */
+ if (pDstPriv->pict) {
+ XRenderPictFormat *pFormat;
+
+ pFormat = dmxFindFormat(dmxScreen, maskFormat);
+ if (!pFormat) {
+ /* FIXME: Error! */
+ }
+
+ XRenderCompositeTriangles(dmxScreen->beDisplay,
+ op,
+ pSrcPriv->pict,
+ pDstPriv->pict,
+ pFormat,
+ xSrc, ySrc,
+ (XTriangle *)tris,
+ ntri);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_WRAP(Triangles, dmxTriangles, dmxScreen, ps);
+}
+
+/** Composite a triangle strip on the appropriate screen. For a
+ * complete description see the protocol document of the RENDER
+ * library. */
+void dmxTriStrip(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int npoint, xPointFixed *points)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
+ dmxPictPrivPtr pDstPriv = DMX_GET_PICT_PRIV(pDst);
+
+ DMX_UNWRAP(TriStrip, dmxScreen, ps);
+#if 0
+ if (ps->TriStrip)
+ ps->TriStrip(op, pSrc, pDst, maskFormat, xSrc, ySrc, npoint, *points);
+#endif
+
+ /* Draw trapezoids on back-end server */
+ if (pDstPriv->pict) {
+ XRenderPictFormat *pFormat;
+
+ pFormat = dmxFindFormat(dmxScreen, maskFormat);
+ if (!pFormat) {
+ /* FIXME: Error! */
+ }
+
+ XRenderCompositeTriStrip(dmxScreen->beDisplay,
+ op,
+ pSrcPriv->pict,
+ pDstPriv->pict,
+ pFormat,
+ xSrc, ySrc,
+ (XPointFixed *)points,
+ npoint);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_WRAP(TriStrip, dmxTriStrip, dmxScreen, ps);
+}
+
+/** Composite a triangle fan on the appropriate screen. For a complete
+ * description see the protocol document of the RENDER library. */
+void dmxTriFan(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int npoint, xPointFixed *points)
+{
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PictureScreenPtr ps = GetPictureScreen(pScreen);
+ dmxPictPrivPtr pSrcPriv = DMX_GET_PICT_PRIV(pSrc);
+ dmxPictPrivPtr pDstPriv = DMX_GET_PICT_PRIV(pDst);
+
+ DMX_UNWRAP(TriFan, dmxScreen, ps);
+#if 0
+ if (ps->TriFan)
+ ps->TriFan(op, pSrc, pDst, maskFormat, xSrc, ySrc, npoint, *points);
+#endif
+
+ /* Draw trapezoids on back-end server */
+ if (pDstPriv->pict) {
+ XRenderPictFormat *pFormat;
+
+ pFormat = dmxFindFormat(dmxScreen, maskFormat);
+ if (!pFormat) {
+ /* FIXME: Error! */
+ }
+
+ XRenderCompositeTriFan(dmxScreen->beDisplay,
+ op,
+ pSrcPriv->pict,
+ pDstPriv->pict,
+ pFormat,
+ xSrc, ySrc,
+ (XPointFixed *)points,
+ npoint);
+ dmxSync(dmxScreen, FALSE);
+ }
+
+ DMX_WRAP(TriFan, dmxTriFan, dmxScreen, ps);
+}
diff --git a/hw/dmx/dmxpict.h b/hw/dmx/dmxpict.h
new file mode 100644
index 0000000..3c8a09c
--- /dev/null
+++ b/hw/dmx/dmxpict.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides access to the externally visible RENDER support
+ * functions, global variables and macros for DMX.
+ *
+ * FIXME: Move function definitions for non-externally visible function
+ * to .c file. */
+
+#ifndef DMXPICT_H
+#define DMXPICT_H
+
+/** Picture private structure */
+typedef struct _dmxPictPriv {
+ Picture pict; /**< Picture ID from back-end server */
+ Mask savedMask; /**< Mask of picture attributes saved for
+ * lazy window creation. */
+} dmxPictPrivRec, *dmxPictPrivPtr;
+
+
+/** Glyph Set private structure */
+typedef struct _dmxGlyphPriv {
+ GlyphSet *glyphSets; /**< Glyph Set IDs from back-end server */
+} dmxGlyphPrivRec, *dmxGlyphPrivPtr;
+
+
+extern void dmxInitRender(void);
+extern void dmxResetRender(void);
+
+extern Bool dmxPictureInit(ScreenPtr pScreen,
+ PictFormatPtr formats, int nformats);
+
+extern void dmxCreatePictureList(WindowPtr pWindow);
+extern Bool dmxDestroyPictureList(WindowPtr pWindow);
+
+extern int dmxCreatePicture(PicturePtr pPicture);
+extern void dmxDestroyPicture(PicturePtr pPicture);
+extern int dmxChangePictureClip(PicturePtr pPicture, int clipType,
+ pointer value, int n);
+extern void dmxDestroyPictureClip(PicturePtr pPicture);
+extern void dmxChangePicture(PicturePtr pPicture, Mask mask);
+extern void dmxValidatePicture(PicturePtr pPicture, Mask mask);
+extern void dmxComposite(CARD8 op,
+ PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+ INT16 xSrc, INT16 ySrc,
+ INT16 xMask, INT16 yMask,
+ INT16 xDst, INT16 yDst,
+ CARD16 width, CARD16 height);
+extern void dmxGlyphs(CARD8 op,
+ PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int nlists, GlyphListPtr lists, GlyphPtr *glyphs);
+extern void dmxCompositeRects(CARD8 op,
+ PicturePtr pDst,
+ xRenderColor *color,
+ int nRect, xRectangle *rects);
+extern Bool dmxInitIndexed(ScreenPtr pScreen, PictFormatPtr pFormat);
+extern void dmxCloseIndexed(ScreenPtr pScreen, PictFormatPtr pFormat);
+extern void dmxUpdateIndexed(ScreenPtr pScreen, PictFormatPtr pFormat,
+ int ndef, xColorItem *pdef);
+extern void dmxTrapezoids(CARD8 op,
+ PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int ntrap, xTrapezoid *traps);
+extern void dmxTriangles(CARD8 op,
+ PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int ntri, xTriangle *tris);
+extern void dmxTriStrip(CARD8 op,
+ PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int npoint, xPointFixed *points);
+extern void dmxTriFan(CARD8 op,
+ PicturePtr pSrc, PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+ int npoint, xPointFixed *points);
+
+extern int dmxBECreateGlyphSet(int idx, GlyphSetPtr glyphSet);
+extern Bool dmxBEFreeGlyphSet(ScreenPtr pScreen, GlyphSetPtr glyphSet);
+extern int dmxBECreatePicture(PicturePtr pPicture);
+extern Bool dmxBEFreePicture(PicturePtr pPicture);
+
+/** Get the picture private data given a picture pointer */
+#define DMX_GET_PICT_PRIV(_pPict) \
+ (dmxPictPrivPtr)dixLookupPrivate(&(_pPict)->devPrivates, dmxPictPrivateKey)
+
+/** Set the glyphset private data given a glyphset pointer */
+#define DMX_SET_GLYPH_PRIV(_pGlyph, _pPriv) \
+ GlyphSetSetPrivate((_pGlyph), dmxGlyphSetPrivateKey, (_pPriv))
+/** Get the glyphset private data given a glyphset pointer */
+#define DMX_GET_GLYPH_PRIV(_pGlyph) \
+ (dmxGlyphPrivPtr)GlyphSetGetPrivate((_pGlyph), dmxGlyphSetPrivateKey)
+
+#endif /* DMXPICT_H */
diff --git a/hw/dmx/dmxpixmap.c b/hw/dmx/dmxpixmap.c
new file mode 100644
index 0000000..81b7115
--- /dev/null
+++ b/hw/dmx/dmxpixmap.c
@@ -0,0 +1,251 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Provides pixmap support. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxpixmap.h"
+
+#include "pixmapstr.h"
+#include "servermd.h"
+#include "privates.h"
+
+/** Initialize a private area in \a pScreen for pixmap information. */
+Bool dmxInitPixmap(ScreenPtr pScreen)
+{
+ if (!dixRegisterPrivateKey(&dmxPixPrivateKeyRec, PRIVATE_PIXMAP, sizeof(dmxPixPrivRec)))
+ return FALSE;
+
+ return TRUE;
+}
+
+/** Create a pixmap on the back-end server. */
+void dmxBECreatePixmap(PixmapPtr pPixmap)
+{
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+
+ /* Make sure we haven't already created this pixmap. This can
+ * happen when the pixmap is used elsewhere (e.g., as a background
+ * or border for a window) and the refcnt > 1.
+ */
+ if (pPixPriv->pixmap)
+ return;
+
+ if (pPixmap->drawable.width && pPixmap->drawable.height) {
+ pPixPriv->pixmap = XCreatePixmap(dmxScreen->beDisplay,
+ dmxScreen->scrnWin,
+ pPixmap->drawable.width,
+ pPixmap->drawable.height,
+ pPixmap->drawable.depth);
+ dmxSync(dmxScreen, FALSE);
+ }
+}
+
+/** Create a pixmap for \a pScreen with the specified \a width, \a
+ * height, and \a depth. */
+PixmapPtr dmxCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
+ unsigned usage_hint)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ PixmapPtr pPixmap;
+ int bpp;
+ dmxPixPrivPtr pPixPriv;
+
+#if 0
+ DMX_UNWRAP(CreatePixmap, dmxScreen, pScreen);
+ if (pScreen->CreatePixmap)
+ ret = pScreen->CreatePixmap(pPixmap);
+#endif
+
+ /* Create pixmap on back-end server */
+ if (depth == 24) bpp = 32;
+ else bpp = depth;
+
+ pPixmap = AllocatePixmap(pScreen, 0);
+ if (!pPixmap)
+ return NullPixmap;
+
+ pPixmap->drawable.type = DRAWABLE_PIXMAP;
+ pPixmap->drawable.class = 0;
+ pPixmap->drawable.pScreen = pScreen;
+ pPixmap->drawable.depth = depth;
+ pPixmap->drawable.bitsPerPixel = bpp;
+ pPixmap->drawable.id = 0;
+ pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
+ pPixmap->drawable.x = 0;
+ pPixmap->drawable.y = 0;
+ pPixmap->drawable.width = width;
+ pPixmap->drawable.height = height;
+ pPixmap->devKind = PixmapBytePad(width, bpp);
+ pPixmap->refcnt = 1;
+ pPixmap->usage_hint = usage_hint;
+
+ pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+ pPixPriv->pixmap = (Pixmap)0;
+ pPixPriv->detachedImage = NULL;
+
+ /* Create the pixmap on the back-end server */
+ if (dmxScreen->beDisplay) {
+ dmxBECreatePixmap(pPixmap);
+ }
+
+#if 0
+ DMX_WRAP(CreatePixmap, dmxCreatePixmap, dmxScreen, pScreen);
+#endif
+
+ return pPixmap;
+}
+
+/** Destroy the pixmap on the back-end server. */
+Bool dmxBEFreePixmap(PixmapPtr pPixmap)
+{
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+
+ if (pPixPriv->pixmap) {
+ XFreePixmap(dmxScreen->beDisplay, pPixPriv->pixmap);
+ pPixPriv->pixmap = (Pixmap)0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Destroy the pixmap pointed to by \a pPixmap. */
+Bool dmxDestroyPixmap(PixmapPtr pPixmap)
+{
+ ScreenPtr pScreen = pPixmap->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+
+#if 0
+ DMX_UNWRAP(DestroyPixmap, dmxScreen, pScreen);
+#endif
+
+ if (--pPixmap->refcnt)
+ return TRUE;
+
+ /* Destroy pixmap on back-end server */
+ if (dmxScreen->beDisplay) {
+ if (dmxBEFreePixmap(pPixmap)) {
+ /* Also make sure that we destroy any detached image */
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+ if (pPixPriv->detachedImage)
+ XDestroyImage(pPixPriv->detachedImage);
+ dmxSync(dmxScreen, FALSE);
+ }
+ }
+ FreePixmap(pPixmap);
+
+#if 0
+ if (pScreen->DestroyPixmap)
+ ret = pScreen->DestroyPixmap(pPixmap);
+ DMX_WRAP(DestroyPixmap, dmxDestroyPixmap, dmxScreen, pScreen);
+#endif
+
+ return ret;
+}
+
+/** Create and return a region based on the pixmap pointed to by \a
+ * pPixmap. */
+RegionPtr dmxBitmapToRegion(PixmapPtr pPixmap)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pPixmap->drawable.pScreen->myNum];
+ dmxPixPrivPtr pPixPriv = DMX_GET_PIXMAP_PRIV(pPixmap);
+ XImage *ximage;
+ RegionPtr pReg, pTmpReg;
+ int x, y;
+ unsigned long previousPixel, currentPixel;
+ BoxRec Box;
+ Bool overlap;
+
+ if (!dmxScreen->beDisplay) {
+ pReg = RegionCreate(NullBox, 1);
+ return pReg;
+ }
+
+ ximage = XGetImage(dmxScreen->beDisplay, pPixPriv->pixmap, 0, 0,
+ pPixmap->drawable.width, pPixmap->drawable.height,
+ 1, XYPixmap);
+
+ pReg = RegionCreate(NullBox, 1);
+ pTmpReg = RegionCreate(NullBox, 1);
+ if(!pReg || !pTmpReg) {
+ XDestroyImage(ximage);
+ return NullRegion;
+ }
+
+ for (y = 0; y < pPixmap->drawable.height; y++) {
+ Box.y1 = y;
+ Box.y2 = y + 1;
+ previousPixel = 0L;
+ for (x = 0; x < pPixmap->drawable.width; x++) {
+ currentPixel = XGetPixel(ximage, x, y);
+ if (previousPixel != currentPixel) {
+ if (previousPixel == 0L) {
+ /* left edge */
+ Box.x1 = x;
+ } else if (currentPixel == 0L) {
+ /* right edge */
+ Box.x2 = x;
+ RegionReset(pTmpReg, &Box);
+ RegionAppend(pReg, pTmpReg);
+ }
+ previousPixel = currentPixel;
+ }
+ }
+ if (previousPixel != 0L) {
+ /* right edge because of the end of pixmap */
+ Box.x2 = pPixmap->drawable.width;
+ RegionReset(pTmpReg, &Box);
+ RegionAppend(pReg, pTmpReg);
+ }
+ }
+
+ RegionDestroy(pTmpReg);
+ XDestroyImage(ximage);
+
+ RegionValidate(pReg, &overlap);
+
+ dmxSync(dmxScreen, FALSE);
+ return pReg;
+}
diff --git a/hw/dmx/dmxpixmap.h b/hw/dmx/dmxpixmap.h
new file mode 100644
index 0000000..59da788
--- /dev/null
+++ b/hw/dmx/dmxpixmap.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for pixmap support. \see dmxpixmap.c */
+
+#ifndef DMXPIXMAP_H
+#define DMXPIXMAP_H
+
+#include "pixmapstr.h"
+
+/** Pixmap private area. */
+typedef struct _dmxPixPriv {
+ Pixmap pixmap;
+ XImage *detachedImage;
+} dmxPixPrivRec, *dmxPixPrivPtr;
+
+
+extern Bool dmxInitPixmap(ScreenPtr pScreen);
+
+extern PixmapPtr dmxCreatePixmap(ScreenPtr pScreen,
+ int width, int height, int depth,
+ unsigned usage_hint);
+extern Bool dmxDestroyPixmap(PixmapPtr pPixmap);
+extern RegionPtr dmxBitmapToRegion(PixmapPtr pPixmap);
+
+extern void dmxBECreatePixmap(PixmapPtr pPixmap);
+extern Bool dmxBEFreePixmap(PixmapPtr pPixmap);
+
+/** Get pixmap private pointer. */
+#define DMX_GET_PIXMAP_PRIV(_pPix) \
+ (dmxPixPrivPtr)dixLookupPrivate(&(_pPix)->devPrivates, dmxPixPrivateKey)
+
+#endif /* DMXPIXMAP_H */
diff --git a/hw/dmx/dmxprop.c b/hw/dmx/dmxprop.c
new file mode 100644
index 0000000..d4618e3
--- /dev/null
+++ b/hw/dmx/dmxprop.c
@@ -0,0 +1,347 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * It is possible for one of the DMX "backend displays" to actually be
+ * smaller than the dimensions of the backend X server. Therefore, it
+ * is possible for more than one of the DMX "backend displays" to be
+ * physically located on the same backend X server. This situation must
+ * be detected so that cursor motion can be handled in an expected
+ * fashion.
+ *
+ * We could analyze the names used for the DMX "backend displays" (e.g.,
+ * the names passed to the -display command-line parameter), but there
+ * are many possible names for a single X display, and failing to detect
+ * sameness leads to very unexpected results. Therefore, whenever the
+ * DMX server opens a window on a backend X server, a property value is
+ * queried and set on that backend to detect when another window is
+ * already open on that server.
+ *
+ * Further, it is possible that two different DMX server instantiations
+ * both have windows on the same physical backend X server. This case
+ * is also detected so that pointer input is not taken from that
+ * particular backend X server.
+ *
+ * The routines in this file handle the property management. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxprop.h"
+#include "dmxlog.h"
+
+/** Holds the window id of all DMX windows on the backend X server. */
+#define DMX_ATOMNAME "DMX_NAME"
+
+/** The identification string of this DMX server */
+#define DMX_IDENT "Xdmx"
+
+extern char *display;
+
+static int dmxPropertyErrorHandler(Display *dpy, XErrorEvent *ev)
+{
+ return 0;
+}
+
+static const unsigned char *dmxPropertyIdentifier(void)
+{
+ /* RATS: These buffers are only used in
+ * length-limited calls. */
+ char hostname[256];
+ static char buf[128];
+ static int initialized = 0;
+
+ if (initialized++) return (unsigned char *)buf;
+
+ XmuGetHostname(hostname, sizeof(hostname));
+ XmuSnprintf(buf, sizeof(buf), "%s:%s:%s", DMX_IDENT, hostname, display);
+ return (unsigned char *)buf;
+}
+
+/** Starting with the \a start screen, iterate over all of the screens
+ * on the same physical X server as \a start, calling \a f with the
+ * screen and the \a closure. (The common case is that \a start is the
+ * only DMX window on the backend X server.) */
+void *dmxPropertyIterate(DMXScreenInfo *start,
+ void *(*f)(DMXScreenInfo *dmxScreen, void *),
+ void *closure)
+{
+ DMXScreenInfo *pt;
+
+ if (!start->next) {
+ if (!start->beDisplay) return NULL;
+ return f(start, closure);
+ }
+
+ for (pt = start->next; /* condition at end of loop */; pt = pt->next) {
+ void *retval;
+ /* beDisplay ban be NULL if a screen was detached */
+ dmxLog(dmxDebug, "pt = %p\n", pt);
+ dmxLog(dmxDebug, "pt->beDisplay = %p\n", pt->beDisplay);
+ if (pt->beDisplay && (retval = f(pt, closure))) return retval;
+ if (pt == start) break;
+ }
+ return NULL;
+}
+
+/** Returns 0 if this is the only Xdmx session on the display; 1
+ * otherwise. */
+static int dmxPropertyCheckOtherServers(DMXScreenInfo *dmxScreen, Atom atom)
+{
+ Display *dpy = dmxScreen->beDisplay;
+ XTextProperty tp;
+ XTextProperty tproot;
+ const char *pt;
+ int retcode = 0;
+ char **list = NULL;
+ int count = 0;
+ int i;
+ int (*dmxOldHandler)(Display *, XErrorEvent *);
+
+ if (!dpy)
+ return 0;
+
+ if (!XGetTextProperty(dpy, RootWindow(dpy,0), &tproot, atom)
+ || !tproot.nitems) return 0;
+
+ /* Ignore BadWindow errors for this
+ * routine because the window id stored
+ * in the property might be old */
+ dmxOldHandler = XSetErrorHandler(dmxPropertyErrorHandler);
+ for (pt = (const char *)tproot.value; pt && *pt; pt = pt ? pt + 1 : NULL) {
+ if ((pt = strchr(pt, ','))) {
+ Window win = strtol(pt+1, NULL, 10);
+ if (XGetTextProperty(dpy, win, &tp, atom) && tp.nitems) {
+ if (!strncmp((char *)tp.value, DMX_IDENT, strlen(DMX_IDENT))) {
+ int flag = 0;
+ for (i = 0; i < count; i++)
+ if (!strcmp(list[i], (char *)tp.value)) {
+ ++flag;
+ break;
+ }
+ if (flag) continue;
+ ++retcode;
+ dmxLogOutputWarning(dmxScreen,
+ "%s also running on %s\n",
+ tp.value, dmxScreen->name);
+ list = realloc(list, ++count * sizeof(*list));
+ list[count-1] = malloc(tp.nitems + 2);
+ strncpy(list[count-1], (char *)tp.value, tp.nitems + 1);
+ }
+ XFree(tp.value);
+ }
+ }
+ }
+ XSetErrorHandler(dmxOldHandler);
+
+ for (i = 0; i < count; i++) free(list[i]);
+ free(list);
+ XFree(tproot.value);
+ if (!retcode)
+ dmxLogOutput(dmxScreen, "No Xdmx server running on backend\n");
+ return retcode;
+}
+
+/** Returns NULL if this is the only Xdmx window on the display.
+ * Otherwise, returns a pointer to the dmxScreen of the other windows on
+ * the display. */
+static DMXScreenInfo *dmxPropertyCheckOtherWindows(DMXScreenInfo *dmxScreen,
+ Atom atom)
+{
+ Display *dpy = dmxScreen->beDisplay;
+ const unsigned char *id = dmxPropertyIdentifier();
+ XTextProperty tproot;
+ XTextProperty tp;
+ const char *pt;
+ int (*dmxOldHandler)(Display *, XErrorEvent *);
+
+ if (!dpy)
+ return NULL;
+
+ if (!XGetTextProperty(dpy, RootWindow(dpy,0), &tproot, atom)
+ || !tproot.nitems) return 0;
+
+ /* Ignore BadWindow errors for this
+ * routine because the window id stored
+ * in the property might be old */
+ dmxOldHandler = XSetErrorHandler(dmxPropertyErrorHandler);
+ for (pt = (const char *)tproot.value; pt && *pt; pt = pt ? pt + 1 : NULL) {
+ if ((pt = strchr(pt, ','))) {
+ Window win = strtol(pt+1, NULL, 10);
+ if (XGetTextProperty(dpy, win, &tp, atom) && tp.nitems) {
+ dmxLog(dmxDebug,"On %s/%lu: %s\n",
+ dmxScreen->name, win, tp.value);
+ if (!strncmp((char *)tp.value, (char *)id,
+ strlen((char *)id))) {
+ int idx;
+
+ if (!(pt = strchr((char *)tp.value, ','))) continue;
+ idx = strtol(pt+1, NULL, 10);
+ if (idx < 0 || idx >= dmxNumScreens) continue;
+ if (dmxScreens[idx].scrnWin != win) continue;
+ XSetErrorHandler(dmxOldHandler);
+ return &dmxScreens[idx];
+ }
+ XFree(tp.value);
+ }
+ }
+ }
+ XSetErrorHandler(dmxOldHandler);
+ XFree(tproot.value);
+ return 0;
+}
+
+/** Returns 0 if this is the only Xdmx session on the display; 1
+ * otherwise. */
+int dmxPropertyDisplay(DMXScreenInfo *dmxScreen)
+{
+ Atom atom;
+ const unsigned char *id = dmxPropertyIdentifier();
+ Display *dpy = dmxScreen->beDisplay;
+
+ if (!dpy)
+ return 0;
+
+ atom = XInternAtom(dpy, DMX_ATOMNAME, False);
+ if (dmxPropertyCheckOtherServers(dmxScreen, atom)) {
+ dmxScreen->shared = 1;
+ return 1;
+ }
+ XChangeProperty(dpy, RootWindow(dpy,0), atom, XA_STRING, 8,
+ PropModeReplace, id, strlen((char *)id));
+ return 0;
+}
+
+/** Returns 1 if the dmxScreen and the display in \a name are on the
+ * same display, or 0 otherwise. We can't just compare the display
+ * names because there can be multiple synonyms for the same display,
+ * some of which cannot be determined without accessing the display
+ * itself (e.g., domain aliases or machines with multiple NICs). */
+int dmxPropertySameDisplay(DMXScreenInfo *dmxScreen, const char *name)
+{
+ Display *dpy0 = dmxScreen->beDisplay;
+ Atom atom0;
+ XTextProperty tp0;
+ Display *dpy1 = NULL;
+ Atom atom1;
+ XTextProperty tp1;
+ int retval = 0;
+
+ if (!dpy0)
+ return 0;
+
+ tp0.nitems = 0;
+ tp1.nitems = 0;
+
+ if ((atom0 = XInternAtom(dpy0, DMX_ATOMNAME, True)) == None) {
+ dmxLog(dmxWarning, "No atom on %s\n", dmxScreen->name);
+ return 0;
+ }
+ if (!XGetTextProperty(dpy0, RootWindow(dpy0,0), &tp0, atom0)
+ || !tp0.nitems) {
+ dmxLog(dmxWarning, "No text property on %s\n", dmxScreen->name);
+ return 0;
+ }
+
+ if (!(dpy1 = XOpenDisplay(name))) {
+ dmxLog(dmxWarning, "Cannot open %s\n", name);
+ goto cleanup;
+ }
+ atom1 = XInternAtom(dpy1, DMX_ATOMNAME, True);
+ if (atom1 == None) {
+ dmxLog(dmxDebug, "No atom on %s\n", name);
+ goto cleanup;
+ }
+ if (!XGetTextProperty(dpy1, RootWindow(dpy1,0), &tp1, atom1)
+ || !tp1.nitems) {
+ dmxLog(dmxDebug, "No text property on %s\n", name);
+ goto cleanup;
+ }
+ if (!strcmp((char *)tp0.value, (char *)tp1.value)) retval = 1;
+
+ cleanup:
+ if (tp0.nitems) XFree(tp0.value);
+ if (tp1.nitems) XFree(tp1.value);
+ if (dpy1) XCloseDisplay(dpy1);
+ return retval;
+}
+
+/** Prints a log message if \a dmxScreen is on the same backend X server
+ * as some other DMX backend (output) screen. Modifies the property
+ * (#DMX_ATOMNAME) on the backend X server to reflect the creation of \a
+ * dmxScreen.
+ *
+ * The root window of the backend X server holds a list of window ids
+ * for all DMX windows (on this DMX server or some other DMX server).
+ *
+ * This list can then be iterated, and the property for each window can
+ * be examined. This property contains the following tuple (no quotes):
+ *
+ * "#DMX_IDENT:<hostname running DMX>:<display name of DMX>,<screen number>"
+ */
+void dmxPropertyWindow(DMXScreenInfo *dmxScreen)
+{
+ Atom atom;
+ const unsigned char *id = dmxPropertyIdentifier();
+ Display *dpy = dmxScreen->beDisplay;
+ Window win = dmxScreen->scrnWin;
+ DMXScreenInfo *other;
+ char buf[128]; /* RATS: only used with XmuSnprintf */
+
+ if (!dpy)
+ return; /* FIXME: What should be done here if Xdmx is started
+ * with this screen initially detached?
+ */
+
+ atom = XInternAtom(dpy, DMX_ATOMNAME, False);
+ if ((other = dmxPropertyCheckOtherWindows(dmxScreen, atom))) {
+ DMXScreenInfo *tmp = dmxScreen->next;
+ dmxScreen->next = (other->next ? other->next : other);
+ other->next = (tmp ? tmp : dmxScreen);
+ dmxLog(dmxDebug, "%d/%s/%lu and %d/%s/%lu are on the same backend\n",
+ dmxScreen->index, dmxScreen->name, dmxScreen->scrnWin,
+ other->index, other->name, other->scrnWin);
+ }
+
+ XmuSnprintf(buf, sizeof(buf), ".%d,%lu", dmxScreen->index,
+ (long unsigned)win);
+ XChangeProperty(dpy, RootWindow(dpy,0), atom, XA_STRING, 8,
+ PropModeAppend, (unsigned char *)buf, strlen(buf));
+
+ XmuSnprintf(buf, sizeof(buf), "%s,%d", id, dmxScreen->index);
+ XChangeProperty(dpy, win, atom, XA_STRING, 8,
+ PropModeAppend, (unsigned char *)buf, strlen(buf));
+}
diff --git a/hw/dmx/dmxprop.h b/hw/dmx/dmxprop.h
new file mode 100644
index 0000000..50135cd
--- /dev/null
+++ b/hw/dmx/dmxprop.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2002,2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for property support. \see dmxprop.c */
+
+#ifndef _DMXPROP_H_
+#define _DMXPROP_H_
+extern int dmxPropertyDisplay(DMXScreenInfo *dmxScreen);
+extern void dmxPropertyWindow(DMXScreenInfo *dmxScreen);
+extern void *dmxPropertyIterate(DMXScreenInfo *start,
+ void *(*f)(DMXScreenInfo *dmxScreen,
+ void *closure),
+ void *closure);
+extern int dmxPropertySameDisplay(DMXScreenInfo *dmxScreen, const char *name);
+#endif
diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
new file mode 100644
index 0000000..7a94627
--- /dev/null
+++ b/hw/dmx/dmxscrinit.c
@@ -0,0 +1,522 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * David H. Dawes <dawes@xfree86.org>
+ *
+ */
+
+/** \file
+ * This file provides support for screen initialization. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxshadow.h"
+#include "dmxscrinit.h"
+#include "dmxcursor.h"
+#include "dmxgc.h"
+#include "dmxgcops.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+#include "dmxfont.h"
+#include "dmxcmap.h"
+#include "dmxprop.h"
+#include "dmxdpms.h"
+
+#include "dmxpict.h"
+
+#include "fb.h"
+#include "mipointer.h"
+#include "micmap.h"
+
+extern Bool dmxCloseScreen(int idx, ScreenPtr pScreen);
+static Bool dmxSaveScreen(ScreenPtr pScreen, int what);
+
+static unsigned long dmxGeneration;
+static unsigned long *dmxCursorGeneration;
+
+DevPrivateKeyRec dmxGCPrivateKeyRec;
+DevPrivateKeyRec dmxWinPrivateKeyRec;
+DevPrivateKeyRec dmxPixPrivateKeyRec;
+int dmxFontPrivateIndex; /**< Private index for Fonts */
+DevPrivateKeyRec dmxScreenPrivateKeyRec;
+DevPrivateKeyRec dmxColormapPrivateKeyRec;
+DevPrivateKeyRec dmxPictPrivateKeyRec;
+DevPrivateKeyRec dmxGlyphSetPrivateKeyRec;
+
+/** Initialize the parts of screen \a idx that require access to the
+ * back-end server. */
+void dmxBEScreenInit(int idx, ScreenPtr pScreen)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ XSetWindowAttributes attribs;
+ XGCValues gcvals;
+ unsigned long mask;
+ int i, j;
+
+ /* FIXME: The dmxScreenInit() code currently assumes that it will
+ * not be called if the Xdmx server is started with this screen
+ * detached -- i.e., it assumes that dmxScreen->beDisplay is always
+ * valid. This is not necessarily a valid assumption when full
+ * addition/removal of screens is implemented, but when this code is
+ * broken out for screen reattachment, then we will reevaluate this
+ * assumption.
+ */
+
+ pScreen->mmWidth = DisplayWidthMM(dmxScreen->beDisplay,
+ DefaultScreen(dmxScreen->beDisplay));
+ pScreen->mmHeight = DisplayHeightMM(dmxScreen->beDisplay,
+ DefaultScreen(dmxScreen->beDisplay));
+
+ pScreen->whitePixel = dmxScreen->beWhitePixel;
+ pScreen->blackPixel = dmxScreen->beBlackPixel;
+
+ /* Handle screen savers and DPMS on the backend */
+ dmxDPMSInit(dmxScreen);
+
+ /* Create root window for screen */
+ mask = CWBackPixel | CWEventMask | CWColormap | CWOverrideRedirect;
+ attribs.background_pixel = dmxScreen->beBlackPixel;
+ attribs.event_mask = (KeyPressMask
+ | KeyReleaseMask
+ | ButtonPressMask
+ | ButtonReleaseMask
+ | EnterWindowMask
+ | LeaveWindowMask
+ | PointerMotionMask
+ | KeymapStateMask
+ | FocusChangeMask);
+ attribs.colormap = dmxScreen->beDefColormaps[dmxScreen->beDefVisualIndex];
+ attribs.override_redirect = True;
+
+ dmxScreen->scrnWin =
+ XCreateWindow(dmxScreen->beDisplay,
+ DefaultRootWindow(dmxScreen->beDisplay),
+ dmxScreen->scrnX,
+ dmxScreen->scrnY,
+ dmxScreen->scrnWidth,
+ dmxScreen->scrnHeight,
+ 0,
+ pScreen->rootDepth,
+ InputOutput,
+ dmxScreen->beVisuals[dmxScreen->beDefVisualIndex].visual,
+ mask,
+ &attribs);
+ dmxPropertyWindow(dmxScreen);
+
+ /*
+ * This turns off the cursor by defining a cursor with no visible
+ * components.
+ */
+ {
+ char noCursorData[] = {0, 0, 0, 0,
+ 0, 0, 0, 0};
+ Pixmap pixmap;
+ XColor color, tmp;
+
+ pixmap = XCreateBitmapFromData(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ noCursorData, 8, 8);
+ XAllocNamedColor(dmxScreen->beDisplay, dmxScreen->beDefColormaps[0],
+ "black", &color, &tmp);
+ dmxScreen->noCursor = XCreatePixmapCursor(dmxScreen->beDisplay,
+ pixmap, pixmap,
+ &color, &color, 0, 0);
+ XDefineCursor(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ dmxScreen->noCursor);
+
+ XFreePixmap(dmxScreen->beDisplay, pixmap);
+ }
+
+ XMapWindow(dmxScreen->beDisplay, dmxScreen->scrnWin);
+
+ if (dmxShadowFB) {
+ mask = (GCFunction
+ | GCPlaneMask
+ | GCClipMask);
+ gcvals.function = GXcopy;
+ gcvals.plane_mask = AllPlanes;
+ gcvals.clip_mask = None;
+
+ dmxScreen->shadowGC = XCreateGC(dmxScreen->beDisplay,
+ dmxScreen->scrnWin,
+ mask, &gcvals);
+
+ dmxScreen->shadowFBImage =
+ XCreateImage(dmxScreen->beDisplay,
+ dmxScreen->beVisuals[dmxScreen->beDefVisualIndex].visual,
+ dmxScreen->beDepth,
+ ZPixmap,
+ 0,
+ (char *)dmxScreen->shadow,
+ dmxScreen->scrnWidth, dmxScreen->scrnHeight,
+ dmxScreen->beBPP,
+ PixmapBytePad(dmxScreen->scrnWidth,
+ dmxScreen->beBPP));
+ } else {
+ /* Create default drawables (used during GC creation) */
+ for (i = 0; i < dmxScreen->beNumPixmapFormats; i++)
+ for (j = 0; j < dmxScreen->beNumDepths; j++)
+ if ((dmxScreen->bePixmapFormats[i].depth == 1) ||
+ (dmxScreen->bePixmapFormats[i].depth ==
+ dmxScreen->beDepths[j])) {
+ dmxScreen->scrnDefDrawables[i] = (Drawable)
+ XCreatePixmap(dmxScreen->beDisplay, dmxScreen->scrnWin,
+ 1, 1, dmxScreen->bePixmapFormats[i].depth);
+ break;
+ }
+ }
+}
+
+/** Initialize screen number \a idx. */
+Bool dmxScreenInit(int idx, ScreenPtr pScreen, int argc, char *argv[])
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+ int i, j;
+
+ if (!dixRegisterPrivateKey(&dmxScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
+ return FALSE;
+ if (!dixRegisterPrivateKey(&dmxColormapPrivateKeyRec, PRIVATE_COLORMAP, 0))
+ return FALSE;
+ if (!dixRegisterPrivateKey(&dmxGlyphSetPrivateKeyRec, PRIVATE_GLYPHSET, 0))
+ return FALSE;
+
+ if (dmxGeneration != serverGeneration) {
+ /* Allocate font private index */
+ dmxFontPrivateIndex = AllocateFontPrivateIndex();
+ if (dmxFontPrivateIndex == -1)
+ return FALSE;
+
+ dmxGeneration = serverGeneration;
+ }
+
+ if (dmxShadowFB) {
+ dmxScreen->shadow = shadowAlloc(dmxScreen->scrnWidth,
+ dmxScreen->scrnHeight,
+ dmxScreen->beBPP);
+ } else {
+ if (!dmxInitGC(pScreen)) return FALSE;
+ if (!dmxInitWindow(pScreen)) return FALSE;
+ if (!dmxInitPixmap(pScreen)) return FALSE;
+ }
+
+ /*
+ * Initalise the visual types. miSetVisualTypesAndMasks() requires
+ * that all of the types for each depth be collected together. It's
+ * intended for slightly different usage to what we would like here.
+ * Maybe a miAddVisualTypeAndMask() function will be added to make
+ * things easier here.
+ */
+ for (i = 0; i < dmxScreen->beNumDepths; i++) {
+ int depth;
+ int visuals = 0;
+ int bitsPerRgb = 0;
+ int preferredClass = -1;
+ Pixel redMask = 0;
+ Pixel greenMask = 0;
+ Pixel blueMask = 0;
+
+ depth = dmxScreen->beDepths[i];
+ for (j = 0; j < dmxScreen->beNumVisuals; j++) {
+ XVisualInfo *vi;
+
+ vi = &dmxScreen->beVisuals[j];
+ if (vi->depth == depth) {
+ /* Assume the masks are all the same. */
+ visuals |= (1 << vi->class);
+ bitsPerRgb = vi->bits_per_rgb;
+ redMask = vi->red_mask;
+ greenMask = vi->green_mask;
+ blueMask = vi->blue_mask;
+ if (j == dmxScreen->beDefVisualIndex) {
+ preferredClass = vi->class;
+ }
+ }
+ }
+ miSetVisualTypesAndMasks(depth, visuals, bitsPerRgb, preferredClass,
+ redMask, greenMask, blueMask);
+ }
+
+ fbScreenInit(pScreen,
+ dmxShadowFB ? dmxScreen->shadow : NULL,
+ dmxScreen->scrnWidth,
+ dmxScreen->scrnHeight,
+ dmxScreen->beXDPI,
+ dmxScreen->beXDPI,
+ dmxScreen->scrnWidth,
+ dmxScreen->beBPP);
+ (void)dmxPictureInit(pScreen, 0, 0);
+
+ /* Not yet... */
+ pScreen->GetWindowPixmap = NULL;
+ pScreen->SetWindowPixmap = NULL;
+
+ if (dmxShadowFB && !shadowInit(pScreen, dmxShadowUpdateProc, NULL))
+ return FALSE;
+
+ if (dmxShadowFB) {
+ miDCInitialize(pScreen, &dmxPointerCursorFuncs);
+ } else {
+ MAXSCREENSALLOC(dmxCursorGeneration);
+ if (dmxCursorGeneration[idx] != serverGeneration) {
+ if (!(miPointerInitialize(pScreen,
+ &dmxPointerSpriteFuncs,
+ &dmxPointerCursorFuncs,
+ FALSE)))
+ return FALSE;
+
+ dmxCursorGeneration[idx] = serverGeneration;
+ }
+ }
+
+ DMX_WRAP(CloseScreen, dmxCloseScreen, dmxScreen, pScreen);
+ DMX_WRAP(SaveScreen, dmxSaveScreen, dmxScreen, pScreen);
+
+ dmxBEScreenInit(idx, pScreen);
+
+ if (!dmxShadowFB) {
+ /* Wrap GC functions */
+ DMX_WRAP(CreateGC, dmxCreateGC, dmxScreen, pScreen);
+
+ /* Wrap Window functions */
+ DMX_WRAP(CreateWindow, dmxCreateWindow, dmxScreen, pScreen);
+ DMX_WRAP(DestroyWindow, dmxDestroyWindow, dmxScreen, pScreen);
+ DMX_WRAP(PositionWindow, dmxPositionWindow, dmxScreen, pScreen);
+ DMX_WRAP(ChangeWindowAttributes, dmxChangeWindowAttributes, dmxScreen,
+ pScreen);
+ DMX_WRAP(RealizeWindow, dmxRealizeWindow, dmxScreen, pScreen);
+ DMX_WRAP(UnrealizeWindow, dmxUnrealizeWindow, dmxScreen, pScreen);
+ DMX_WRAP(RestackWindow, dmxRestackWindow, dmxScreen, pScreen);
+ DMX_WRAP(WindowExposures, dmxWindowExposures, dmxScreen, pScreen);
+ DMX_WRAP(CopyWindow, dmxCopyWindow, dmxScreen, pScreen);
+
+ DMX_WRAP(ResizeWindow, dmxResizeWindow, dmxScreen, pScreen);
+ DMX_WRAP(ReparentWindow, dmxReparentWindow, dmxScreen, pScreen);
+
+ DMX_WRAP(ChangeBorderWidth, dmxChangeBorderWidth, dmxScreen, pScreen);
+
+ /* Wrap Image functions */
+ DMX_WRAP(GetImage, dmxGetImage, dmxScreen, pScreen);
+ DMX_WRAP(GetSpans, dmxGetSpans, dmxScreen, pScreen);
+
+ /* Wrap Pixmap functions */
+ DMX_WRAP(CreatePixmap, dmxCreatePixmap, dmxScreen, pScreen);
+ DMX_WRAP(DestroyPixmap, dmxDestroyPixmap, dmxScreen, pScreen);
+ DMX_WRAP(BitmapToRegion, dmxBitmapToRegion, dmxScreen, pScreen);
+
+ /* Wrap Font functions */
+ DMX_WRAP(RealizeFont, dmxRealizeFont, dmxScreen, pScreen);
+ DMX_WRAP(UnrealizeFont, dmxUnrealizeFont, dmxScreen, pScreen);
+
+ /* Wrap Colormap functions */
+ DMX_WRAP(CreateColormap, dmxCreateColormap, dmxScreen, pScreen);
+ DMX_WRAP(DestroyColormap, dmxDestroyColormap, dmxScreen, pScreen);
+ DMX_WRAP(InstallColormap, dmxInstallColormap, dmxScreen, pScreen);
+ DMX_WRAP(StoreColors, dmxStoreColors, dmxScreen, pScreen);
+
+ /* Wrap Shape functions */
+ DMX_WRAP(SetShape, dmxSetShape, dmxScreen, pScreen);
+ }
+
+ if (!dmxCreateDefColormap(pScreen))
+ return FALSE;
+
+ return TRUE;
+}
+
+/** Close the \a pScreen resources on the back-end server. */
+void dmxBECloseScreen(ScreenPtr pScreen)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ int i;
+
+ /* Restore the back-end screen-saver and DPMS state. */
+ dmxDPMSTerm(dmxScreen);
+
+ /* Free the screen resources */
+
+ XFreeCursor(dmxScreen->beDisplay, dmxScreen->noCursor);
+ dmxScreen->noCursor = (Cursor)0;
+
+ XUnmapWindow(dmxScreen->beDisplay, dmxScreen->scrnWin);
+ XDestroyWindow(dmxScreen->beDisplay, dmxScreen->scrnWin);
+ dmxScreen->scrnWin = (Window)0;
+
+ if (dmxShadowFB) {
+ /* Free the shadow GC and image assocated with the back-end server */
+ XFreeGC(dmxScreen->beDisplay, dmxScreen->shadowGC);
+ dmxScreen->shadowGC = NULL;
+ XFree(dmxScreen->shadowFBImage);
+ dmxScreen->shadowFBImage = NULL;
+ } else {
+ /* Free the default drawables */
+ for (i = 0; i < dmxScreen->beNumPixmapFormats; i++) {
+ if (dmxScreen->scrnDefDrawables[i]) {
+ XFreePixmap(dmxScreen->beDisplay,
+ dmxScreen->scrnDefDrawables[i]);
+ dmxScreen->scrnDefDrawables[i] = (Drawable)0;
+ }
+ }
+ }
+
+ /* Free resources allocated during initialization (in dmxinit.c) */
+ for (i = 0; i < dmxScreen->beNumDefColormaps; i++)
+ XFreeColormap(dmxScreen->beDisplay, dmxScreen->beDefColormaps[i]);
+ free(dmxScreen->beDefColormaps);
+ dmxScreen->beDefColormaps = NULL;
+
+#if 0
+ /* Do not free visuals, depths and pixmap formats here. Free them
+ * in dmxCloseScreen() instead -- see comment below. */
+ XFree(dmxScreen->beVisuals);
+ dmxScreen->beVisuals = NULL;
+
+ XFree(dmxScreen->beDepths);
+ dmxScreen->beDepths = NULL;
+
+ XFree(dmxScreen->bePixmapFormats);
+ dmxScreen->bePixmapFormats = NULL;
+#endif
+
+#ifdef GLXEXT
+ if (dmxScreen->glxVisuals) {
+ XFree(dmxScreen->glxVisuals);
+ dmxScreen->glxVisuals = NULL;
+ dmxScreen->numGlxVisuals = 0;
+ }
+#endif
+
+ /* Close display */
+ XCloseDisplay(dmxScreen->beDisplay);
+ dmxScreen->beDisplay = NULL;
+}
+
+/** Close screen number \a idx. */
+Bool dmxCloseScreen(int idx, ScreenPtr pScreen)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[idx];
+
+ /* Reset the proc vectors */
+ if (idx == 0) {
+ dmxResetRender();
+ dmxResetFonts();
+ }
+
+ if (dmxShadowFB) {
+ /* Free the shadow framebuffer */
+ free(dmxScreen->shadow);
+ } else {
+
+ /* Unwrap Shape functions */
+ DMX_UNWRAP(SetShape, dmxScreen, pScreen);
+
+ /* Unwrap the pScreen functions */
+ DMX_UNWRAP(CreateGC, dmxScreen, pScreen);
+
+ DMX_UNWRAP(CreateWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(DestroyWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(PositionWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(ChangeWindowAttributes, dmxScreen, pScreen);
+ DMX_UNWRAP(RealizeWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(UnrealizeWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(RestackWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(WindowExposures, dmxScreen, pScreen);
+ DMX_UNWRAP(CopyWindow, dmxScreen, pScreen);
+
+ DMX_UNWRAP(ResizeWindow, dmxScreen, pScreen);
+ DMX_UNWRAP(ReparentWindow, dmxScreen, pScreen);
+
+ DMX_UNWRAP(ChangeBorderWidth, dmxScreen, pScreen);
+
+ DMX_UNWRAP(GetImage, dmxScreen, pScreen);
+ DMX_UNWRAP(GetSpans, dmxScreen, pScreen);
+
+ DMX_UNWRAP(CreatePixmap, dmxScreen, pScreen);
+ DMX_UNWRAP(DestroyPixmap, dmxScreen, pScreen);
+ DMX_UNWRAP(BitmapToRegion, dmxScreen, pScreen);
+
+ DMX_UNWRAP(RealizeFont, dmxScreen, pScreen);
+ DMX_UNWRAP(UnrealizeFont, dmxScreen, pScreen);
+
+ DMX_UNWRAP(CreateColormap, dmxScreen, pScreen);
+ DMX_UNWRAP(DestroyColormap, dmxScreen, pScreen);
+ DMX_UNWRAP(InstallColormap, dmxScreen, pScreen);
+ DMX_UNWRAP(StoreColors, dmxScreen, pScreen);
+ }
+
+ DMX_UNWRAP(SaveScreen, dmxScreen, pScreen);
+
+ if (dmxScreen->beDisplay) {
+ dmxBECloseScreen(pScreen);
+
+#if 1
+ /* Free visuals, depths and pixmap formats here so that they
+ * won't be freed when a screen is detached, thereby allowing
+ * the screen to be reattached to be compared to the one
+ * previously removed.
+ */
+ XFree(dmxScreen->beVisuals);
+ dmxScreen->beVisuals = NULL;
+
+ XFree(dmxScreen->beDepths);
+ dmxScreen->beDepths = NULL;
+
+ XFree(dmxScreen->bePixmapFormats);
+ dmxScreen->bePixmapFormats = NULL;
+#endif
+ }
+
+ DMX_UNWRAP(CloseScreen, dmxScreen, pScreen);
+ return pScreen->CloseScreen(idx, pScreen);
+}
+
+static Bool dmxSaveScreen(ScreenPtr pScreen, int what)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+
+ if (dmxScreen->beDisplay) {
+ switch (what) {
+ case SCREEN_SAVER_OFF:
+ case SCREEN_SAVER_FORCER:
+ XResetScreenSaver(dmxScreen->beDisplay);
+ dmxSync(dmxScreen, FALSE);
+ break;
+ case SCREEN_SAVER_ON:
+ case SCREEN_SAVER_CYCLE:
+ XActivateScreenSaver(dmxScreen->beDisplay);
+ dmxSync(dmxScreen, FALSE);
+ break;
+ }
+ }
+
+ return TRUE;
+}
diff --git a/hw/dmx/dmxscrinit.h b/hw/dmx/dmxscrinit.h
new file mode 100644
index 0000000..9c9fbc5
--- /dev/null
+++ b/hw/dmx/dmxscrinit.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * David H. Dawes <dawes@xfree86.org>
+ *
+ */
+
+/** \file
+ * Interface for screen initialization. \see dmxscrinit.c */
+
+#ifndef DMXSCRINIT_H
+#define DMXSCRINIT_H
+
+#include "scrnintstr.h"
+
+extern Bool dmxScreenInit(int idx, ScreenPtr pScreen, int argc, char *argv[]);
+
+extern void dmxBEScreenInit(int idx, ScreenPtr pScreen);
+extern void dmxBECloseScreen(ScreenPtr pScreen);
+
+#endif /* DMXSCRINIT_H */
diff --git a/hw/dmx/dmxshadow.c b/hw/dmx/dmxshadow.c
new file mode 100644
index 0000000..a62eb5c
--- /dev/null
+++ b/hw/dmx/dmxshadow.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * David H. Dawes <dawes@xfree86.org>
+ *
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxshadow.h"
+
+/** \file
+ * This file provides support for the shadow frame buffer. */
+
+/** Update the screen from the shadow frame buffer. */
+void dmxShadowUpdateProc(ScreenPtr pScreen, shadowBufPtr pBuf)
+{
+ RegionPtr damage = &pBuf->damage;
+ int nbox = RegionNumRects(damage);
+ BoxPtr pbox = RegionRects(damage);
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+
+ if (!dmxScreen->beDisplay)
+ return;
+
+ while (nbox--) {
+ XPutImage(dmxScreen->beDisplay,
+ dmxScreen->scrnWin,
+ dmxScreen->shadowGC,
+ dmxScreen->shadowFBImage,
+ pbox->x1, pbox->y1,
+ pbox->x1, pbox->y1,
+ pbox->x2 - pbox->x1,
+ pbox->y2 - pbox->y1);
+
+ pbox++;
+ }
+
+ dmxSync(dmxScreen, FALSE);
+}
diff --git a/hw/dmx/dmxshadow.h b/hw/dmx/dmxshadow.h
new file mode 100644
index 0000000..cafe879
--- /dev/null
+++ b/hw/dmx/dmxshadow.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * David H. Dawes <dawes@xfree86.org>
+ *
+ */
+
+/** \file
+ * Interface for shadow framebuffer support. \see dmxshadow.c */
+
+#ifndef DMXSHADOW_H
+#define DMXSHADOW_H
+
+#include "shadow.h"
+#include "scrnintstr.h"
+
+extern void dmxShadowUpdateProc(ScreenPtr pScreen, shadowBufPtr pBuf);
+
+#endif /* DMXSHADOW_H */
diff --git a/hw/dmx/dmxstat.c b/hw/dmx/dmxstat.c
new file mode 100644
index 0000000..c3f1d3b
--- /dev/null
+++ b/hw/dmx/dmxstat.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright 2002, 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * The DMX server code is written to call #dmxSync() whenever an XSync()
+ * might be necessary. However, since XSync() requires a two way
+ * communication with the other X server, eliminating unnecessary
+ * XSync() calls is a key performance optimization. Support for this
+ * optimization is provided in \a dmxsync.c. This file provides routines
+ * that evaluate this optimization by counting the number of XSync()
+ * calls and monitoring their latency. This functionality can be turned
+ * on using the -stat command-line parameter. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxstat.h"
+#include "dmxlog.h"
+#include <X11/Xos.h> /* For sys/time.h */
+
+/** Used to compute a running average of value. */
+typedef struct _DMXStatAvg {
+ int pos;
+ int count;
+ unsigned long value[DMX_STAT_LENGTH];
+} DMXStatAvg;
+
+/** Statistical information about XSync calls. */
+struct _DMXStatInfo {
+ unsigned long syncCount;
+ unsigned long oldSyncCount;
+
+ DMXStatAvg usec;
+ DMXStatAvg pending;
+
+ unsigned long bins[DMX_STAT_BINS];
+};
+
+/* Interval in mS between statistic message log entries. */
+ int dmxStatInterval;
+static int dmxStatDisplays;
+static OsTimerPtr dmxStatTimer;
+
+/** Return the number of microseconds as an unsigned long.
+ * Unfortunately, this is only useful for intervals < about 4 sec. */
+static unsigned long usec(struct timeval *stop, struct timeval *start)
+{
+ return (stop->tv_sec - start->tv_sec) * 1000000
+ + stop->tv_usec - start->tv_usec;
+}
+
+static unsigned long avg(DMXStatAvg *data, unsigned long *max)
+{
+ unsigned long sum;
+ int i;
+
+ *max = 0;
+ if (!data->count) return 0;
+
+ for (i = 0, sum = 0; i < data->count; i++) {
+ if (data->value[i] > *max) *max = data->value[i];
+ sum += data->value[i];
+ }
+ return sum / data->count;
+}
+
+/** Turn on XSync statistic gathering and printing. Print every \a
+ * interval seconds, with lines for the first \a displays. If \a
+ * interval is NULL, 1 will be used. If \a displays is NULL, 0 will be
+ * used (meaning a line for every display will be printed). Note that
+ * this function takes string arguments because it will usually be
+ * called from #ddxProcessArgument in \a dmxinit.c. */
+void dmxStatActivate(const char *interval, const char *displays)
+{
+ dmxStatInterval = (interval ? atoi(interval) : 1) * 1000;
+ dmxStatDisplays = (displays ? atoi(displays) : 0);
+
+ if (dmxStatInterval < 1000) dmxStatInterval = 1000;
+ if (dmxStatDisplays < 0) dmxStatDisplays = 0;
+}
+
+/** Allocate a \a DMXStatInfo structure. */
+DMXStatInfo *dmxStatAlloc(void)
+{
+ DMXStatInfo *pt = calloc(1, sizeof(*pt));
+ return pt;
+}
+
+/** Free the memory used by a \a DMXStatInfo structure. */
+void dmxStatFree(DMXStatInfo *pt)
+{
+ free(pt);
+}
+
+static void dmxStatValue(DMXStatAvg *data, unsigned long value)
+{
+ if (data->count != DMX_STAT_LENGTH) ++data->count;
+ if (data->pos >= DMX_STAT_LENGTH-1) data->pos = 0;
+ data->value[data->pos++] = value;
+}
+
+/** Note that a XSync() was just done on \a dmxScreen with the \a start
+ * and \a stop times (from gettimeofday()) and the number of
+ * pending-but-not-yet-processed XSync requests. This routine is called
+ * from #dmxDoSync in \a dmxsync.c */
+void dmxStatSync(DMXScreenInfo *dmxScreen,
+ struct timeval *stop, struct timeval *start,
+ unsigned long pending)
+{
+ DMXStatInfo *s = dmxScreen->stat;
+ unsigned long elapsed = usec(stop, start);
+ unsigned long thresh;
+ int i;
+
+ ++s->syncCount;
+ dmxStatValue(&s->usec, elapsed);
+ dmxStatValue(&s->pending, pending);
+
+ for (i = 0, thresh = DMX_STAT_BIN0; i < DMX_STAT_BINS-1; i++) {
+ if (elapsed < thresh) {
+ ++s->bins[i];
+ break;
+ }
+ thresh *= DMX_STAT_BINMULT;
+ }
+ if (i == DMX_STAT_BINS-1) ++s->bins[i];
+}
+
+/* Actually do the work of printing out the human-readable message. */
+static CARD32 dmxStatCallback(OsTimerPtr timer, CARD32 t, pointer arg)
+{
+ int i, j;
+ static int header = 0;
+ int limit = dmxNumScreens;
+
+ if (!dmxNumScreens) {
+ header = 0;
+ return DMX_STAT_INTERVAL;
+ }
+
+ if (!header++ || !(header % 10)) {
+ dmxLog(dmxDebug,
+ " S SyncCount Sync/s avSync mxSync avPend mxPend | "
+ "<10ms <1s >1s\n");
+ }
+
+ if (dmxStatDisplays && dmxStatDisplays < limit) limit = dmxStatDisplays;
+ for (i = 0; i < limit; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ DMXStatInfo *s = dmxScreen->stat;
+ unsigned long aSync, mSync;
+ unsigned long aPend, mPend;
+
+ if (!s) continue;
+
+ aSync = avg(&s->usec, &mSync);
+ aPend = avg(&s->pending, &mPend);
+ dmxLog(dmxDebug, "%2d %9lu %7lu %6lu %6lu %6lu %6lu |",
+ i, /* S */
+ s->syncCount, /* SyncCount */
+ (s->syncCount
+ - s->oldSyncCount) * 1000 / dmxStatInterval, /* Sync/s */
+ aSync, /* us/Sync */
+ mSync, /* max/Sync */
+ aPend, /* avgPend */
+ mPend); /* maxPend */
+ for (j = 0; j < DMX_STAT_BINS; j++)
+ dmxLogCont(dmxDebug, " %5lu", s->bins[j]);
+ dmxLogCont(dmxDebug, "\n");
+
+ /* Reset/clear */
+ s->oldSyncCount = s->syncCount;
+ for (j = 0; j < DMX_STAT_BINS; j++) s->bins[j] = 0;
+ }
+ return DMX_STAT_INTERVAL; /* Place on queue again */
+}
+
+/** Try to initialize the statistic gathering and printing routines.
+ * Initialization only takes place if #dmxStatActivate has already been
+ * called. We don't need the same generation protection that we used in
+ * dmxSyncInit because our timer is always on a queue -- hence, server
+ * generation will always free it. */
+void dmxStatInit(void)
+{
+ if (dmxStatInterval)
+ dmxStatTimer = TimerSet(NULL, 0,
+ dmxStatInterval, dmxStatCallback, NULL);
+}
diff --git a/hw/dmx/dmxstat.h b/hw/dmx/dmxstat.h
new file mode 100644
index 0000000..04c88d3
--- /dev/null
+++ b/hw/dmx/dmxstat.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for statistic gathering interface. \see dmxstat.c */
+
+#ifndef _DMXSTAT_H_
+#define _DMXSTAT_H_
+
+#define DMX_STAT_LENGTH 10 /**< number of events for moving average */
+#define DMX_STAT_INTERVAL 1000 /**< msec between printouts */
+#define DMX_STAT_BINS 3 /**< number of bins */
+#define DMX_STAT_BIN0 10000 /**< us for bin[0] */
+#define DMX_STAT_BINMULT 100 /**< multiplier for next bin[] */
+
+extern int dmxStatInterval; /**< Only for dmxstat.c and dmxsync.c */
+extern void dmxStatActivate(const char *interval, const char *displays);
+extern DMXStatInfo *dmxStatAlloc(void);
+extern void dmxStatFree(DMXStatInfo *);
+extern void dmxStatInit(void);
+extern void dmxStatSync(DMXScreenInfo *dmxScreen,
+ struct timeval *stop, struct timeval *start,
+ unsigned long pending);
+
+#endif
diff --git a/hw/dmx/dmxsync.c b/hw/dmx/dmxsync.c
new file mode 100644
index 0000000..2c7ccb8
--- /dev/null
+++ b/hw/dmx/dmxsync.c
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * The DMX server code is written to call #dmxSync() whenever an XSync()
+ * might be necessary. However, since XSync() requires a two way
+ * communication with the other X server, eliminating unnecessary
+ * XSync() calls is a key performance optimization. Support for this
+ * optimization is provided here. Statistics about XSync() calls and
+ * latency are gathered in \a dmxstat.c.
+ *
+ * During the initial conversion from calling XSync() immediately to the
+ * XSync() batching method implemented in this file, it was noted that,
+ * out of more than 300 \a x11perf tests, 8 tests became more than 100
+ * times faster, with 68 more than 50X faster, 114 more than 10X faster,
+ * and 181 more than 2X faster. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxstat.h"
+#include "dmxlog.h"
+#include <sys/time.h>
+
+static int dmxSyncInterval = 100; /* Default interval in milliseconds */
+static OsTimerPtr dmxSyncTimer;
+static int dmxSyncPending;
+
+static void dmxDoSync(DMXScreenInfo *dmxScreen)
+{
+ dmxScreen->needsSync = FALSE;
+
+ if (!dmxScreen->beDisplay)
+ return; /* FIXME: Is this correct behavior for sync stats? */
+
+ if (!dmxStatInterval) {
+ XSync(dmxScreen->beDisplay, False);
+ } else {
+ struct timeval start, stop;
+
+ gettimeofday(&start, 0);
+ XSync(dmxScreen->beDisplay, False);
+ gettimeofday(&stop, 0);
+ dmxStatSync(dmxScreen, &stop, &start, dmxSyncPending);
+ }
+}
+
+static CARD32 dmxSyncCallback(OsTimerPtr timer, CARD32 time, pointer arg)
+{
+ int i;
+
+ if (dmxSyncPending) {
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ if (dmxScreen->needsSync) dmxDoSync(dmxScreen);
+ }
+ }
+ dmxSyncPending = 0;
+ return 0; /* Do not place on queue again */
+}
+
+static void dmxSyncBlockHandler(pointer blockData, OSTimePtr pTimeout,
+ pointer pReadMask)
+{
+ TimerForce(dmxSyncTimer);
+}
+
+static void dmxSyncWakeupHandler(pointer blockData, int result,
+ pointer pReadMask)
+{
+}
+
+/** Request the XSync() batching optimization with the specified \a
+ * interval (in mS). If the \a interval is 0, 100mS is used. If the \a
+ * interval is less than 0, then the XSync() batching optimization is
+ * not requested (e.g., so the -syncbatch -1 command line option can
+ * turn off the default 100mS XSync() batching).
+ *
+ * Note that the parameter to this routine is a string, since it will
+ * usually be called from #ddxProcessArgument in \a dmxinit.c */
+void dmxSyncActivate(const char *interval)
+{
+ dmxSyncInterval = (interval ? atoi(interval) : 100);
+
+ if (dmxSyncInterval < 0) dmxSyncInterval = 0;
+}
+
+/** Initialize the XSync() batching optimization, but only if
+ * #dmxSyncActivate was last called with a non-negative value. */
+void dmxSyncInit(void)
+{
+ if (dmxSyncInterval) {
+ RegisterBlockAndWakeupHandlers(dmxSyncBlockHandler,
+ dmxSyncWakeupHandler,
+ NULL);
+ dmxLog(dmxInfo, "XSync batching with %d ms interval\n",
+ dmxSyncInterval);
+ } else {
+ dmxLog(dmxInfo, "XSync batching disabled\n");
+ }
+}
+
+/** Request an XSync() to the display used by \a dmxScreen. If \a now
+ * is TRUE, call XSync() immediately instead of waiting for the next
+ * XSync() batching point. Note that if XSync() batching was deselected
+ * with #dmxSyncActivate() before #dmxSyncInit() was called, then no
+ * XSync() batching is performed and this function always calles XSync()
+ * immediately.
+ *
+ * (Note that this function uses TimerSet but works correctly in the
+ * face of a server generation. See the source for details.)
+ *
+ * If \a dmxScreen is \a NULL, then all pending syncs will be flushed
+ * immediately.
+ */
+void dmxSync(DMXScreenInfo *dmxScreen, Bool now)
+{
+ static unsigned long dmxGeneration = 0;
+
+ if (dmxSyncInterval) {
+ if (dmxGeneration != serverGeneration) {
+ /* Server generation does a TimerInit, which frees all
+ * timers. So, at this point dmxSyncTimer is either:
+ * 1) NULL, iff dmxGeneration == 0,
+ * 2) freed, if it was on a queue (dmxSyncPending != 0), or
+ * 3) allocated, if it wasn't on a queue (dmxSyncPending == 0)
+ */
+ if (dmxSyncTimer && !dmxSyncPending) free(dmxSyncTimer);
+ dmxSyncTimer = NULL;
+ now = TRUE;
+ dmxGeneration = serverGeneration;
+ }
+ /* Queue sync */
+ if (dmxScreen) {
+ dmxScreen->needsSync = TRUE;
+ ++dmxSyncPending;
+ }
+
+ /* Do sync or set time for later */
+ if (now || !dmxScreen) {
+ if (!TimerForce(dmxSyncTimer)) dmxSyncCallback(NULL, 0, NULL);
+ /* At this point, dmxSyncPending == 0 because
+ * dmxSyncCallback must have been called. */
+ if (dmxSyncPending)
+ dmxLog(dmxFatal, "dmxSync(%s,%d): dmxSyncPending = %d\n",
+ dmxScreen ? dmxScreen->name : "", now, dmxSyncPending);
+ } else {
+ dmxScreen->needsSync = TRUE;
+ if (dmxSyncPending == 1)
+ dmxSyncTimer = TimerSet(dmxSyncTimer, 0, dmxSyncInterval,
+ dmxSyncCallback, NULL);
+ }
+ } else {
+ /* If dmxSyncInterval is not being used,
+ * then all the backends are already
+ * up-to-date. */
+ if (dmxScreen) dmxDoSync(dmxScreen);
+ }
+}
diff --git a/hw/dmx/dmxsync.h b/hw/dmx/dmxsync.h
new file mode 100644
index 0000000..b80f54a
--- /dev/null
+++ b/hw/dmx/dmxsync.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for sync support. \see dmxsync.c */
+
+#ifndef _DMXSYNC_H_
+#define _DMXSYNC_H_
+
+extern void dmxSyncActivate(const char *interval);
+extern void dmxSyncInit(void);
+extern void dmxSync(DMXScreenInfo *dmxScreen, Bool now);
+#endif
diff --git a/hw/dmx/dmxvisual.c b/hw/dmx/dmxvisual.c
new file mode 100644
index 0000000..7b8771f
--- /dev/null
+++ b/hw/dmx/dmxvisual.c
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides support for visuals. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxvisual.h"
+
+#include "scrnintstr.h"
+
+#ifdef GLXEXT
+
+#include <GL/glxint.h>
+
+extern VisualID glxMatchVisualInConfigList(ScreenPtr pScreen,
+ VisualPtr pVisual,
+ __GLXvisualConfig *configs,
+ int nconfigs);
+
+static Visual *dmxLookupGLXVisual(ScreenPtr pScreen, VisualPtr pVisual)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ int j;
+ VisualID vid;
+
+ vid = glxMatchVisualInConfigList(pScreen, pVisual,
+ dmxScreen->glxVisuals,
+ dmxScreen->numGlxVisuals);
+ if (vid) {
+ /* Find the X visual of the matching GLX visual */
+ for (j = 0; j < dmxScreen->beNumVisuals; j++)
+ if (vid == dmxScreen->beVisuals[j].visualid)
+ return dmxScreen->beVisuals[j].visual;
+ }
+
+ /* No matching visual found */
+ return NULL;
+}
+#endif
+
+/** Return the visual that matched \a pVisual. */
+Visual *dmxLookupVisual(ScreenPtr pScreen, VisualPtr pVisual)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ int i;
+#ifdef GLXEXT
+ Visual *retval;
+#endif
+
+ if (!dmxScreen->beDisplay)
+ return NULL;
+
+#ifdef GLXEXT
+ if ((retval = dmxLookupGLXVisual(pScreen, pVisual)))
+ return retval;
+#endif
+
+ for (i = 0; i < dmxScreen->beNumVisuals; i++) {
+ if (pVisual->class == dmxScreen->beVisuals[i].class &&
+ pVisual->bitsPerRGBValue == dmxScreen->beVisuals[i].bits_per_rgb &&
+ pVisual->ColormapEntries == dmxScreen->beVisuals[i].colormap_size &&
+ pVisual->nplanes == dmxScreen->beVisuals[i].depth &&
+ pVisual->redMask == dmxScreen->beVisuals[i].red_mask &&
+ pVisual->greenMask == dmxScreen->beVisuals[i].green_mask &&
+ pVisual->blueMask == dmxScreen->beVisuals[i].blue_mask) {
+ return dmxScreen->beVisuals[i].visual;
+ }
+ }
+
+ return NULL;
+}
+
+/** Return the visual that matched the \a vid. */
+Visual *dmxLookupVisualFromID(ScreenPtr pScreen, VisualID vid)
+{
+ Visual *visual;
+ int i;
+
+ if (!dmxScreens[pScreen->myNum].beDisplay)
+ return NULL;
+
+ for (i = 0; i < pScreen->numVisuals; i++) {
+ if (pScreen->visuals[i].vid == vid) {
+ visual = dmxLookupVisual(pScreen, &pScreen->visuals[i]);
+ if (visual) return visual;
+ }
+ }
+
+ return NULL;
+}
+
+/** Return the colormap for the \a visual. */
+Colormap dmxColormapFromDefaultVisual(ScreenPtr pScreen, Visual *visual)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ int i;
+
+ if (dmxScreen->beDisplay) {
+ for (i = 0; i < dmxScreen->beNumDefColormaps; i++)
+ if (visual == dmxScreen->beVisuals[i].visual)
+ return dmxScreen->beDefColormaps[i];
+ }
+
+ return None;
+}
diff --git a/hw/dmx/dmxvisual.h b/hw/dmx/dmxvisual.h
new file mode 100644
index 0000000..bcb54cd
--- /dev/null
+++ b/hw/dmx/dmxvisual.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for visual support. \see dmxvisual.c */
+
+#ifndef DMXVISUAL_H
+#define DMXVISUAL_H
+
+#include "scrnintstr.h"
+
+extern Visual *dmxLookupVisual(ScreenPtr pScreen, VisualPtr pVisual);
+extern Visual *dmxLookupVisualFromID(ScreenPtr pScreen, VisualID vid);
+extern Colormap dmxColormapFromDefaultVisual(ScreenPtr pScreen,
+ Visual *visual);
+
+#endif /* DMXVISUAL_H */
diff --git a/hw/dmx/dmxwindow.c b/hw/dmx/dmxwindow.c
new file mode 100644
index 0000000..c3b4700
--- /dev/null
+++ b/hw/dmx/dmxwindow.c
@@ -0,0 +1,1017 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides support for window-related functions. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxsync.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+#include "dmxcmap.h"
+#include "dmxvisual.h"
+#include "dmxinput.h"
+#include "dmxextension.h"
+#include "dmxpict.h"
+
+#include "windowstr.h"
+
+static void dmxDoRestackWindow(WindowPtr pWindow);
+static void dmxDoChangeWindowAttributes(WindowPtr pWindow,
+ unsigned long *mask,
+ XSetWindowAttributes *attribs);
+
+static void dmxDoSetShape(WindowPtr pWindow);
+
+/** Initialize the private area for the window functions. */
+Bool dmxInitWindow(ScreenPtr pScreen)
+{
+ if (!dixRegisterPrivateKey(&dmxWinPrivateKeyRec, PRIVATE_WINDOW, sizeof(dmxWinPrivRec)))
+ return FALSE;
+
+ return TRUE;
+}
+
+
+Window dmxCreateRootWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ Window parent;
+ Visual *visual;
+ unsigned long mask;
+ XSetWindowAttributes attribs;
+ ColormapPtr pCmap;
+ dmxColormapPrivPtr pCmapPriv;
+
+ /* Create root window */
+
+ parent = dmxScreen->scrnWin; /* This is our "Screen" window */
+ visual = dmxScreen->beVisuals[dmxScreen->beDefVisualIndex].visual;
+
+ dixLookupResourceByType((pointer*) &pCmap, wColormap(pWindow),
+ RT_COLORMAP, NullClient, DixUnknownAccess);
+ pCmapPriv = DMX_GET_COLORMAP_PRIV(pCmap);
+
+ mask = CWEventMask | CWBackingStore | CWColormap | CWBorderPixel;
+ attribs.event_mask = ExposureMask;
+ attribs.backing_store = NotUseful;
+ attribs.colormap = pCmapPriv->cmap;
+ attribs.border_pixel = 0;
+
+ /* Incorporate new attributes, if needed */
+ if (pWinPriv->attribMask) {
+ dmxDoChangeWindowAttributes(pWindow, &pWinPriv->attribMask, &attribs);
+ mask |= pWinPriv->attribMask;
+ }
+
+ return XCreateWindow(dmxScreen->beDisplay,
+ parent,
+ pWindow->origin.x - wBorderWidth(pWindow),
+ pWindow->origin.y - wBorderWidth(pWindow),
+ pWindow->drawable.width,
+ pWindow->drawable.height,
+ pWindow->borderWidth,
+ pWindow->drawable.depth,
+ pWindow->drawable.class,
+ visual,
+ mask,
+ &attribs);
+}
+
+/** Change the location and size of the "screen" window. Called from
+ * #dmxConfigureScreenWindow(). */
+void dmxResizeScreenWindow(ScreenPtr pScreen,
+ int x, int y, int w, int h)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ unsigned int m;
+ XWindowChanges c;
+
+ if (!dmxScreen->beDisplay)
+ return;
+
+ /* Handle resizing on back-end server */
+ m = CWX | CWY | CWWidth | CWHeight;
+ c.x = x;
+ c.y = y;
+ c.width = w;
+ c.height = h;
+
+ XConfigureWindow(dmxScreen->beDisplay, dmxScreen->scrnWin, m, &c);
+ dmxSync(dmxScreen, False);
+}
+
+/** Change the location and size of the "root" window. Called from
+ * #dmxConfigureRootWindow. */
+void dmxResizeRootWindow(WindowPtr pRoot,
+ int x, int y, int w, int h)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[pRoot->drawable.pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pRoot);
+ unsigned int m;
+ XWindowChanges c;
+
+ /* Handle resizing on back-end server */
+ if (dmxScreen->beDisplay) {
+ m = CWX | CWY | CWWidth | CWHeight;
+ c.x = x;
+ c.y = y;
+ c.width = (w > 0) ? w : 1;
+ c.height = (h > 0) ? h : 1;
+
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ }
+
+ if (w == 0 || h == 0) {
+ if (pWinPriv->mapped) {
+ if (dmxScreen->beDisplay)
+ XUnmapWindow(dmxScreen->beDisplay, pWinPriv->window);
+ pWinPriv->mapped = FALSE;
+ }
+ } else if (!pWinPriv->mapped) {
+ if (dmxScreen->beDisplay)
+ XMapWindow(dmxScreen->beDisplay, pWinPriv->window);
+ pWinPriv->mapped = TRUE;
+ }
+
+ if (dmxScreen->beDisplay)
+ dmxSync(dmxScreen, False);
+}
+
+void dmxGetDefaultWindowAttributes(WindowPtr pWindow,
+ Colormap *cmap,
+ Visual **visual)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+
+ if (pWindow->drawable.class != InputOnly &&
+ pWindow->optional &&
+ pWindow->optional->visual != wVisual(pWindow->parent)) {
+
+ /* Find the matching visual */
+ *visual = dmxLookupVisualFromID(pScreen, wVisual(pWindow));
+
+ /* Handle optional colormaps */
+ if (pWindow->optional->colormap) {
+ ColormapPtr pCmap;
+ dmxColormapPrivPtr pCmapPriv;
+
+ dixLookupResourceByType((pointer*) &pCmap, wColormap(pWindow),
+ RT_COLORMAP, NullClient, DixUnknownAccess);
+ pCmapPriv = DMX_GET_COLORMAP_PRIV(pCmap);
+ *cmap = pCmapPriv->cmap;
+ } else {
+ *cmap = dmxColormapFromDefaultVisual(pScreen, *visual);
+ }
+ } else {
+ *visual = CopyFromParent;
+ *cmap = (Colormap)0;
+ }
+}
+
+static Window dmxCreateNonRootWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ Window parent;
+ unsigned long mask = 0L;
+ XSetWindowAttributes attribs;
+ dmxWinPrivPtr pParentPriv = DMX_GET_WINDOW_PRIV(pWindow->parent);
+
+ /* Create window on back-end server */
+
+ parent = pParentPriv->window;
+
+ /* The parent won't exist if this call to CreateNonRootWindow came
+ from ReparentWindow and the grandparent window has not yet been
+ created */
+ if (!parent) {
+ dmxCreateAndRealizeWindow(pWindow->parent, FALSE);
+ parent = pParentPriv->window;
+ }
+
+ /* Incorporate new attributes, if needed */
+ if (pWinPriv->attribMask) {
+ dmxDoChangeWindowAttributes(pWindow, &pWinPriv->attribMask, &attribs);
+ mask |= pWinPriv->attribMask;
+ }
+
+ /* Add in default attributes */
+ if (pWindow->drawable.class != InputOnly) {
+ mask |= CWBackingStore;
+ attribs.backing_store = NotUseful;
+
+ if (!(mask & CWColormap) && pWinPriv->cmap) {
+ mask |= CWColormap;
+ attribs.colormap = pWinPriv->cmap;
+ if (!(mask & CWBorderPixel)) {
+ mask |= CWBorderPixel;
+ attribs.border_pixel = 0;
+ }
+ }
+ }
+
+ /* Handle case where subwindows are being mapped, but created out of
+ order -- if current window has a previous sibling, then it cannot
+ be created on top of the stack, so we must restack the windows */
+ pWinPriv->restacked = (pWindow->prevSib != NullWindow);
+
+ return XCreateWindow(dmxScreen->beDisplay,
+ parent,
+ pWindow->origin.x - wBorderWidth(pWindow),
+ pWindow->origin.y - wBorderWidth(pWindow),
+ pWindow->drawable.width,
+ pWindow->drawable.height,
+ pWindow->borderWidth,
+ pWindow->drawable.depth,
+ pWindow->drawable.class,
+ pWinPriv->visual,
+ mask,
+ &attribs);
+}
+
+/** This function handles lazy window creation and realization. Window
+ * creation is handled by #dmxCreateNonRootWindow(). It also handles
+ * any stacking changes that have occured since the window was
+ * originally created by calling #dmxDoRestackWindow(). If the window
+ * is shaped, the shape is set on the back-end server by calling
+ * #dmxDoSetShape(), and if the window has pictures (from RENDER)
+ * associated with it, those pictures are created on the back-end
+ * server by calling #dmxCreatePictureList(). If \a doSync is TRUE,
+ * then #dmxSync() is called. */
+void dmxCreateAndRealizeWindow(WindowPtr pWindow, Bool doSync)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ if (!dmxScreen->beDisplay) return;
+
+ pWinPriv->window = dmxCreateNonRootWindow(pWindow);
+ if (pWinPriv->restacked) dmxDoRestackWindow(pWindow);
+ if (pWinPriv->isShaped) dmxDoSetShape(pWindow);
+ if (pWinPriv->hasPict) dmxCreatePictureList(pWindow);
+ if (pWinPriv->mapped) XMapWindow(dmxScreen->beDisplay,
+ pWinPriv->window);
+ if (doSync) dmxSync(dmxScreen, False);
+}
+
+/** Create \a pWindow on the back-end server. If the lazy window
+ * creation optimization is enabled, then the actual creation and
+ * realization of the window is handled by
+ * #dmxCreateAndRealizeWindow(). */
+Bool dmxCreateWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ Bool ret = TRUE;
+
+ DMX_UNWRAP(CreateWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->CreateWindow)
+ ret = pScreen->CreateWindow(pWindow);
+#endif
+
+ /* Set up the defaults */
+ pWinPriv->window = (Window)0;
+ pWinPriv->offscreen = TRUE;
+ pWinPriv->mapped = FALSE;
+ pWinPriv->restacked = FALSE;
+ pWinPriv->attribMask = 0;
+ pWinPriv->isShaped = FALSE;
+ pWinPriv->hasPict = FALSE;
+#ifdef GLXEXT
+ pWinPriv->swapGroup = NULL;
+ pWinPriv->barrier = 0;
+#endif
+
+ if (dmxScreen->beDisplay) {
+ /* Only create the root window at this stage -- non-root windows are
+ created when they are mapped and are on-screen */
+ if (!pWindow->parent) {
+ dmxScreen->rootWin = pWinPriv->window
+ = dmxCreateRootWindow(pWindow);
+ if (dmxScreen->scrnX != dmxScreen->rootX
+ || dmxScreen->scrnY != dmxScreen->rootY
+ || dmxScreen->scrnWidth != dmxScreen->rootWidth
+ || dmxScreen->scrnHeight != dmxScreen->rootHeight) {
+ dmxResizeRootWindow(pWindow,
+ dmxScreen->rootX,
+ dmxScreen->rootY,
+ dmxScreen->rootWidth,
+ dmxScreen->rootHeight);
+ dmxUpdateScreenResources(screenInfo.screens[dmxScreen->index],
+ dmxScreen->rootX,
+ dmxScreen->rootY,
+ dmxScreen->rootWidth,
+ dmxScreen->rootHeight);
+ pWindow->origin.x = dmxScreen->rootX;
+ pWindow->origin.y = dmxScreen->rootY;
+ }
+ } else {
+ dmxGetDefaultWindowAttributes(pWindow,
+ &pWinPriv->cmap,
+ &pWinPriv->visual);
+
+ if (dmxLazyWindowCreation) {
+ /* Save parent's visual for use later */
+ if (pWinPriv->visual == CopyFromParent)
+ pWinPriv->visual =
+ dmxLookupVisualFromID(pScreen,
+ wVisual(pWindow->parent));
+ } else {
+ pWinPriv->window = dmxCreateNonRootWindow(pWindow);
+ }
+ }
+
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(CreateWindow, dmxCreateWindow, dmxScreen, pScreen);
+
+ return ret;
+}
+
+/** Destroy \a pWindow on the back-end server. */
+Bool dmxBEDestroyWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ if (pWinPriv->window) {
+ XDestroyWindow(dmxScreen->beDisplay, pWinPriv->window);
+ pWinPriv->window = (Window)0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/** Destroy \a pWindow on the back-end server. If any RENDER pictures
+ were created, destroy them as well. */
+Bool dmxDestroyWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+ Bool needSync = FALSE;
+#ifdef GLXEXT
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+#endif
+
+ DMX_UNWRAP(DestroyWindow, dmxScreen, pScreen);
+
+ /* Destroy any picture list associated with this window */
+ needSync |= dmxDestroyPictureList(pWindow);
+
+ /* Destroy window on back-end server */
+ needSync |= dmxBEDestroyWindow(pWindow);
+ if (needSync) dmxSync(dmxScreen, FALSE);
+
+#ifdef GLXEXT
+ if (pWinPriv->swapGroup && pWinPriv->windowDestroyed)
+ pWinPriv->windowDestroyed(pWindow);
+#endif
+
+ if (pScreen->DestroyWindow)
+ ret = pScreen->DestroyWindow(pWindow);
+
+ DMX_WRAP(DestroyWindow, dmxDestroyWindow, dmxScreen, pScreen);
+
+ return ret;
+}
+
+/** Change the position of \a pWindow to be \a x, \a y. */
+Bool dmxPositionWindow(WindowPtr pWindow, int x, int y)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ unsigned int m;
+ XWindowChanges c;
+
+ DMX_UNWRAP(PositionWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->PositionWindow)
+ ret = pScreen->PositionWindow(pWindow, x, y);
+#endif
+
+ /* Determine if the window is completely off the visible portion of
+ the screen */
+ pWinPriv->offscreen = DMX_WINDOW_OFFSCREEN(pWindow);
+
+ /* If the window is now on-screen and it is mapped and it has not
+ been created yet, create it and map it */
+ if (!pWinPriv->window && pWinPriv->mapped && !pWinPriv->offscreen) {
+ dmxCreateAndRealizeWindow(pWindow, TRUE);
+ } else if (pWinPriv->window) {
+ /* Position window on back-end server */
+ m = CWX | CWY | CWWidth | CWHeight;
+ c.x = pWindow->origin.x - wBorderWidth(pWindow);
+ c.y = pWindow->origin.y - wBorderWidth(pWindow);
+ c.width = pWindow->drawable.width;
+ c.height = pWindow->drawable.height;
+ if (pWindow->drawable.class != InputOnly) {
+ m |= CWBorderWidth;
+ c.border_width = pWindow->borderWidth;
+ }
+
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(PositionWindow, dmxPositionWindow, dmxScreen, pScreen);
+
+ return ret;
+}
+
+static void dmxDoChangeWindowAttributes(WindowPtr pWindow,
+ unsigned long *mask,
+ XSetWindowAttributes *attribs)
+{
+ dmxPixPrivPtr pPixPriv;
+
+ if (*mask & CWBackPixmap) {
+ switch (pWindow->backgroundState) {
+ case None:
+ attribs->background_pixmap = None;
+ break;
+
+ case ParentRelative:
+ attribs->background_pixmap = ParentRelative;
+ break;
+
+ case BackgroundPixmap:
+ pPixPriv = DMX_GET_PIXMAP_PRIV(pWindow->background.pixmap);
+ attribs->background_pixmap = pPixPriv->pixmap;
+ break;
+
+ case BackgroundPixel:
+ *mask &= ~CWBackPixmap;
+ break;
+ }
+ }
+
+ if (*mask & CWBackPixel) {
+ if (pWindow->backgroundState == BackgroundPixel)
+ attribs->background_pixel = pWindow->background.pixel;
+ else
+ *mask &= ~CWBackPixel;
+ }
+
+ if (*mask & CWBorderPixmap) {
+ if (pWindow->borderIsPixel)
+ *mask &= ~CWBorderPixmap;
+ else {
+ pPixPriv = DMX_GET_PIXMAP_PRIV(pWindow->border.pixmap);
+ attribs->border_pixmap = pPixPriv->pixmap;
+ }
+ }
+
+ if (*mask & CWBorderPixel) {
+ if (pWindow->borderIsPixel)
+ attribs->border_pixel = pWindow->border.pixel;
+ else
+ *mask &= ~CWBorderPixel;
+ }
+
+ if (*mask & CWBitGravity)
+ attribs->bit_gravity = pWindow->bitGravity;
+
+ if (*mask & CWWinGravity)
+ *mask &= ~CWWinGravity; /* Handled by dix */
+
+ if (*mask & CWBackingStore)
+ *mask &= ~CWBackingStore; /* Backing store not supported */
+
+ if (*mask & CWBackingPlanes)
+ *mask &= ~CWBackingPlanes; /* Backing store not supported */
+
+ if (*mask & CWBackingPixel)
+ *mask &= ~CWBackingPixel; /* Backing store not supported */
+
+ if (*mask & CWOverrideRedirect)
+ attribs->override_redirect = pWindow->overrideRedirect;
+
+ if (*mask & CWSaveUnder)
+ *mask &= ~CWSaveUnder; /* Save unders not supported */
+
+ if (*mask & CWEventMask)
+ *mask &= ~CWEventMask; /* Events are handled by dix */
+
+ if (*mask & CWDontPropagate)
+ *mask &= ~CWDontPropagate; /* Events are handled by dix */
+
+ if (*mask & CWColormap) {
+ ColormapPtr pCmap;
+ dmxColormapPrivPtr pCmapPriv;
+
+ dixLookupResourceByType((pointer*) &pCmap, wColormap(pWindow),
+ RT_COLORMAP, NullClient, DixUnknownAccess);
+ pCmapPriv = DMX_GET_COLORMAP_PRIV(pCmap);
+ attribs->colormap = pCmapPriv->cmap;
+ }
+
+ if (*mask & CWCursor)
+ *mask &= ~CWCursor; /* Handled by the cursor code */
+}
+
+/** Change the window attributes of \a pWindow. */
+Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ XSetWindowAttributes attribs;
+
+ DMX_UNWRAP(ChangeWindowAttributes, dmxScreen, pScreen);
+#if 0
+ if (pScreen->ChangeWindowAttributes)
+ ret = pScreen->ChangeWindowAttributes(pWindow, mask);
+#endif
+
+ /* Change window attribs on back-end server */
+ dmxDoChangeWindowAttributes(pWindow, &mask, &attribs);
+
+ /* Save mask for lazy window creation optimization */
+ pWinPriv->attribMask |= mask;
+
+ if (mask && pWinPriv->window) {
+ XChangeWindowAttributes(dmxScreen->beDisplay, pWinPriv->window,
+ mask, &attribs);
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(ChangeWindowAttributes, dmxChangeWindowAttributes, dmxScreen,
+ pScreen);
+
+ return ret;
+}
+
+/** Realize \a pWindow on the back-end server. If the lazy window
+ * creation optimization is enabled, the window is only realized when
+ * it at least partially overlaps the screen. */
+Bool dmxRealizeWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ DMX_UNWRAP(RealizeWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->RealizeWindow)
+ ret = pScreen->RealizeWindow(pWindow);
+#endif
+
+ /* Determine if the window is completely off the visible portion of
+ the screen */
+ pWinPriv->offscreen = DMX_WINDOW_OFFSCREEN(pWindow);
+
+ /* If the window hasn't been created and it's not offscreen, then
+ create it */
+ if (!pWinPriv->window && !pWinPriv->offscreen) {
+ dmxCreateAndRealizeWindow(pWindow, FALSE);
+ }
+
+ if (pWinPriv->window) {
+ /* Realize window on back-end server */
+ XMapWindow(dmxScreen->beDisplay, pWinPriv->window);
+ dmxSync(dmxScreen, False);
+ }
+
+ /* Let the other functions know that the window is now mapped */
+ pWinPriv->mapped = TRUE;
+
+ DMX_WRAP(RealizeWindow, dmxRealizeWindow, dmxScreen, pScreen);
+
+ dmxUpdateWindowInfo(DMX_UPDATE_REALIZE, pWindow);
+ return ret;
+}
+
+/** Unrealize \a pWindow on the back-end server. */
+Bool dmxUnrealizeWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ Bool ret = TRUE;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ DMX_UNWRAP(UnrealizeWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->UnrealizeWindow)
+ ret = pScreen->UnrealizeWindow(pWindow);
+#endif
+
+ if (pWinPriv->window) {
+ /* Unrealize window on back-end server */
+ XUnmapWindow(dmxScreen->beDisplay, pWinPriv->window);
+ dmxSync(dmxScreen, False);
+ }
+
+ /* When unrealized (i.e., unmapped), the window is always considered
+ off of the visible portion of the screen */
+ pWinPriv->offscreen = TRUE;
+ pWinPriv->mapped = FALSE;
+
+#ifdef GLXEXT
+ if (pWinPriv->swapGroup && pWinPriv->windowUnmapped)
+ pWinPriv->windowUnmapped(pWindow);
+#endif
+
+ DMX_WRAP(UnrealizeWindow, dmxUnrealizeWindow, dmxScreen, pScreen);
+
+ dmxUpdateWindowInfo(DMX_UPDATE_UNREALIZE, pWindow);
+ return ret;
+}
+
+static void dmxDoRestackWindow(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ WindowPtr pNextSib = pWindow->nextSib;
+ unsigned int m;
+ XWindowChanges c;
+
+ if (pNextSib == NullWindow) {
+ /* Window is at the bottom of the stack */
+ m = CWStackMode;
+ c.sibling = (Window)0;
+ c.stack_mode = Below;
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ } else {
+ /* Window is not at the bottom of the stack */
+ dmxWinPrivPtr pNextSibPriv = DMX_GET_WINDOW_PRIV(pNextSib);
+
+ /* Handle case where siblings have not yet been created due to
+ lazy window creation optimization by first finding the next
+ sibling in the sibling list that has been created (if any)
+ and then putting the current window just above that sibling,
+ and if no next siblings have been created yet, then put it at
+ the bottom of the stack (since it might have a previous
+ sibling that should be above it). */
+ while (!pNextSibPriv->window) {
+ pNextSib = pNextSib->nextSib;
+ if (pNextSib == NullWindow) {
+ /* Window is at the bottom of the stack */
+ m = CWStackMode;
+ c.sibling = (Window)0;
+ c.stack_mode = Below;
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ return;
+ }
+ pNextSibPriv = DMX_GET_WINDOW_PRIV(pNextSib);
+ }
+
+ m = CWStackMode | CWSibling;
+ c.sibling = pNextSibPriv->window;
+ c.stack_mode = Above;
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ }
+}
+
+/** Handle window restacking. The actual restacking occurs in
+ * #dmxDoRestackWindow(). */
+void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ DMX_UNWRAP(RestackWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->RestackWindow)
+ pScreen->RestackWindow(pWindow, pOldNextSib);
+#endif
+
+ if (pOldNextSib != pWindow->nextSib) {
+ /* Track restacking for lazy window creation optimization */
+ pWinPriv->restacked = TRUE;
+
+ /* Restack window on back-end server */
+ if (pWinPriv->window) {
+ dmxDoRestackWindow(pWindow);
+ dmxSync(dmxScreen, False);
+ }
+ }
+
+ DMX_WRAP(RestackWindow, dmxRestackWindow, dmxScreen, pScreen);
+ dmxUpdateWindowInfo(DMX_UPDATE_RESTACK, pWindow);
+}
+
+static Bool dmxWindowExposurePredicate(Display *dpy, XEvent *ev, XPointer ptr)
+{
+ return (ev->type == Expose && ev->xexpose.window == *(Window *)ptr);
+}
+
+/** Handle exposures on \a pWindow. Since window exposures are handled
+ * in DMX, the events that are generated by the back-end server are
+ * redundant, so we eat them here. */
+void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn,
+ RegionPtr other_exposed)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ XEvent ev;
+
+ DMX_UNWRAP(WindowExposures, dmxScreen, pScreen);
+
+ dmxSync(dmxScreen, False);
+
+ if (pWinPriv->window) {
+ while (XCheckIfEvent(dmxScreen->beDisplay, &ev,
+ dmxWindowExposurePredicate,
+ (XPointer)&pWinPriv->window)) {
+ /* Handle expose events -- this should not be necessary
+ since the base window in which the root window was
+ created is guaranteed to be on top (override_redirect),
+ so we should just swallow these events. If for some
+ reason the window is not on top, then we'd need to
+ collect these events and send them to the client later
+ (e.g., during the block handler as Xnest does). */
+ }
+ }
+
+#if 1
+ if (pScreen->WindowExposures)
+ pScreen->WindowExposures(pWindow, prgn, other_exposed);
+#endif
+ DMX_WRAP(WindowExposures, dmxWindowExposures, dmxScreen, pScreen);
+}
+
+/** Move \a pWindow on the back-end server. Determine whether or not it
+ * is on or offscreen, and realize it if it is newly on screen and the
+ * lazy window creation optimization is enabled. */
+void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ unsigned int m;
+ XWindowChanges c;
+
+ DMX_UNWRAP(CopyWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->CopyWindow)
+ pScreen->CopyWindow(pWindow, ptOldOrg, prgnSrc);
+#endif
+
+ /* Determine if the window is completely off the visible portion of
+ the screen */
+ pWinPriv->offscreen = DMX_WINDOW_OFFSCREEN(pWindow);
+
+ /* If the window is now on-screen and it is mapped and it has not
+ been created yet, create it and map it */
+ if (!pWinPriv->window && pWinPriv->mapped && !pWinPriv->offscreen) {
+ dmxCreateAndRealizeWindow(pWindow, TRUE);
+ } else if (pWinPriv->window) {
+ /* Move window on back-end server */
+ m = CWX | CWY | CWWidth | CWHeight;
+ c.x = pWindow->origin.x - wBorderWidth(pWindow);
+ c.y = pWindow->origin.y - wBorderWidth(pWindow);
+ c.width = pWindow->drawable.width;
+ c.height = pWindow->drawable.height;
+
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(CopyWindow, dmxCopyWindow, dmxScreen, pScreen);
+ dmxUpdateWindowInfo(DMX_UPDATE_COPY, pWindow);
+}
+
+/** Resize \a pWindow on the back-end server. Determine whether or not
+ * it is on or offscreen, and realize it if it is newly on screen and
+ * the lazy window creation optimization is enabled. */
+void dmxResizeWindow(WindowPtr pWindow, int x, int y,
+ unsigned int w, unsigned int h, WindowPtr pSib)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ dmxWinPrivPtr pSibPriv;
+ unsigned int m;
+ XWindowChanges c;
+
+ if (pSib)
+ pSibPriv = DMX_GET_WINDOW_PRIV(pSib);
+
+ DMX_UNWRAP(ResizeWindow, dmxScreen, pScreen);
+#if 1
+ if (pScreen->ResizeWindow)
+ pScreen->ResizeWindow(pWindow, x, y, w, h, pSib);
+#endif
+
+ /* Determine if the window is completely off the visible portion of
+ the screen */
+ pWinPriv->offscreen = DMX_WINDOW_OFFSCREEN(pWindow);
+
+ /* If the window is now on-screen and it is mapped and it has not
+ been created yet, create it and map it */
+ if (!pWinPriv->window && pWinPriv->mapped && !pWinPriv->offscreen) {
+ dmxCreateAndRealizeWindow(pWindow, TRUE);
+ } else if (pWinPriv->window) {
+ /* Handle resizing on back-end server */
+ m = CWX | CWY | CWWidth | CWHeight;
+ c.x = pWindow->origin.x - wBorderWidth(pWindow);
+ c.y = pWindow->origin.y - wBorderWidth(pWindow);
+ c.width = pWindow->drawable.width;
+ c.height = pWindow->drawable.height;
+
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(ResizeWindow, dmxResizeWindow, dmxScreen, pScreen);
+ dmxUpdateWindowInfo(DMX_UPDATE_RESIZE, pWindow);
+}
+
+/** Reparent \a pWindow on the back-end server. */
+void dmxReparentWindow(WindowPtr pWindow, WindowPtr pPriorParent)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ dmxWinPrivPtr pParentPriv = DMX_GET_WINDOW_PRIV(pWindow->parent);
+
+ DMX_UNWRAP(ReparentWindow, dmxScreen, pScreen);
+#if 0
+ if (pScreen->ReparentWindow)
+ pScreen->ReparentWindow(pWindow, pPriorParent);
+#endif
+
+ if (pWinPriv->window) {
+ if (!pParentPriv->window) {
+ dmxCreateAndRealizeWindow(pWindow->parent, FALSE);
+ }
+
+ /* Handle reparenting on back-end server */
+ XReparentWindow(dmxScreen->beDisplay, pWinPriv->window,
+ pParentPriv->window,
+ pWindow->origin.x - wBorderWidth(pWindow),
+ pWindow->origin.x - wBorderWidth(pWindow));
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(ReparentWindow, dmxReparentWindow, dmxScreen, pScreen);
+ dmxUpdateWindowInfo(DMX_UPDATE_REPARENT, pWindow);
+}
+
+/** Change border width for \a pWindow to \a width pixels. */
+void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ unsigned int m;
+ XWindowChanges c;
+
+ DMX_UNWRAP(ChangeBorderWidth, dmxScreen, pScreen);
+#if 1
+ if (pScreen->ChangeBorderWidth)
+ pScreen->ChangeBorderWidth(pWindow, width);
+#endif
+
+ /* NOTE: Do we need to check for on/off screen here? */
+
+ if (pWinPriv->window) {
+ /* Handle border width change on back-end server */
+ m = CWBorderWidth;
+ c.border_width = width;
+
+ XConfigureWindow(dmxScreen->beDisplay, pWinPriv->window, m, &c);
+ dmxSync(dmxScreen, False);
+ }
+
+ DMX_WRAP(ChangeBorderWidth, dmxChangeBorderWidth, dmxScreen, pScreen);
+}
+
+static void dmxDoSetShape(WindowPtr pWindow)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+ int nBox;
+ BoxPtr pBox;
+ int nRect;
+ XRectangle *pRect;
+ XRectangle *pRectFirst;
+
+ /* First, set the bounding shape */
+ if (wBoundingShape(pWindow)) {
+ pBox = RegionRects(wBoundingShape(pWindow));
+ nRect = nBox = RegionNumRects(wBoundingShape(pWindow));
+ pRectFirst = pRect = malloc(nRect * sizeof(*pRect));
+ while (nBox--) {
+ pRect->x = pBox->x1;
+ pRect->y = pBox->y1;
+ pRect->width = pBox->x2 - pBox->x1;
+ pRect->height = pBox->y2 - pBox->y1;
+ pBox++;
+ pRect++;
+ }
+ XShapeCombineRectangles(dmxScreen->beDisplay, pWinPriv->window,
+ ShapeBounding, 0, 0,
+ pRectFirst, nRect,
+ ShapeSet, YXBanded);
+ free(pRectFirst);
+ } else {
+ XShapeCombineMask(dmxScreen->beDisplay, pWinPriv->window,
+ ShapeBounding, 0, 0, None, ShapeSet);
+ }
+
+ /* Next, set the clip shape */
+ if (wClipShape(pWindow)) {
+ pBox = RegionRects(wClipShape(pWindow));
+ nRect = nBox = RegionNumRects(wClipShape(pWindow));
+ pRectFirst = pRect = malloc(nRect * sizeof(*pRect));
+ while (nBox--) {
+ pRect->x = pBox->x1;
+ pRect->y = pBox->y1;
+ pRect->width = pBox->x2 - pBox->x1;
+ pRect->height = pBox->y2 - pBox->y1;
+ pBox++;
+ pRect++;
+ }
+ XShapeCombineRectangles(dmxScreen->beDisplay, pWinPriv->window,
+ ShapeClip, 0, 0,
+ pRectFirst, nRect,
+ ShapeSet, YXBanded);
+ free(pRectFirst);
+ } else {
+ XShapeCombineMask(dmxScreen->beDisplay, pWinPriv->window,
+ ShapeClip, 0, 0, None, ShapeSet);
+ }
+
+ if (XShapeInputSelected(dmxScreen->beDisplay, pWinPriv->window)) {
+ ErrorF("Input selected for window %x on Screen %d\n",
+ (unsigned int)pWinPriv->window, pScreen->myNum);
+ }
+}
+
+/** Set shape of \a pWindow on the back-end server. */
+void dmxSetShape(WindowPtr pWindow, int kind)
+{
+ ScreenPtr pScreen = pWindow->drawable.pScreen;
+ DMXScreenInfo *dmxScreen = &dmxScreens[pScreen->myNum];
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWindow);
+
+ DMX_UNWRAP(SetShape, dmxScreen, pScreen);
+#if 1
+ if (pScreen->SetShape)
+ pScreen->SetShape(pWindow, kind);
+#endif
+
+ if (pWinPriv->window) {
+ /* Handle setting the current shape on the back-end server */
+ dmxDoSetShape(pWindow);
+ dmxSync(dmxScreen, False);
+ } else {
+ pWinPriv->isShaped = TRUE;
+ }
+
+ DMX_WRAP(SetShape, dmxSetShape, dmxScreen, pScreen);
+}
diff --git a/hw/dmx/dmxwindow.h b/hw/dmx/dmxwindow.h
new file mode 100644
index 0000000..f93121e
--- /dev/null
+++ b/hw/dmx/dmxwindow.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for window support. \see dmxwindow.c */
+
+#ifndef DMXWINDOW_H
+#define DMXWINDOW_H
+
+#include "windowstr.h"
+
+/** Window private area. */
+typedef struct _dmxWinPriv {
+ Window window;
+ Bool offscreen;
+ Bool mapped;
+ Bool restacked;
+ unsigned long attribMask;
+ Colormap cmap;
+ Visual *visual;
+ Bool isShaped;
+ Bool hasPict;
+#ifdef GLXEXT
+ void *swapGroup;
+ int barrier;
+ void (*windowDestroyed)(WindowPtr);
+ void (*windowUnmapped)(WindowPtr);
+#endif
+} dmxWinPrivRec, *dmxWinPrivPtr;
+
+
+extern Bool dmxInitWindow(ScreenPtr pScreen);
+
+extern Window dmxCreateRootWindow(WindowPtr pWindow);
+
+extern void dmxGetDefaultWindowAttributes(WindowPtr pWindow,
+ Colormap *cmap,
+ Visual **visual);
+extern void dmxCreateAndRealizeWindow(WindowPtr pWindow, Bool doSync);
+
+extern Bool dmxCreateWindow(WindowPtr pWindow);
+extern Bool dmxDestroyWindow(WindowPtr pWindow);
+extern Bool dmxPositionWindow(WindowPtr pWindow, int x, int y);
+extern Bool dmxChangeWindowAttributes(WindowPtr pWindow, unsigned long mask);
+extern Bool dmxRealizeWindow(WindowPtr pWindow);
+extern Bool dmxUnrealizeWindow(WindowPtr pWindow);
+extern void dmxRestackWindow(WindowPtr pWindow, WindowPtr pOldNextSib);
+extern void dmxWindowExposures(WindowPtr pWindow, RegionPtr prgn,
+ RegionPtr other_exposed);
+extern void dmxCopyWindow(WindowPtr pWindow, DDXPointRec ptOldOrg,
+ RegionPtr prgnSrc);
+
+extern void dmxResizeWindow(WindowPtr pWindow, int x, int y,
+ unsigned int w, unsigned int h, WindowPtr pSib);
+extern void dmxReparentWindow(WindowPtr pWindow, WindowPtr pPriorParent);
+
+extern void dmxChangeBorderWidth(WindowPtr pWindow, unsigned int width);
+
+extern void dmxResizeScreenWindow(ScreenPtr pScreen,
+ int x, int y, int w, int h);
+extern void dmxResizeRootWindow(WindowPtr pRoot,
+ int x, int y, int w, int h);
+
+extern Bool dmxBEDestroyWindow(WindowPtr pWindow);
+
+/* Support for shape extension */
+extern void dmxSetShape(WindowPtr pWindow, int kind);
+
+/** Get window private pointer. */
+#define DMX_GET_WINDOW_PRIV(_pWin) ((dmxWinPrivPtr) \
+ dixLookupPrivate(&(_pWin)->devPrivates, dmxWinPrivateKey))
+
+/* All of these macros are only used in dmxwindow.c */
+#define DMX_WINDOW_FUNC_PROLOGUE(_pGC) \
+do { \
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \
+ DMX_UNWRAP(funcs, pGCPriv, (_pGC)); \
+ if (pGCPriv->ops) \
+ DMX_UNWRAP(ops, pGCPriv, (_pGC)); \
+} while (0)
+
+#define DMX_WINDOW_FUNC_EPILOGUE(_pGC) \
+do { \
+ dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \
+ DMX_WRAP(funcs, &dmxGCFuncs, pGCPriv, (_pGC)); \
+ if (pGCPriv->ops) \
+ DMX_WRAP(ops, &dmxGCOps, pGCPriv, (_pGC)); \
+} while (0)
+
+#define DMX_WINDOW_X1(_pWin) \
+ ((_pWin)->drawable.x - wBorderWidth(_pWin))
+#define DMX_WINDOW_Y1(_pWin) \
+ ((_pWin)->drawable.y - wBorderWidth(_pWin))
+#define DMX_WINDOW_X2(_pWin) \
+ ((_pWin)->drawable.x + wBorderWidth(_pWin) + (_pWin)->drawable.width)
+#define DMX_WINDOW_Y2(_pWin) \
+ ((_pWin)->drawable.y + wBorderWidth(_pWin) + (_pWin)->drawable.height)
+
+#define DMX_WINDOW_OFFSCREEN(_pWin) \
+ (DMX_WINDOW_X1(_pWin) >= (_pWin)->drawable.pScreen->width || \
+ DMX_WINDOW_Y1(_pWin) >= (_pWin)->drawable.pScreen->height || \
+ DMX_WINDOW_X2(_pWin) <= 0 || \
+ DMX_WINDOW_Y2(_pWin) <= 0)
+
+#endif /* DMXWINDOW_H */
diff --git a/hw/dmx/doc/DMXSpec-v1.txt b/hw/dmx/doc/DMXSpec-v1.txt
new file mode 100644
index 0000000..cea97b9
--- /dev/null
+++ b/hw/dmx/doc/DMXSpec-v1.txt
@@ -0,0 +1,458 @@
+
+
+ Client-to-Server DMX Extension to the X Protocol
+
+ $Date$, $Revision$
+
+ Rickard E. (Rik) Faith (faith@redhat.com)
+ Kevin E. Martin (kem@redhat.com)
+
+ Copyright 2002,2003 Red Hat Inc., Raleigh, North Carolina.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation on the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the
+ Software, and to permit persons to whom the Software is furnished to
+ do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial
+ portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+
+
+1. Overview
+
+ The client-to-server DMX extension to the X protocol (DMX) provides
+ normal client applications with the ability to determine information
+ about the characteristics of the Xdmx server and the back-end X
+ servers that DMX is using.
+
+ The name for this extension is "DMX".
+
+
+
+2. Syntactic conventions
+
+ This document uses the same syntactic conventions requests and data
+ types as [X11R6.4].
+
+
+
+3. Data types
+
+ No new data types are defined by this extension. All data types
+ referenced in this document are defined in [X11R6.4].
+
+
+
+4. Requests
+
+ DMXQueryVersion
+ ==>
+ majorVersion: CARD32
+ minorVersion: CARD32
+ patchVersion: CARD32
+
+ The protocol this extension actually supports is indicated by
+ majorVersion and minorVersion (patchVersion indicates the
+ patchlevel and is for informational purposes only).
+
+ Any incompatible changes to the protocol should be indicated by
+ incrementing majorVersion.
+
+ Small, upward-compatible changes should be indicated by incrementing
+ minorVersion.
+
+ Servers that support the protocol defined in this document will
+ return a majorVersion of 1 and a minorVersion of 1.
+
+
+
+ DMXGetScreenCount
+ ==>
+ screenCount: CARD32
+
+ This request returns the number of back-end screens that the Xdmx
+ server controls. A back-end screen may be managed as a regular X
+ screen in the Xdmx server or may be joined with other back-end
+ screens using Xinerama. (The information returned by this request
+ does not change while Xdmx is running and may be cached on the
+ client side.)
+
+
+
+ DMXGetScreenInformation
+ physicalScreen: CARD32
+ ==>
+ displayName: STRING8
+ width: CARD16
+ height: CARD16
+ xoffset: INT16
+ yoffset: INT16
+ logicalScreen: CARD32
+ xorigin: INT16
+ yorigin: INT16
+
+ Errors: Value
+
+ This request returns information about individual back-end screens.
+ The physicalScreen value is between 0 and screenCount-1, inclusive
+ (values outside this range will result in a Value error). The
+ displayname is the name used to open the display, either from the
+ Xdmx command-line or from the configuration file. The width,
+ height, xoffset, and yoffset values comprise a geometry
+ specification (see X(7x)) for the location of the DMX window on the
+ back-end screen. This request will always return non-negative
+ (i.e., normalized) values for xoffset and yoffset. The
+ logicalScreen value is the value of the screen that that Xdmx server
+ exports to clients. When Xinerama is in use, this value is
+ typically 0 for all values of physicalScreen. If Xinerama is in
+ use, the xorigin and yorigin values specify where the physical
+ screen is positioned in the global Xinerama coordinate system.
+ Otherwise, these values are set to 0. (The information returned by
+ this request does not change while Xdmx is running and may be cached
+ on the client side.)
+
+
+
+ DMXGetWindowInformation
+ window: CARD32
+ ==>
+ screenCount: CARD32
+ screens: LISTofCARD32
+ windows: LISTofCARD32
+ pos: LISTofRECTANGLE
+ vis: LISTofRECTANGLE
+
+ Errors: Window, Alloc
+
+ This request computed the return values incorrectly for version 1.0
+ of this protocol. Version 1.1 of this protocol conforms to this
+ description.
+
+ Given a window ID on the Xdmx server, this request returns data
+ about how the window is represented on the back-end X servers. For
+ each back-end X server that displays a portion of the window, the
+ following information is returned:
+ 1) the number of the physical screen containing that portion
+ (which can be used with the DMXGetScreenInformation request
+ to obtain more information about the screen),
+ 2) the window ID on the back-end X server of the window
+ containing that portion,
+ 3) the position and dimensions of the window on the back-end, in
+ screen coordinates, and
+ 4) the visible area of the window on the back-end, in
+ window-relative coordinates (all zeros for windows that are
+ not visible)
+ Note that DMX allows multiple back-end windows to overlap in their
+ view of the DMX logical window. Further, a logical window does not
+ have to be completely covered by back-end windows -- there may be
+ gaps.
+
+ As an example, consider a 500x500 window that spans the top two
+ 1024x768 back-end displays (A and B) of a 2048x1536 DMX display
+ composed of 4 1024x768 back-end displays arranged in a cube:
+ A B
+ C D
+
+ In this case, the DMXGetWindowInformation call would return the
+ following information for the 500x500 window:
+
+ display A: 500x500 window at 1024-250,0 (relative to back end)
+ with 250x500 visible at 0,0 (relative to window origin)
+
+ display B: 500x500 window at -250,0 (relative to back end)
+ with 250x500 visible at 250,0 (relative to window origin)
+
+ display C: 500x500 window at 1024-250,-768 with 0x0 visible at 0,0
+
+ display D: 500x500 window at -250,-768 with 0x0 visible at 0,0
+
+ Note that if the specified window has not yet been mapped when
+ DMXGetWindowInformation is called, then a subsequent XMapWindow call
+ might be buffered in xlib while requests directly to the back-end X
+ servers are processed. This race condition can be solved by calling
+ DMXSync before talking directly to the back-end X servers.
+
+
+ DMXGetInputCount
+ ==>
+ inputCount: CARD32
+
+ This request was first supported in version 1.1 of this protocol.
+
+ This request returns the number of input devices connected to the
+ Xdmx server. This number is the same as that returned by
+ XListInputDevices, but is available even when the XInput extension
+ is not supported.
+
+
+
+ DMXGetInputInformation
+ deviceId: CARD32
+ ==>
+ inputType: CARD32
+ physicalScreen: CARD32
+ physicalId: CARD32
+ isCore: BOOL
+ sendsCore: BOOL
+ name: STRING8
+
+ Errors: Value
+
+ This request was first supported in version 1.1 of this protocol.
+
+ This request returns information about the specified input device
+ that cannot be obtained from the XListInputDeivices call. The
+ deviceId is the same as that used by the XListInputDevices call, and
+ must be in the range 0 to inputCount-1, inclusive (values outside
+ this range will result in a Value error).
+
+ The value of inputType will always be value, and will be one of the
+ following values:
+ 0 for local (and dummy) devices,
+ 1 for console devices, and
+ 2 for back-end devices.
+
+ For local devices, all other fields returned, except isCore and
+ sendsCore, are invalid.
+
+ For console devices, the physicalScreen and physicalID will be
+ invalid, and the name will return the name of the X server on which
+ the console window is displayed.
+
+ For back-end devices, the physicalScreen will identify the back-end
+ display and can be used as an argument to DMXGetScreenInformation to
+ obtain more information; the physicalId will be the XInput device id
+ on the back-end X server; and the name will be invalid (since it
+ does not provide any additional information that cannot be obtained
+ with DMXGetScreenInformation).
+
+ If isCore is True, then this device is active as a true core input
+ device and will send core events. If sendsCore is True, then this
+ device queried an XInput extension device, but sends core events
+ instead of extension events. Note that this behavior is different
+ from that of XFree86, where XInput extension devices may send both
+ extension events and core events.
+
+
+
+ DMXForceWindowCreation
+ window: CARD32
+ ==>
+
+ Errors: Window
+
+ This request was first supported in version 1.2 of this protocol.
+
+ When using the lazy window creation optimization, windows are not
+ created on the back-end X servers until they are required. This
+ request forces the immediate creation of the window requested.
+
+
+
+ DMXReconfigureScreen
+ screen: CARD32
+ x: INT16
+ y: INT16
+ ==>
+ status: CARD32
+
+ Errors: Value
+
+ This request was first supported in version 1.3 of this protocol.
+
+ This request reconfigures the screen position to coordinates (x,y)
+ when using the Xinerama extension. Otherwise, it is a NOP. Illegal
+ values for screen will result in a BadValue error. Other non-fatal
+ errors will be returned in status.
+
+
+
+ DMXSync
+ ==>
+
+ This request was first supported in version 1.5 of this protocol.
+
+ This request flushes all pending protocol requests between the Xdmx
+ server and each back-end X server. It is used by a client that
+ talks directly to back-end X servers
+
+ To ensure proper synchronization semantics, this request has a
+ reply, but the reply does not carry any information.
+
+
+
+5. Events
+
+ No new events are defined by this extension.
+
+
+
+6. Errors
+
+ No new events are defined by this extension.
+
+
+
+7. Encoding
+
+ DMXQueryVersion
+ 1 CARD8 opcode (X assigned)
+ 1 0 DMX opcode (X_DMXQueryVersion)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 majorVersion
+ 4 CARD32 minorVersion
+ 4 CARD32 patchVersion
+ 12 unused
+
+ DMXGetScreenCount
+ 1 CARD8 opcode (X assigned)
+ 1 1 DMX opcode (X_DMXGetScreenCount)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 screenCount
+ 20 unused
+
+ DMXGetScreenInformation
+ 1 CARD8 opcode (X assigned)
+ 1 2 DMX opcode (X_DMXGetScreenInformation)
+ 2 2 request length
+ 4 CARD32 physicalScreen
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n/4+p reply length
+ 4 n displayNameLength
+ 2 CARD16 width
+ 2 CARD16 height
+ 2 INT16 xoffset
+ 2 INT16 yoffset
+ 4 CARD32 logicalScreen
+ 2 INT16 xorigin
+ 2 INT16 yorigin
+ 4 unused
+ n displayName
+ p pad(n)
+
+ DMXGetWindowInformation
+ 1 CARD8 opcode (X assigned)
+ 1 3 DMX opcode (X_DMXGetWindowInformation)
+ 2 2 request length
+ 4 CARD32 window
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n*6 reply length
+ 4 n screenCount
+ 20 unused
+ n*4 LISTofCARD32 screens
+ n*4 LISTofCARD32 windows
+ n*8 LISTofRECTANGLE pos
+ n*8 LISTofRECTANGLE vis
+
+ DMXGetInputCount
+ 1 CARD8 opcode (X assigned)
+ 1 DMX opcode (X_DMXGetInputCount)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 inputCount
+ 20 unused
+
+ DMXGetInputInformation
+ 1 CARD8 opcode (X assigned)
+ 1 4 DMX opcode (X_DMXGetInputInformation)
+ 2 2 request length
+ 4 CARD32 deviceId
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n/4+p reply length
+ 4 CARD32 inputType
+ 4 CARD32 physicalScreen
+ 4 CARD32 physicalId
+ 4 n nameLength
+ 1 BOOL isCore
+ 1 BOOL sendsCore
+ 6 unused
+ n name
+ p pad(n)
+
+ DMXForceWindowCreation
+ 1 CARD8 opcode (X assigned)
+ 1 2 DMX opcode (X_DMXForceWindowCreation)
+ 2 2 request length
+ 4 CARD32 window
+ ==>
+
+ DMXReconfigureScreen
+ 1 CARD8 opcode (X assigned)
+ 1 2 DMX opcode (X_DMXReconfigureScreen)
+ 2 2 request length
+ 4 CARD32 screen
+ 2 INT16 x
+ 2 INT16 y
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 20 unused
+
+ DMXSync
+ 1 CARD8 opcode (X assigned)
+ 1 0 DMX opcode (X_DMXSync)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 24 unused
+
+
+8. Changes to existing requests/replies/events
+
+ No changes to existing requests, replies, or events are necessitated
+ by this extension.
+
+
+
+9. Acknowledgments
+
+
+
+10. References
+
+ [X11R6.4] Robert W. Sheifler. X Window System Protocol, X Consortium
+ Standard, X Version 11, Release 6.4. Available from
+ xc/doc/specs/XProtocol and xc/doc/hardcopy/XProtocol.
diff --git a/hw/dmx/doc/DMXSpec.txt b/hw/dmx/doc/DMXSpec.txt
new file mode 100644
index 0000000..4009f12
--- /dev/null
+++ b/hw/dmx/doc/DMXSpec.txt
@@ -0,0 +1,875 @@
+
+
+ Client-to-Server DMX Extension to the X Protocol
+
+ $Date$, $Revision$
+
+ Rickard E. (Rik) Faith (faith@redhat.com)
+ Kevin E. Martin (kem@redhat.com)
+
+ Copyright 2002-2004 Red Hat Inc., Raleigh, North Carolina.
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation files
+ (the "Software"), to deal in the Software without restriction,
+ including without limitation on the rights to use, copy, modify,
+ merge, publish, distribute, sublicense, and/or sell copies of the
+ Software, and to permit persons to whom the Software is furnished to
+ do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice (including the
+ next paragraph) shall be included in all copies or substantial
+ portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+
+
+1. Overview
+
+ The client-to-server DMX extension to the X protocol (DMX) provides
+ normal client applications with the ability to determine information
+ about the characteristics of the Xdmx server and the back-end X
+ servers that DMX is using.
+
+ The name for this extension is "DMX".
+
+
+
+2. Syntactic conventions
+
+ This document uses the same syntactic conventions requests and data
+ types as [X11R6.4].
+
+
+
+3. Data types
+
+ No new data types are defined by this extension. All data types
+ referenced in this document are defined in [X11R6.4].
+
+
+
+4. Requests
+
+ DMXQueryVersion
+ ==>
+ majorVersion: CARD32
+ minorVersion: CARD32
+ patchVersion: CARD32
+
+ Errors: None
+
+ The protocol this extension actually supports is indicated by
+ majorVersion and minorVersion (patchVersion indicates the
+ patchlevel and is for informational purposes only).
+
+ Any incompatible changes to the protocol should be indicated by
+ incrementing majorVersion.
+
+ Small, upward-compatible changes should be indicated by incrementing
+ minorVersion.
+
+ Servers that support the protocol defined in this document will
+ return a majorVersion of 2 and a minorVersion of 2.
+
+ (Version 1.5 was the last version in the 1.x series; version 2.0 was
+ a testing version that was poorly defined.)
+
+
+
+ DMXSync
+ ==>
+ status: CARD32
+
+ Errors: None
+
+ This request was first supported in version 1.5 of this protocol.
+ The status field in the reply was introduced in version 2.0 of this
+ protocol. Since the status field is ignored, no changes to the
+ underlying protocol were required.
+
+ This request flushes all pending protocol requests between the Xdmx
+ server and each back-end X server. It is used by clients that
+ talk directly to back-end X servers to ensure that all pending Xdmx
+ requests have reached all back-end servers and have been processed
+ by those servers.
+
+ The value of status is always 0.
+
+
+
+ DMXForceWindowCreation
+ window: CARD32
+ ==>
+ status: CARD32
+
+ Errors: Window
+
+ This request was first supported in version 1.2 of this protocol.
+ This request was changed to have a reply in version 2.0 of this
+ protocol. The old version of this request was deprecated and will
+ return BadImplementation.
+
+ When using the lazy window creation optimization, windows are not
+ created on the back-end X servers until they are required. This
+ request forces the immediate creation of the window requested.
+
+ The value of status is always 0.
+
+
+
+
+ DMXGetScreenCount
+ ==>
+ screenCount: CARD32
+
+ Errors: None
+
+ This request returns the number of screens that the Xdmx server
+ controls. Since a DMX screen usually fills all of the available
+ area on a back-end server, there is usually a one-to-one
+ correspondence between DMX screens and backend servers. However, it
+ is also possible for a DMX screen to cover only part of the
+ available area on a back-end server, and for more than one DMX
+ screen to occupy different parts of the visible area on the same
+ back-end server.
+
+ A DMX screen may be managed as a regular X screen in the Xdmx server
+ or may be joined with other DMX screens using Xinerama.
+
+
+
+ DMXGetScreenAttributes
+ physicalScreen: CARD32
+ ==>
+ displayName: STRING8
+ logicalScreen: CARD32
+ screenWindowWidth: CARD16
+ screenWindowHeight: CARD16
+ screenWindowXoffset: INT16
+ screenWindowYoffset: INT16
+ rootWindowWidth: CARD16
+ rootWindowHeight: CARD16
+ rootWindowXoffset: INT16
+ rootWindowYoffset: INT16
+ rootWindowXorigin: INT16
+ rootWindowYorigin: INT16
+
+ Errors: Value
+
+ This request is new in version 2.0 of this protocol. The old
+ DMXGetScreenInformation request is deprecated and will now return
+ BadImplementation.
+
+ This request returns attributes about a single DMX screen.
+
+ The physicalScreen value is between 0 and screenCount-1, inclusive
+ (values outside this range will result in a Value error).
+
+ The displayname is the name used to open the display, either from
+ the Xdmx command-line or from the configuration file.
+
+ The logicalScreen value is the value of the screen that that Xdmx
+ server exports to clients. When Xinerama is in use, this value is
+ typically 0 for all values of physicalScreen. If Xinerama is in
+ use, the rootWindowXOrigin and rootWindowYOrigin values specify
+ where the physical screen is positioned in the global Xinerama
+ coordinate system. Otherwise, these values are set to 0.
+
+ The screenWindow values comprise a geometry specification (see
+ X(7x)) for the location of the DMX screen on the back-end screen.
+ The coordinant system of the back-end display is used.
+
+ The first four rootWindow values comprise a geometry specification
+ (see X(7x)) for the location of the root window on the screen
+ window. The coordinant system of the screen window is used. In
+ most cases, the root window will have the same geometry as the DMX
+ screen window, and will occupy the same area of the back-end
+ display. (This would not be the case, for example, if automatic
+ projector alignment is used.)
+
+
+
+ DMXChangeScreensAttributes
+ screenCount: CARD32
+ maskCount: CARD32
+ screens: LISTofCARD32
+ valueMasks: LISTofCARD32
+ valueList: LISTofVALUES
+ ==>
+ status: CARD32
+ errorScreen: CARD32
+
+ Errors: Length, Alloc
+
+ This request was first supported in version 2.0 of this protocol.
+ (A singular version of this request with the ability to change some
+ RootWindow attributes was supported in version 1.3 of this protocol,
+ has been deprecated, and will return BadImplementation.)
+
+ This request changes the geometries and positions of the DMX screen
+ and DMX root windows on the back-end X servers.
+
+ The valueMask and valueList specify which attributes are to be
+ changed. The possible values are:
+
+ Attribute Type
+
+ ScreenWindowWidth CARD16
+ ScreenWindowHeight CARD16
+ ScreenWindowXoffset INT16
+ ScreenWindowYoffset INT16
+ RootWindowWidth CARD16
+ RootWindowHeight CARD16
+ RootWindowXoffset INT16
+ RootWindowYoffset INT16
+ RootWindowXorigin INT16
+ RootWindowYorigin INT16
+
+ The attribute values have the same meaning as do the corresponding
+ values for DMXGetScreenAttributes.
+
+ Non-fatal errors will be returned in status (0 otherwise):
+ DmxBadXinerama: Xinerama is not active
+ DmxBadValue: The resulting position is not allowed
+ (e.g., one corner is outside the bounding box)
+ On error, errorScreen will contain the number of the screen that
+ caused the first error.
+
+
+
+ DMXAddScreen
+ displayName: STRING8
+ physicalScreen: CARD32
+ valueMask: CARD32
+ valueList: LISTofVALUES
+ ==>
+ status: CARD32
+ physicalScreen: CARD32
+
+ Errors: Length, Alloc, Value
+
+ This request was first supported in version 2.2 of this protocol.
+
+ This request re-attaches the back-end physicalScreen to the Xdmx
+ server. Only back-end screens that have been previously detached
+ with DMXRemoveScreen may be added. The name of the back-end display
+ is given in displayName, and this will replace the name of the
+ back-end screen that was detached. Both the displayName and
+ physicalScreen must be correct for this request to work.
+
+ The valueMask and valueList specify the attributes to be used. The
+ possible values are:
+
+ Attribute Type
+
+ ScreenWindowWidth CARD16
+ ScreenWindowHeight CARD16
+ ScreenWindowXoffset INT16
+ ScreenWindowYoffset INT16
+ RootWindowWidth CARD16
+ RootWindowHeight CARD16
+ RootWindowXoffset INT16
+ RootWindowYoffset INT16
+ RootWindowXorigin INT16
+ RootWindowYorigin INT16
+
+ The attribute values have the same meaning as do the corresponding
+ values for DMXGetScreenAttributes.
+
+ On success, status will be 0 and physicalScreen will contain the new
+ screen number. On failure, status will be non-zero. The status
+ will be 1 if any of the following occured:
+ * the -addremovescreens command-line option was not specified on
+ the Xdmx command line
+ * the value of physicalScreen is out of range
+ * physicalScreen has not been detached (with DMXRemoveScreen)
+ * displayName cannot be opened
+ * the visuals of displayname do not match the visuals that Xdmx
+ is using
+ * the screen data for displayName does not match the data for the
+ previously removed display
+ The status will be DmxBadValue if the attribute values are out of
+ range.
+
+
+
+ DMXRemoveScreen
+ physicalScreen: CARD32
+ ==>
+ status: CARD32
+
+ Errors: None
+
+ This request was first supported in version 2.2 of this protocol.
+
+ This request detaches the physicalScreen screen.
+
+ On success, status will be 0. On failure, the status will 1 if any
+ of the following occur:
+ * the -addremovescreens command-line option was not specified on
+ the Xdmx command line
+ * the value of physicalScreen is out of range
+ * the back-end screen has already been detached.
+
+
+
+ DMXGetWindowAttributes
+ window: CARD32
+ ==>
+ screenCount: CARD32
+ screens: LISTofCARD32
+ windows: LISTofCARD32
+ pos: LISTofRECTANGLE
+ vis: LISTofRECTANGLE
+
+ Errors: Window, Alloc
+
+ This request computes the return values incorrectly for version 1.0
+ of this protocol. Version 1.1 of this protocol conforms to this
+ description. In version 2.0, the name of this request was changed
+ from DMXGetWindowInformation. However, since the request itself did
+ not change, no changes to the underlying protocol were made.
+
+ Given a window ID on the Xdmx server, this request returns data
+ about how the window is represented on the back-end X servers. For
+ each back-end X server that displays a portion of the window, the
+ following information is returned:
+ 1) the number of the physical screen containing that portion
+ (which can be used with the DMXGetScreenAttributes request
+ to obtain more information about the screen),
+ 2) the window ID on the back-end X server of the window
+ containing that portion,
+ 3) the position and dimensions of the window on the back-end, in
+ screen coordinates, and
+ 4) the visible area of the window on the back-end, in
+ window-relative coordinates (all zeros for windows that are
+ not visible).
+ Note that DMX allows multiple back-end windows to overlap in their
+ view of the DMX logical window. Further, a logical window does not
+ have to be completely covered by back-end windows -- there may be
+ gaps.
+
+ As an example, consider a 500x500 window that spans the top two
+ 1024x768 back-end displays (A and B) of a 2048x1536 DMX display
+ composed of 4 1024x768 back-end displays arranged in a cube:
+ A B
+ C D
+
+ In this case, the DMXGetWindowAttributes call would return the
+ following information for the 500x500 window:
+
+ display A: 500x500 window at 1024-250,0 (relative to back end)
+ with 250x500 visible at 0,0 (relative to window origin)
+
+ display B: 500x500 window at -250,0 (relative to back end)
+ with 250x500 visible at 250,0 (relative to window origin)
+
+ display C: 500x500 window at 1024-250,-768 with 0x0 visible at 0,0
+
+ display D: 500x500 window at -250,-768 with 0x0 visible at 0,0
+
+ Note that if the specified window has not yet been mapped when
+ DMXGetWindowAttributes is called, then a subsequent XMapWindow call
+ might be buffered in xlib while requests directly to the back-end X
+ servers are processed. This race condition can be solved by calling
+ DMXSync before talking directly to the back-end X servers.
+
+
+
+ DMXGetDesktopAttributes
+ ==>
+ width: INT16
+ height: INT16
+ shiftX: INT16
+ shiftY: INT16
+
+ Errors: None
+
+ This request was first supported in version 2.0 of this protocol.
+
+ This request returns the size of the bounding box of the whole
+ screen in width and height. The shiftX and shiftY values will
+ always be 0. The global bounding box is computed whether or not
+ Xinerama is active, and may be larger than the Xinerama screen size
+ because of information in the configuration file.
+
+
+
+ DMXChangeDesktopAttributes
+ valueMask: BITMASK
+ valueList: LISTofVALUE
+ ==>
+ status: CARD32
+
+ Errors: Length, Value
+
+ This request was first supported in version 2.0 of this protocol.
+
+ This request resizes the bounding box of the whole screen when using
+ the Xinerama extension. Otherwise, it has no effect on the screen
+ layout. The valueMask and valueList specify which attributes are to
+ be changed. The possible values are:
+
+ Attriubute Type
+
+ Width INT16
+ Height INT16
+ ShiftX INT16
+ ShiftY INT16
+
+ Width and Height specify the new width and height for the bounding
+ box. ShiftX and ShiftY specify where the Xinerama origin will be
+ placed with respect to the origin of the new bounding box. This
+ allows the left and upper edges of the bounding box to be changed
+ without changing the visual position of the windows on the desktop.
+ If Width or Height is not specified, the current values will be
+ used. If ShiftX or ShiftY is not specified, 0 will be used.
+
+ All coordinants are in the global DMX coordinant system. If
+ Xinerama is not active, this request is not useful.
+
+ Non-fatal errors will be returned in status (0 otherwise):
+ DmxBadXinerama: Xinerama is not active
+ DmxBadValue: The size of the bounding box is too large
+
+
+
+ DMXGetInputCount
+ ==>
+ inputCount: CARD32
+
+ This request was first supported in version 1.1 of this protocol.
+
+ This request returns the number of input devices connected to the
+ Xdmx server. This number is the same as that returned by
+ XListInputDevices, but is available even when the XInput extension
+ is not supported.
+
+
+
+ DMXGetInputAttributes
+ deviceId: CARD32
+ ==>
+ inputType: CARD32
+ physicalScreen: CARD32
+ physicalId: CARD32
+ isCore: BOOL
+ sendsCore: BOOL
+ detached: BOOL
+ name: STRING8
+
+ Errors: Value
+
+ This request was first supported in version 1.1 of this protocol.
+ In version 2.0, the name of this request was changed from
+ DMXGetInputInformation. However, since the request itself did not
+ change, no changes to the underlying protocol were made. In version
+ 2.2, the name of detached was changed from reservation. There was
+ no change in underlying protocol.
+
+ This request returns information about the specified input device
+ that cannot be obtained from the XListInputDeivices call. The
+ deviceId is the same as that used by the XListInputDevices call, and
+ must be in the range 0 to inputCount-1, inclusive (values outside
+ this range will result in a Value error).
+
+ The value of inputType will always be valid, and will be one of the
+ following values:
+ 0 for local (and dummy) devices,
+ 1 for console devices, and
+ 2 for back-end devices.
+
+ For local devices, all other fields returned, except isCore and
+ sendsCore, are invalid.
+
+ For console devices, the physicalScreen and physicalID will be
+ invalid, and the name will return the name of the X server on which
+ the console window is displayed.
+
+ For back-end devices, the physicalScreen will identify the back-end
+ display and can be used as an argument to DMXGetScreenAttributes to
+ obtain more information; the physicalId will be the XInput device id
+ on the back-end X server; and the name will be invalid (since it
+ does not provide any additional information that cannot be obtained
+ with DMXGetScreenAttributes).
+
+ If isCore is True, then this device is active as a true core input
+ device and will send core events. If sendsCore is True, then this
+ device is an XInput extension device, but sends core events instead
+ of extension events. Note that this behavior is different from that
+ of XFree86 or Xorg, where XInput extension devices may send both
+ extension events and core events.
+
+ If detached is True, then this device has been detached and is no
+ longer producing input events. The device may be reattached using
+ DMXAddInput.
+
+
+
+ DMXAddInput
+ displayName: STRING8
+ valueMask: CARD32
+ valueList: LISTofVALUES
+ ==>
+ status: CARD32
+ physicalId: CARD32
+
+ Errors: Value, Access
+
+ This request was first supported in version 2.2 of this protocol.
+
+ The valueMask and valueList specify the attributes to be used. The
+ possible values are:
+
+ Attribute Type
+
+ InputType CARD32
+ InputPhysicalScreen CARD32
+ InputSendsCore BOOL
+
+ This request attaches an input device to the Xdmx server. The value
+ of inputType will be one:
+ 1 for console devices, and
+ 2 for back-end devices.
+ Other values of InputType will return a BadValue error. Local
+ devices (inputType=0 in DMXGetInputAttributes) cannot be attached or
+ removed. For console devices, displayName will store the name of
+ the display to be used.
+
+ For back-end devices, InputPhysicalScreen will specify the screen
+ number. BadValue will be returned if the screen number is out of
+ range. BadAccess will be returned if the input has already been
+ attached or if the backend screen is currently detached.
+
+ If InputSendsCore is True, the new device will be added as a true
+ core device.
+
+ If a device was removed with DMXRemoveInput an attempt will be made
+ to reconnect the previous devices (InputSendsCore is ignored in this
+ case).
+
+
+
+ DMXRemoveInput
+ physicalId: CARD32
+ ==>
+ status: CARD32
+
+ Errors: Value, Access
+
+ This request was first supported in version 2.2 of this protocol.
+
+ This request detaches the input device with physicalId, and all
+ associated inputs (e.g., if the physicalId is a backend mouse, and a
+ keyboard is also attached to the backend, then both devices will be
+ detached). If the physicalId is outside the valid range (0 to one
+ less than the value returned by DMXInputCount), BadValue is
+ returned. If the physicalId has already been detached, BadAccess is
+ returned. The status is always 0.
+
+
+
+5. Events
+
+ No new events are defined by this extension.
+
+
+
+6. Errors
+
+ No new events are defined by this extension.
+
+
+
+7. Encoding
+
+ Deprecated DMX opcodes:
+ DMXGetScreenInformation 2
+ DMXForceWindowCreation 6
+ DMXReconfigureScreen 7
+
+ Valid DMX opcodes:
+ DMXQueryVersion 0
+ DMXSync 8
+ DMXForceWindowCreation 9
+
+ DMXGetScreenCount 1
+ DMXGetScreenAttributes 10
+ DMXChangeScreensAttributes 11
+ DMXAddScreen 12
+ DMXRemoveScreen 13
+
+ DMXGetWindowAttributes 3
+
+ DMXGetDesktopAttributes 14
+ DMXChangeDesktopAttributes 15
+
+ DMXGetInputCount 4
+ DMXGetInputAttributes 5
+ DMXAddInput 16
+ DMXRemoveInput 17
+
+ DMXQueryVersion
+ 1 CARD8 opcode (X assigned)
+ 1 0 DMX opcode (X_DMXQueryVersion)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 majorVersion
+ 4 CARD32 minorVersion
+ 4 CARD32 patchVersion
+ 12 unused
+
+ DMXSync
+ 1 CARD8 opcode (X assigned)
+ 1 8 DMX opcode (X_DMXSync)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 20 unused
+
+ DMXForceWindowCreation
+ 1 CARD8 opcode (X assigned)
+ 1 9 DMX opcode (X_DMXForceWindowCreation)
+ 2 2 request length
+ 4 CARD32 window
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 20 unused
+
+
+ DMXGetScreenCount
+ 1 CARD8 opcode (X assigned)
+ 1 1 DMX opcode (X_DMXGetScreenCount)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 screenCount
+ 20 unused
+
+ DMXGetScreenAttributes
+ 1 CARD8 opcode (X assigned)
+ 1 10 DMX opcode (X_DMXGetScreenAttributes)
+ 2 2 request length
+ 4 CARD32 physicalScreen
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 1+(n+p)/4 reply length
+ 4 n displayNameLength
+ 4 CARD32 logicalScreen
+ 2 CARD16 screenWindowWidth
+ 2 CARD16 screenWindowHeight
+ 2 INT16 screenWindowXoffset
+ 2 INT16 screenWindowYoffset
+ 2 CARD16 rootWindowWidth
+ 2 CARD16 rootWindowHeight
+ 2 INT16 rootWindowXoffset
+ 2 INT16 rootWindowYoffset
+ 2 INT16 rootWindowXorigin
+ 2 INT16 rootWindowYorigin
+ n displayName
+ p pad(n)
+
+ DMXChangeScreensAttributes
+ 1 CARD8 opcode (X assigned)
+ 1 11 DMX opcode (X_DMXChangeScreenAttributes)
+ 2 3+s+m+n request length
+ 4 s screenCount
+ 4 m maskCount
+ 4s LISTofCARD32 screens
+ 4m LISTofCARD32 valueMasks
+ 4n LISTofVALUES valueList
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 4 CARD32 errorScreen
+ 16 unused
+
+
+ DMXAddScreen
+ 1 CARD8 opcode (X assigned)
+ 1 12 DMX opcode (X_DMXAddScreen)
+ 2 3+m+(n+p)/4 request length
+ 4 n displayNameLength
+ 4 CARD32 physicalScreen
+ 4 CARD32 valueMask
+ 4m LISTofVALUES valueList
+ n displayName
+ p pad(n)
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 4 CARD32 physicalScreen
+ 16 unused
+
+ DMXRemoveScreen
+ 1 CARD8 opcode (X assigned)
+ 1 13 DMX opcode (X_DMXRemoveScreen)
+ 2 2 request length
+ 4 CARD32 physicalScreen
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 20 unused
+
+ DMXGetWindowAttributes
+ 1 CARD8 opcode (X assigned)
+ 1 3 DMX opcode (X_DMXGetWindowAttributes)
+ 2 2 request length
+ 4 CARD32 window
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 n*6 reply length
+ 4 n screenCount
+ 20 unused
+ n*4 LISTofCARD32 screens
+ n*4 LISTofCARD32 windows
+ n*8 LISTofRECTANGLE pos
+ n*8 LISTofRECTANGLE vis
+
+ DMXGetDesktopAttributes
+ 1 CARD8 opcode (X assigned)
+ 1 14 DMX opcode (X_DMXGetDesktopAttributes)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 2 INT16 width
+ 2 INT16 height
+ 2 INT16 shiftX
+ 2 INT16 shiftY
+ 16 unused
+
+ DMXChangeDesktopAttributes
+ 1 CARD8 opcode (X assigned)
+ 1 15 DMX opcode (X_DMXChangeDesktopAttributes)
+ 2 2+n request length
+ 4 BITMASK valueMask
+ 4n LISTofVALUES valueList
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 20 unused
+
+ DMXGetInputCount
+ 1 CARD8 opcode (X assigned)
+ 1 4 DMX opcode (X_DMXGetInputCount)
+ 2 1 request length
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 inputCount
+ 20 unused
+
+ DMXGetInputAttributes
+ 1 CARD8 opcode (X assigned)
+ 1 5 DMX opcode (X_DMXGetInputAttributes)
+ 2 2 request length
+ 4 CARD32 deviceId
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 (n+p)/4 reply length
+ 4 CARD32 inputType
+ 4 CARD32 physicalScreen
+ 4 CARD32 physicalId
+ 4 n nameLength
+ 1 BOOL isCore
+ 1 BOOL sendsCore
+ 1 BOOL detached
+ 5 unused
+ n name
+ p pad(n)
+
+ DMXAddInput
+ 1 CARD8 opcode (X assigned)
+ 1 16 DMX opcode (X_DMXAddInput)
+ 2 3+m+(n+p)/4 request length
+ 4 n displayNameLength
+ 4 CARD32 valueMask
+ 4m LISTofVALUES valueList
+ n displayName
+ p pad(n)
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 4 CARD32 physicalId
+ 16 unused
+
+ DMXRemoveInput
+ 1 CARD8 opcode (X assigned)
+ 1 17 DMX opcode (X_DMXRemoveInput)
+ 2 3 request length
+ 4 CARD32 physicalId
+ ==>
+ 1 1 Reply
+ 1 unused
+ 2 CARD16 sequence number
+ 4 0 reply length
+ 4 CARD32 status
+ 20 unused
+
+
+8. Changes to existing requests/replies/events
+
+ No changes to existing requests, replies, or events are necessitated
+ by this extension.
+
+
+
+9. Acknowledgments
+
+
+
+10. References
+
+ [X11R6.4] Robert W. Sheifler. X Window System Protocol, X Consortium
+ Standard, X Version 11, Release 6.4. Available from
+ xc/doc/specs/XProtocol and xc/doc/hardcopy/XProtocol.
diff --git a/hw/dmx/doc/Makefile.am b/hw/dmx/doc/Makefile.am
new file mode 100644
index 0000000..f6d2b97
--- /dev/null
+++ b/hw/dmx/doc/Makefile.am
@@ -0,0 +1,403 @@
+# Copyright 2005 Red Hat, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software
+# and its documentation for any purpose is hereby granted without
+# fee, provided that the 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 Red Hat
+# not be used in advertising or publicity pertaining to distribution
+# of the software without specific, written prior permission. Red
+# Hat makes no representations about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied
+# warranty.
+#
+# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+# NO EVENT SHALL RED HAT 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.
+
+doc_sources = dmx.xml scaled.xml
+
+# Developer's documentation is not installed
+if ENABLE_DEVEL_DOCS
+include $(top_srcdir)/doc/xml/xmlrules-noinst.in
+endif ENABLE_DEVEL_DOCS
+
+DOXYGEN_HEAD=\
+ html/annotated.html
+
+DOXYGEN_REST= \
+ dmx.txt \
+ scaled.txt \
+ html/annotated.html \
+ html/bc_s.png \
+ html/ChkNotMaskEv_8c.html \
+ html/ChkNotMaskEv_8h.html \
+ html/ChkNotMaskEv_8h_source.html \
+ html/classes.html \
+ html/closed.png \
+ html/dmx-config_8h.html \
+ html/dmx-config_8h_source.html \
+ html/dmx_8c.html \
+ html/dmx_8h.html \
+ html/dmx_8h_source.html \
+ html/dmx__glxvisuals_8c.html \
+ html/dmx__glxvisuals_8h.html \
+ html/dmx__glxvisuals_8h_source.html \
+ html/dmxarg_8c.html \
+ html/dmxarg_8h.html \
+ html/dmxarg_8h_source.html \
+ html/dmxbackend_8c.html \
+ html/dmxbackend_8h.html \
+ html/dmxbackend_8h_source.html \
+ html/dmxcb_8c.html \
+ html/dmxcb_8h.html \
+ html/dmxcb_8h_source.html \
+ html/dmxclient_8h.html \
+ html/dmxclient_8h_source.html \
+ html/dmxcmap_8c.html \
+ html/dmxcmap_8h.html \
+ html/dmxcmap_8h_source.html \
+ html/dmxcommon_8c.html \
+ html/dmxcommon_8h.html \
+ html/dmxcommon_8h_source.html \
+ html/dmxcompat_8c.html \
+ html/dmxcompat_8h.html \
+ html/dmxcompat_8h_source.html \
+ html/dmxconfig_8c.html \
+ html/dmxconfig_8h.html \
+ html/dmxconfig_8h_source.html \
+ html/dmxconsole_8c.html \
+ html/dmxconsole_8h.html \
+ html/dmxconsole_8h_source.html \
+ html/dmxcursor_8c.html \
+ html/dmxcursor_8h.html \
+ html/dmxcursor_8h_source.html \
+ html/dmxdetach_8c.html \
+ html/dmxdpms_8c.html \
+ html/dmxdpms_8h.html \
+ html/dmxdpms_8h_source.html \
+ html/dmxdummy_8c.html \
+ html/dmxdummy_8h.html \
+ html/dmxdummy_8h_source.html \
+ html/dmxevents_8c.html \
+ html/dmxevents_8h.html \
+ html/dmxevents_8h_source.html \
+ html/dmxextension_8c.html \
+ html/dmxextension_8h.html \
+ html/dmxextension_8h_source.html \
+ html/dmxfont_8c.html \
+ html/dmxfont_8h.html \
+ html/dmxfont_8h_source.html \
+ html/dmxgc_8c.html \
+ html/dmxgc_8h.html \
+ html/dmxgc_8h_source.html \
+ html/dmxgcops_8c.html \
+ html/dmxgcops_8h.html \
+ html/dmxgcops_8h_source.html \
+ html/dmxinit_8c.html \
+ html/dmxinit_8h.html \
+ html/dmxinit_8h_source.html \
+ html/dmxinput_8c.html \
+ html/dmxinput_8h.html \
+ html/dmxinput_8h_source.html \
+ html/dmxinputinit_8c.html \
+ html/dmxinputinit_8h.html \
+ html/dmxinputinit_8h_source.html \
+ html/dmxlog_8c.html \
+ html/dmxlog_8h.html \
+ html/dmxlog_8h_source.html \
+ html/dmxmap_8c.html \
+ html/dmxmap_8h.html \
+ html/dmxmap_8h_source.html \
+ html/dmxmotion_8c.html \
+ html/dmxmotion_8h.html \
+ html/dmxmotion_8h_source.html \
+ html/dmxparse_8c.html \
+ html/dmxparse_8h.html \
+ html/dmxparse_8h_source.html \
+ html/dmxpict_8c.html \
+ html/dmxpict_8h.html \
+ html/dmxpict_8h_source.html \
+ html/dmxpixmap_8c.html \
+ html/dmxpixmap_8h.html \
+ html/dmxpixmap_8h_source.html \
+ html/dmxprint_8c.html \
+ html/dmxprint_8h.html \
+ html/dmxprint_8h_source.html \
+ html/dmxprop_8c.html \
+ html/dmxprop_8h.html \
+ html/dmxprop_8h_source.html \
+ html/dmxscrinit_8c.html \
+ html/dmxscrinit_8h.html \
+ html/dmxscrinit_8h_source.html \
+ html/dmxshadow_8c.html \
+ html/dmxshadow_8h.html \
+ html/dmxshadow_8h_source.html \
+ html/dmxsigio_8c.html \
+ html/dmxsigio_8h.html \
+ html/dmxsigio_8h_source.html \
+ html/dmxstat_8c.html \
+ html/dmxstat_8h.html \
+ html/dmxstat_8h_source.html \
+ html/dmxsync_8c.html \
+ html/dmxsync_8h.html \
+ html/dmxsync_8h_source.html \
+ html/dmxtodmx_8c.html \
+ html/dmxvisual_8c.html \
+ html/dmxvisual_8h.html \
+ html/dmxvisual_8h_source.html \
+ html/dmxwindow_8c.html \
+ html/dmxwindow_8h.html \
+ html/dmxwindow_8h_source.html \
+ html/dmxxinput_8c.html \
+ html/doxygen.css \
+ html/doxygen.png \
+ html/files.html \
+ html/ftv2blank.png \
+ html/ftv2doc.png \
+ html/ftv2folderclosed.png \
+ html/ftv2folderopen.png \
+ html/ftv2lastnode.png \
+ html/ftv2link.png \
+ html/ftv2mlastnode.png \
+ html/ftv2mnode.png \
+ html/ftv2node.png \
+ html/ftv2plastnode.png \
+ html/ftv2pnode.png \
+ html/ftv2splitbar.png \
+ html/ftv2vertline.png \
+ html/functions.html \
+ html/functions_0x62.html \
+ html/functions_0x63.html \
+ html/functions_0x64.html \
+ html/functions_0x65.html \
+ html/functions_0x66.html \
+ html/functions_0x67.html \
+ html/functions_0x68.html \
+ html/functions_0x69.html \
+ html/functions_0x6b.html \
+ html/functions_0x6c.html \
+ html/functions_0x6d.html \
+ html/functions_0x6e.html \
+ html/functions_0x6f.html \
+ html/functions_0x70.html \
+ html/functions_0x72.html \
+ html/functions_0x73.html \
+ html/functions_0x74.html \
+ html/functions_0x75.html \
+ html/functions_0x76.html \
+ html/functions_0x77.html \
+ html/functions_0x78.html \
+ html/functions_0x79.html \
+ html/functions_eval.html \
+ html/functions_vars.html \
+ html/functions_vars_0x62.html \
+ html/functions_vars_0x63.html \
+ html/functions_vars_0x64.html \
+ html/functions_vars_0x65.html \
+ html/functions_vars_0x66.html \
+ html/functions_vars_0x67.html \
+ html/functions_vars_0x68.html \
+ html/functions_vars_0x69.html \
+ html/functions_vars_0x6b.html \
+ html/functions_vars_0x6c.html \
+ html/functions_vars_0x6d.html \
+ html/functions_vars_0x6e.html \
+ html/functions_vars_0x6f.html \
+ html/functions_vars_0x70.html \
+ html/functions_vars_0x72.html \
+ html/functions_vars_0x73.html \
+ html/functions_vars_0x74.html \
+ html/functions_vars_0x75.html \
+ html/functions_vars_0x76.html \
+ html/functions_vars_0x77.html \
+ html/functions_vars_0x78.html \
+ html/functions_vars_0x79.html \
+ html/globals.html \
+ html/globals_0x61.html \
+ html/globals_0x62.html \
+ html/globals_0x63.html \
+ html/globals_0x64.html \
+ html/globals_0x65.html \
+ html/globals_0x66.html \
+ html/globals_0x67.html \
+ html/globals_0x69.html \
+ html/globals_0x6b.html \
+ html/globals_0x6c.html \
+ html/globals_0x6d.html \
+ html/globals_0x6e.html \
+ html/globals_0x6f.html \
+ html/globals_0x70.html \
+ html/globals_0x71.html \
+ html/globals_0x72.html \
+ html/globals_0x73.html \
+ html/globals_0x74.html \
+ html/globals_0x75.html \
+ html/globals_0x76.html \
+ html/globals_0x78.html \
+ html/globals_0x79.html \
+ html/globals_defs.html \
+ html/globals_defs_0x62.html \
+ html/globals_defs_0x63.html \
+ html/globals_defs_0x64.html \
+ html/globals_defs_0x65.html \
+ html/globals_defs_0x66.html \
+ html/globals_defs_0x67.html \
+ html/globals_defs_0x6c.html \
+ html/globals_defs_0x6d.html \
+ html/globals_defs_0x6e.html \
+ html/globals_defs_0x6f.html \
+ html/globals_defs_0x70.html \
+ html/globals_defs_0x72.html \
+ html/globals_defs_0x73.html \
+ html/globals_defs_0x74.html \
+ html/globals_defs_0x75.html \
+ html/globals_defs_0x76.html \
+ html/globals_enum.html \
+ html/globals_eval.html \
+ html/globals_func.html \
+ html/globals_func_0x61.html \
+ html/globals_func_0x63.html \
+ html/globals_func_0x64.html \
+ html/globals_func_0x65.html \
+ html/globals_func_0x67.html \
+ html/globals_func_0x69.html \
+ html/globals_func_0x6b.html \
+ html/globals_func_0x6c.html \
+ html/globals_func_0x6d.html \
+ html/globals_func_0x6e.html \
+ html/globals_func_0x6f.html \
+ html/globals_func_0x70.html \
+ html/globals_func_0x73.html \
+ html/globals_func_0x75.html \
+ html/globals_func_0x76.html \
+ html/globals_func_0x78.html \
+ html/globals_func_0x79.html \
+ html/globals_type.html \
+ html/globals_vars.html \
+ html/index.html \
+ html/jquery.js \
+ html/lnx-keyboard_8c.html \
+ html/lnx-keyboard_8h.html \
+ html/lnx-keyboard_8h_source.html \
+ html/lnx-ms_8c.html \
+ html/lnx-ms_8h.html \
+ html/lnx-ms_8h_source.html \
+ html/lnx-ps2_8c.html \
+ html/lnx-ps2_8h.html \
+ html/lnx-ps2_8h_source.html \
+ html/nav_f.png \
+ html/nav_h.png \
+ html/navtree.css \
+ html/navtree.js \
+ html/open.png \
+ html/resize.js \
+ html/struct__dmxArg.html \
+ html/struct__dmxColormapPriv.html \
+ html/struct__DMXConfigComment.html \
+ html/struct__DMXConfigDisplay.html \
+ html/struct__DMXConfigEntry.html \
+ html/struct__DMXConfigFullDim.html \
+ html/struct__DMXConfigNumber.html \
+ html/struct__DMXConfigOption.html \
+ html/struct__DMXConfigPair.html \
+ html/struct__DMXConfigParam.html \
+ html/struct__DMXConfigPartDim.html \
+ html/struct__DMXConfigString.html \
+ html/struct__DMXConfigSub.html \
+ html/struct__DMXConfigToken.html \
+ html/struct__DMXConfigVirtual.html \
+ html/struct__DMXConfigWall.html \
+ html/struct__dmxCursorPriv.html \
+ html/struct__DMXEventMap.html \
+ html/struct__dmxFontPriv.html \
+ html/struct__dmxGCPriv.html \
+ html/struct__dmxGlyphPriv.html \
+ html/struct__DMXInputInfo.html \
+ html/struct__DMXLocalInitInfo.html \
+ html/struct__DMXLocalInputInfo.html \
+ html/struct__dmxPictPriv.html \
+ html/struct__dmxPixPriv.html \
+ html/struct__DMXScreenInfo.html \
+ html/struct__DMXStatAvg.html \
+ html/struct__DMXStatInfo.html \
+ html/struct__dmxWinPriv.html \
+ html/struct__myPrivate.html \
+ html/structDMXConfigCmdStruct.html \
+ html/structDMXConfigListStruct.html \
+ html/structDMXDesktopAttributesRec.html \
+ html/structdmxGlxVisualPrivate.html \
+ html/structDMXInputAttributesRec.html \
+ html/structDMXScreenAttributesRec.html \
+ html/structDMXWindowAttributesRec.html \
+ html/structstack.html \
+ html/tab_a.png \
+ html/tab_b.png \
+ html/tab_h.png \
+ html/tab_s.png \
+ html/tabs.css \
+ html/usb-common_8c.html \
+ html/usb-common_8h.html \
+ html/usb-common_8h_source.html \
+ html/usb-keyboard_8c.html \
+ html/usb-keyboard_8h.html \
+ html/usb-keyboard_8h_source.html \
+ html/usb-mouse_8c.html \
+ html/usb-mouse_8h.html \
+ html/usb-mouse_8h_source.html \
+ html/usb-other_8c.html \
+ html/usb-other_8h.html \
+ html/usb-other_8h_source.html \
+ html/usb-private_8h.html \
+ html/usb-private_8h_source.html \
+ html/vdltodmx_8c.html \
+ html/xdmxconfig_8c.html
+
+DOXYGEN_FILES=$(DOXYGEN_HEAD) $(DOXYGEN_REST)
+
+EXTRA_DIST = \
+ $(XML_FILES) \
+ DMXSpec.txt \
+ DMXSpec-v1.txt \
+ doxygen.conf \
+ doxygen.css \
+ doxygen.foot \
+ doxygen.head \
+ $(DOXYGEN_FILES)
+
+if ENABLE_DEVEL_DOCS
+if HAVE_DOXYGEN
+
+DOXYGEN_SRC=doxygen.head doxygen.foot doxygen.css doxygen.conf
+
+all-local: $(DOXYGEN_FILES)
+
+dist-local: $(DOXYGEN_FILES)
+
+$(DOXYGEN_HEAD): $(DOXYGEN_SRC)
+ $(DOXYGEN) doxygen.conf
+
+$(DOXYGEN_REST): $(DOXYGEN_HEAD)
+
+maintainer-clean-local:
+ rm -rf html/ scaled.txt dmx.txt
+
+distclean-local:
+ rm -rf html/ scaled.txt dmx.txt
+
+endif HAVE_DOXYGEN
+endif ENABLE_DEVEL_DOCS
+
+$(builddir)/doxygen.head:
+ $(LN_S) $(srcdir)/doxygen.head $@
+
+$(builddir)/doxygen.foot:
+ $(LN_S) $(srcdir)/doxygen.foot $@
+
+$(builddir)doxygen.css:
+ $(LN_S) $(srcdir)/doxygen.css $@
+
diff --git a/hw/dmx/doc/Makefile.in b/hw/dmx/doc/Makefile.in
new file mode 100644
index 0000000..a257483
--- /dev/null
+++ b/hw/dmx/doc/Makefile.in
@@ -0,0 +1,1034 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright 2005 Red Hat, Inc.
+#
+# Permission to use, copy, modify, distribute, and sell this software
+# and its documentation for any purpose is hereby granted without
+# fee, provided that the 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 Red Hat
+# not be used in advertising or publicity pertaining to distribution
+# of the software without specific, written prior permission. Red
+# Hat makes no representations about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied
+# warranty.
+#
+# RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+# NO EVENT SHALL RED HAT 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.
+
+# The doc_sources variable contains one or more DocBook/XML source file.
+# The generated documents will NOT be installed in $(docdir),
+# The DocBook/XML files will always be included in the tarball
+
+#
+# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+#
+
+# This file provides pattern rules to generate html/pdf/txt from DocBook/XML
+# A stylesheet is used if xorg-sgml-doctools is installed
+# This file is included by xmlrules-inst.in for installable user's documentation
+# It is included by xmlrules-noinst for non installable developer's documentation
+# If the server version or release date changes, autogen && make
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(am__dist_noinst_DATA_DIST) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/doxygen.conf.in \
+ $(top_srcdir)/doc/xml/xmlrules-noinst.in \
+ $(top_srcdir)/doc/xml/xmlrules.in
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_FOP_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(doc_sources:.xml=.pdf)
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(doc_sources:.xml=.txt)
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = -m $(XSL_STYLESHEET) \
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam html.stylesheet=$(STYLESHEET_SRCDIR)/xorg.css
+
+subdir = hw/dmx/doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES = doxygen.conf
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__dist_noinst_DATA_DIST = dmx.xml scaled.xml
+DATA = $(dist_noinst_DATA) $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+doc_sources = dmx.xml scaled.xml
+@ENABLE_DEVEL_DOCS_TRUE@dist_noinst_DATA = $(doc_sources)
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@noinst_DATA = $(doc_sources:.xml=.html) \
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_1) \
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_2)
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@CLEANFILES = $(noinst_DATA)
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@XML_ENT_DIR = $(abs_top_builddir)/doc/xml
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@SUFFIXES = .xml .txt .html .pdf
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FLAGS = --searchpath \
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(XML_ENT_DIR) \
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(am__append_3)
+
+# Developer's documentation is not installed
+DOXYGEN_HEAD = \
+ html/annotated.html
+
+DOXYGEN_REST = \
+ dmx.txt \
+ scaled.txt \
+ html/annotated.html \
+ html/bc_s.png \
+ html/ChkNotMaskEv_8c.html \
+ html/ChkNotMaskEv_8h.html \
+ html/ChkNotMaskEv_8h_source.html \
+ html/classes.html \
+ html/closed.png \
+ html/dmx-config_8h.html \
+ html/dmx-config_8h_source.html \
+ html/dmx_8c.html \
+ html/dmx_8h.html \
+ html/dmx_8h_source.html \
+ html/dmx__glxvisuals_8c.html \
+ html/dmx__glxvisuals_8h.html \
+ html/dmx__glxvisuals_8h_source.html \
+ html/dmxarg_8c.html \
+ html/dmxarg_8h.html \
+ html/dmxarg_8h_source.html \
+ html/dmxbackend_8c.html \
+ html/dmxbackend_8h.html \
+ html/dmxbackend_8h_source.html \
+ html/dmxcb_8c.html \
+ html/dmxcb_8h.html \
+ html/dmxcb_8h_source.html \
+ html/dmxclient_8h.html \
+ html/dmxclient_8h_source.html \
+ html/dmxcmap_8c.html \
+ html/dmxcmap_8h.html \
+ html/dmxcmap_8h_source.html \
+ html/dmxcommon_8c.html \
+ html/dmxcommon_8h.html \
+ html/dmxcommon_8h_source.html \
+ html/dmxcompat_8c.html \
+ html/dmxcompat_8h.html \
+ html/dmxcompat_8h_source.html \
+ html/dmxconfig_8c.html \
+ html/dmxconfig_8h.html \
+ html/dmxconfig_8h_source.html \
+ html/dmxconsole_8c.html \
+ html/dmxconsole_8h.html \
+ html/dmxconsole_8h_source.html \
+ html/dmxcursor_8c.html \
+ html/dmxcursor_8h.html \
+ html/dmxcursor_8h_source.html \
+ html/dmxdetach_8c.html \
+ html/dmxdpms_8c.html \
+ html/dmxdpms_8h.html \
+ html/dmxdpms_8h_source.html \
+ html/dmxdummy_8c.html \
+ html/dmxdummy_8h.html \
+ html/dmxdummy_8h_source.html \
+ html/dmxevents_8c.html \
+ html/dmxevents_8h.html \
+ html/dmxevents_8h_source.html \
+ html/dmxextension_8c.html \
+ html/dmxextension_8h.html \
+ html/dmxextension_8h_source.html \
+ html/dmxfont_8c.html \
+ html/dmxfont_8h.html \
+ html/dmxfont_8h_source.html \
+ html/dmxgc_8c.html \
+ html/dmxgc_8h.html \
+ html/dmxgc_8h_source.html \
+ html/dmxgcops_8c.html \
+ html/dmxgcops_8h.html \
+ html/dmxgcops_8h_source.html \
+ html/dmxinit_8c.html \
+ html/dmxinit_8h.html \
+ html/dmxinit_8h_source.html \
+ html/dmxinput_8c.html \
+ html/dmxinput_8h.html \
+ html/dmxinput_8h_source.html \
+ html/dmxinputinit_8c.html \
+ html/dmxinputinit_8h.html \
+ html/dmxinputinit_8h_source.html \
+ html/dmxlog_8c.html \
+ html/dmxlog_8h.html \
+ html/dmxlog_8h_source.html \
+ html/dmxmap_8c.html \
+ html/dmxmap_8h.html \
+ html/dmxmap_8h_source.html \
+ html/dmxmotion_8c.html \
+ html/dmxmotion_8h.html \
+ html/dmxmotion_8h_source.html \
+ html/dmxparse_8c.html \
+ html/dmxparse_8h.html \
+ html/dmxparse_8h_source.html \
+ html/dmxpict_8c.html \
+ html/dmxpict_8h.html \
+ html/dmxpict_8h_source.html \
+ html/dmxpixmap_8c.html \
+ html/dmxpixmap_8h.html \
+ html/dmxpixmap_8h_source.html \
+ html/dmxprint_8c.html \
+ html/dmxprint_8h.html \
+ html/dmxprint_8h_source.html \
+ html/dmxprop_8c.html \
+ html/dmxprop_8h.html \
+ html/dmxprop_8h_source.html \
+ html/dmxscrinit_8c.html \
+ html/dmxscrinit_8h.html \
+ html/dmxscrinit_8h_source.html \
+ html/dmxshadow_8c.html \
+ html/dmxshadow_8h.html \
+ html/dmxshadow_8h_source.html \
+ html/dmxsigio_8c.html \
+ html/dmxsigio_8h.html \
+ html/dmxsigio_8h_source.html \
+ html/dmxstat_8c.html \
+ html/dmxstat_8h.html \
+ html/dmxstat_8h_source.html \
+ html/dmxsync_8c.html \
+ html/dmxsync_8h.html \
+ html/dmxsync_8h_source.html \
+ html/dmxtodmx_8c.html \
+ html/dmxvisual_8c.html \
+ html/dmxvisual_8h.html \
+ html/dmxvisual_8h_source.html \
+ html/dmxwindow_8c.html \
+ html/dmxwindow_8h.html \
+ html/dmxwindow_8h_source.html \
+ html/dmxxinput_8c.html \
+ html/doxygen.css \
+ html/doxygen.png \
+ html/files.html \
+ html/ftv2blank.png \
+ html/ftv2doc.png \
+ html/ftv2folderclosed.png \
+ html/ftv2folderopen.png \
+ html/ftv2lastnode.png \
+ html/ftv2link.png \
+ html/ftv2mlastnode.png \
+ html/ftv2mnode.png \
+ html/ftv2node.png \
+ html/ftv2plastnode.png \
+ html/ftv2pnode.png \
+ html/ftv2splitbar.png \
+ html/ftv2vertline.png \
+ html/functions.html \
+ html/functions_0x62.html \
+ html/functions_0x63.html \
+ html/functions_0x64.html \
+ html/functions_0x65.html \
+ html/functions_0x66.html \
+ html/functions_0x67.html \
+ html/functions_0x68.html \
+ html/functions_0x69.html \
+ html/functions_0x6b.html \
+ html/functions_0x6c.html \
+ html/functions_0x6d.html \
+ html/functions_0x6e.html \
+ html/functions_0x6f.html \
+ html/functions_0x70.html \
+ html/functions_0x72.html \
+ html/functions_0x73.html \
+ html/functions_0x74.html \
+ html/functions_0x75.html \
+ html/functions_0x76.html \
+ html/functions_0x77.html \
+ html/functions_0x78.html \
+ html/functions_0x79.html \
+ html/functions_eval.html \
+ html/functions_vars.html \
+ html/functions_vars_0x62.html \
+ html/functions_vars_0x63.html \
+ html/functions_vars_0x64.html \
+ html/functions_vars_0x65.html \
+ html/functions_vars_0x66.html \
+ html/functions_vars_0x67.html \
+ html/functions_vars_0x68.html \
+ html/functions_vars_0x69.html \
+ html/functions_vars_0x6b.html \
+ html/functions_vars_0x6c.html \
+ html/functions_vars_0x6d.html \
+ html/functions_vars_0x6e.html \
+ html/functions_vars_0x6f.html \
+ html/functions_vars_0x70.html \
+ html/functions_vars_0x72.html \
+ html/functions_vars_0x73.html \
+ html/functions_vars_0x74.html \
+ html/functions_vars_0x75.html \
+ html/functions_vars_0x76.html \
+ html/functions_vars_0x77.html \
+ html/functions_vars_0x78.html \
+ html/functions_vars_0x79.html \
+ html/globals.html \
+ html/globals_0x61.html \
+ html/globals_0x62.html \
+ html/globals_0x63.html \
+ html/globals_0x64.html \
+ html/globals_0x65.html \
+ html/globals_0x66.html \
+ html/globals_0x67.html \
+ html/globals_0x69.html \
+ html/globals_0x6b.html \
+ html/globals_0x6c.html \
+ html/globals_0x6d.html \
+ html/globals_0x6e.html \
+ html/globals_0x6f.html \
+ html/globals_0x70.html \
+ html/globals_0x71.html \
+ html/globals_0x72.html \
+ html/globals_0x73.html \
+ html/globals_0x74.html \
+ html/globals_0x75.html \
+ html/globals_0x76.html \
+ html/globals_0x78.html \
+ html/globals_0x79.html \
+ html/globals_defs.html \
+ html/globals_defs_0x62.html \
+ html/globals_defs_0x63.html \
+ html/globals_defs_0x64.html \
+ html/globals_defs_0x65.html \
+ html/globals_defs_0x66.html \
+ html/globals_defs_0x67.html \
+ html/globals_defs_0x6c.html \
+ html/globals_defs_0x6d.html \
+ html/globals_defs_0x6e.html \
+ html/globals_defs_0x6f.html \
+ html/globals_defs_0x70.html \
+ html/globals_defs_0x72.html \
+ html/globals_defs_0x73.html \
+ html/globals_defs_0x74.html \
+ html/globals_defs_0x75.html \
+ html/globals_defs_0x76.html \
+ html/globals_enum.html \
+ html/globals_eval.html \
+ html/globals_func.html \
+ html/globals_func_0x61.html \
+ html/globals_func_0x63.html \
+ html/globals_func_0x64.html \
+ html/globals_func_0x65.html \
+ html/globals_func_0x67.html \
+ html/globals_func_0x69.html \
+ html/globals_func_0x6b.html \
+ html/globals_func_0x6c.html \
+ html/globals_func_0x6d.html \
+ html/globals_func_0x6e.html \
+ html/globals_func_0x6f.html \
+ html/globals_func_0x70.html \
+ html/globals_func_0x73.html \
+ html/globals_func_0x75.html \
+ html/globals_func_0x76.html \
+ html/globals_func_0x78.html \
+ html/globals_func_0x79.html \
+ html/globals_type.html \
+ html/globals_vars.html \
+ html/index.html \
+ html/jquery.js \
+ html/lnx-keyboard_8c.html \
+ html/lnx-keyboard_8h.html \
+ html/lnx-keyboard_8h_source.html \
+ html/lnx-ms_8c.html \
+ html/lnx-ms_8h.html \
+ html/lnx-ms_8h_source.html \
+ html/lnx-ps2_8c.html \
+ html/lnx-ps2_8h.html \
+ html/lnx-ps2_8h_source.html \
+ html/nav_f.png \
+ html/nav_h.png \
+ html/navtree.css \
+ html/navtree.js \
+ html/open.png \
+ html/resize.js \
+ html/struct__dmxArg.html \
+ html/struct__dmxColormapPriv.html \
+ html/struct__DMXConfigComment.html \
+ html/struct__DMXConfigDisplay.html \
+ html/struct__DMXConfigEntry.html \
+ html/struct__DMXConfigFullDim.html \
+ html/struct__DMXConfigNumber.html \
+ html/struct__DMXConfigOption.html \
+ html/struct__DMXConfigPair.html \
+ html/struct__DMXConfigParam.html \
+ html/struct__DMXConfigPartDim.html \
+ html/struct__DMXConfigString.html \
+ html/struct__DMXConfigSub.html \
+ html/struct__DMXConfigToken.html \
+ html/struct__DMXConfigVirtual.html \
+ html/struct__DMXConfigWall.html \
+ html/struct__dmxCursorPriv.html \
+ html/struct__DMXEventMap.html \
+ html/struct__dmxFontPriv.html \
+ html/struct__dmxGCPriv.html \
+ html/struct__dmxGlyphPriv.html \
+ html/struct__DMXInputInfo.html \
+ html/struct__DMXLocalInitInfo.html \
+ html/struct__DMXLocalInputInfo.html \
+ html/struct__dmxPictPriv.html \
+ html/struct__dmxPixPriv.html \
+ html/struct__DMXScreenInfo.html \
+ html/struct__DMXStatAvg.html \
+ html/struct__DMXStatInfo.html \
+ html/struct__dmxWinPriv.html \
+ html/struct__myPrivate.html \
+ html/structDMXConfigCmdStruct.html \
+ html/structDMXConfigListStruct.html \
+ html/structDMXDesktopAttributesRec.html \
+ html/structdmxGlxVisualPrivate.html \
+ html/structDMXInputAttributesRec.html \
+ html/structDMXScreenAttributesRec.html \
+ html/structDMXWindowAttributesRec.html \
+ html/structstack.html \
+ html/tab_a.png \
+ html/tab_b.png \
+ html/tab_h.png \
+ html/tab_s.png \
+ html/tabs.css \
+ html/usb-common_8c.html \
+ html/usb-common_8h.html \
+ html/usb-common_8h_source.html \
+ html/usb-keyboard_8c.html \
+ html/usb-keyboard_8h.html \
+ html/usb-keyboard_8h_source.html \
+ html/usb-mouse_8c.html \
+ html/usb-mouse_8h.html \
+ html/usb-mouse_8h_source.html \
+ html/usb-other_8c.html \
+ html/usb-other_8h.html \
+ html/usb-other_8h_source.html \
+ html/usb-private_8h.html \
+ html/usb-private_8h_source.html \
+ html/vdltodmx_8c.html \
+ html/xdmxconfig_8c.html
+
+DOXYGEN_FILES = $(DOXYGEN_HEAD) $(DOXYGEN_REST)
+EXTRA_DIST = \
+ $(XML_FILES) \
+ DMXSpec.txt \
+ DMXSpec-v1.txt \
+ doxygen.conf \
+ doxygen.css \
+ doxygen.foot \
+ doxygen.head \
+ $(DOXYGEN_FILES)
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@DOXYGEN_SRC = doxygen.head doxygen.foot doxygen.css doxygen.conf
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .xml .txt .html .pdf
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/doc/xml/xmlrules-noinst.in $(top_srcdir)/doc/xml/xmlrules.in $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+doxygen.conf: $(top_builddir)/config.status $(srcdir)/doxygen.conf.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+@ENABLE_DEVEL_DOCS_FALSE@all-local:
+@HAVE_DOXYGEN_FALSE@all-local:
+all-am: Makefile $(DATA) all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+@ENABLE_DEVEL_DOCS_FALSE@distclean-local:
+@HAVE_DOXYGEN_FALSE@distclean-local:
+@ENABLE_DEVEL_DOCS_FALSE@maintainer-clean-local:
+@HAVE_DOXYGEN_FALSE@maintainer-clean-local:
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-libtool distclean distclean-generic distclean-libtool \
+ distclean-local distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(XML_ENT_DIR)/xserver.ent
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(XML_ENT_DIR)/xserver.ent
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $<
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(XML_ENT_DIR)/xserver.ent
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $<
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@all-local: $(DOXYGEN_FILES)
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@dist-local: $(DOXYGEN_FILES)
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@$(DOXYGEN_HEAD): $(DOXYGEN_SRC)
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@ $(DOXYGEN) doxygen.conf
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@$(DOXYGEN_REST): $(DOXYGEN_HEAD)
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@maintainer-clean-local:
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@ rm -rf html/ scaled.txt dmx.txt
+
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@distclean-local:
+@ENABLE_DEVEL_DOCS_TRUE@@HAVE_DOXYGEN_TRUE@ rm -rf html/ scaled.txt dmx.txt
+
+$(builddir)/doxygen.head:
+ $(LN_S) $(srcdir)/doxygen.head $@
+
+$(builddir)/doxygen.foot:
+ $(LN_S) $(srcdir)/doxygen.foot $@
+
+$(builddir)doxygen.css:
+ $(LN_S) $(srcdir)/doxygen.css $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/doc/dmx.txt b/hw/dmx/doc/dmx.txt
new file mode 100644
index 0000000..a207511
--- /dev/null
+++ b/hw/dmx/doc/dmx.txt
@@ -0,0 +1,2593 @@
+Distributed Multihead X design
+
+ Kevin E. Martin
+
+ David H. Dawes
+
+ Rickard E. Faith
+
+ 29 June 2004 (created 25 July 2001)
+
+ This document covers the motivation, background, design, and
+ implementation of the distributed multihead X (DMX) system. It is a living
+ document and describes the current design and implementation details of
+ the DMX system. As the project progresses, this document will be
+ continually updated to reflect the changes in the code and/or design.
+ Copyright 2001 by VA Linux Systems, Inc., Fremont, California. Copyright
+ 2001-2004 by Red Hat, Inc., Raleigh, North Carolina
+
+ ----------------------------------------------------------------------
+
+ Table of Contents
+
+ Introduction
+
+ The Distributed Multihead X Server
+
+ Layout of Paper
+
+ Development plan
+
+ Bootstrap code
+
+ Input device handling
+
+ Output device handling
+
+ Optimizing DMX
+
+ DMX X extension support
+
+ Common X extension support
+
+ OpenGL support
+
+ Current issues
+
+ Fonts
+
+ Zero width rendering primitives
+
+ Output scaling
+
+ Per-screen colormaps
+
+ A. Appendix
+
+ Background
+
+ Core input device handling
+
+ Output handling
+
+ Xinerama
+
+ Development Results
+
+ Phase I
+
+ Phase II
+
+ Phase III
+
+ Phase IV
+
+Introduction
+
+ The Distributed Multihead X Server
+
+ Current Open Source multihead solutions are limited to a single physical
+ machine. A single X server controls multiple display devices, which can be
+ arranged as independent heads or unified into a single desktop (with
+ Xinerama). These solutions are limited to the number of physical devices
+ that can co-exist in a single machine (e.g., due to the number of AGP/PCI
+ slots available for graphics cards). Thus, large tiled displays are not
+ currently possible. The work described in this paper will eliminate the
+ requirement that the display devices reside in the same physical machine.
+ This will be accomplished by developing a front-end proxy X server that
+ will control multiple back-end X servers that make up the large display.
+
+ The overall structure of the distributed multihead X (DMX) project is as
+ follows: A single front-end X server will act as a proxy to a set of
+ back-end X servers, which handle all of the visible rendering. X clients
+ will connect to the front-end server just as they normally would to a
+ regular X server. The front-end server will present an abstracted view to
+ the client of a single large display. This will ensure that all standard X
+ clients will continue to operate without modification (limited, as always,
+ by the visuals and extensions provided by the X server). Clients that are
+ DMX-aware will be able to use an extension to obtain information about the
+ back-end servers (e.g., for placement of pop-up windows, window alignments
+ by the window manager, etc.).
+
+ The architecture of the DMX server is divided into two main sections:
+ input (e.g., mouse and keyboard events) and output (e.g., rendering and
+ windowing requests). Each of these are describe briefly below, and the
+ rest of this design document will describe them in greater detail.
+
+ The DMX server can receive input from three general types of input
+ devices: "local" devices that are physically attached to the machine on
+ which DMX is running, "backend" devices that are physically attached to
+ one or more of the back-end X servers (and that generate events via the X
+ protocol stream from the backend), and "console" devices that can be
+ abstracted from any non-back-end X server. Backend and console devices are
+ treated differently because the pointer device on the back-end X server
+ also controls the location of the hardware X cursor. Full support for
+ XInput extension devices is provided.
+
+ Rendering requests will be accepted by the front-end server; however,
+ rendering to visible windows will be broken down as needed and sent to the
+ appropriate back-end server(s) via X11 library calls for actual rendering.
+ The basic framework will follow a Xnest-style approach. GC state will be
+ managed in the front-end server and sent to the appropriate back-end
+ server(s) as required. Pixmap rendering will (at least initially) be
+ handled by the front-end X server. Windowing requests (e.g., ordering,
+ mapping, moving, etc.) will handled in the front-end server. If the
+ request requires a visible change, the windowing operation will be
+ translated into requests for the appropriate back-end server(s). Window
+ state will be mirrored in the back-end server(s) as needed.
+
+ Layout of Paper
+
+ The next section describes the general development plan that was actually
+ used for implementation. The final section discusses outstanding issues at
+ the conclusion of development. The first appendix provides low-level
+ technical detail that may be of interest to those intimately familiar with
+ the X server architecture. The final appendix describes the four phases of
+ development that were performed during the first two years of development.
+
+ The final year of work was divided into 9 tasks that are not described in
+ specific sections of this document. The major tasks during that time were
+ the enhancement of the reconfiguration ability added in Phase IV, addition
+ of support for a dynamic number of back-end displays (instead of a
+ hard-coded limit), and the support for back-end display and input removal
+ and addition. This work is mentioned in this paper, but is not covered in
+ detail.
+
+Development plan
+
+ This section describes the development plan from approximately June 2001
+ through July 2003.
+
+ Bootstrap code
+
+ To allow for rapid development of the DMX server by multiple developers
+ during the first development stage, the problem will be broken down into
+ three tasks: the overall DMX framework, back-end rendering services and
+ input device handling services. However, before the work begins on these
+ tasks, a simple framework that each developer could use was implemented to
+ bootstrap the development effort. This framework renders to a single
+ back-end server and provides dummy input devices (i.e., the keyboard and
+ mouse). The simple back-end rendering service was implemented using the
+ shadow framebuffer support currently available in the XFree86 environment.
+
+ Using this bootstrapping framework, each developer has been able to work
+ on each of the tasks listed above independently as follows: the framework
+ will be extended to handle arbitrary back-end server configurations; the
+ back-end rendering services will be transitioned to the more efficient
+ Xnest-style implementation; and, an input device framework to handle
+ various input devices via the input extension will be developed.
+
+ Status: The boot strap code is complete.
+
+ Input device handling
+
+ An X server (including the front-end X server) requires two core input
+ devices -- a keyboard and a pointer (mouse). These core devices are
+ handled and required by the core X11 protocol. Additional types of input
+ devices may be attached and utilized via the XInput extension. These are
+ usually referred to as ``XInput extension devices'',
+
+ There are some options as to how the front-end X server gets its core
+ input devices:
+
+ 1. Local Input. The physical input devices (e.g., keyboard and mouse) can
+ be attached directly to the front-end X server. In this case, the
+ keyboard and mouse on the machine running the front-end X server will
+ be used. The front-end will have drivers to read the raw input from
+ those devices and convert it into the required X input events (e.g.,
+ key press/release, pointer button press/release, pointer motion). The
+ front-end keyboard driver will keep track of keyboard properties such
+ as key and modifier mappings, autorepeat state, keyboard sound and led
+ state. Similarly the front-end pointer driver will keep track if
+ pointer properties such as the button mapping and movement
+ acceleration parameters. With this option, input is handled fully in
+ the front-end X server, and the back-end X servers are used in a
+ display-only mode. This option was implemented and works for a limited
+ number of Linux-specific devices. Adding additional local input
+ devices for other architectures is expected to be relatively simple.
+
+ The following options are available for implementing local input
+ devices:
+
+ a. The XFree86 X server has modular input drivers that could be
+ adapted for this purpose. The mouse driver supports a wide range
+ of mouse types and interfaces, as well as a range of Operating
+ System platforms. The keyboard driver in XFree86 is not currently
+ as modular as the mouse driver, but could be made so. The XFree86
+ X server also has a range of other input drivers for extended
+ input devices such as tablets and touch screens. Unfortunately,
+ the XFree86 drivers are generally complex, often simultaneously
+ providing support for multiple devices across multiple
+ architectures; and rely so heavily on XFree86-specific
+ helper-functions, that this option was not pursued.
+
+ b. The kdrive X server in XFree86 has built-in drivers that support
+ PS/2 mice and keyboard under Linux. The mouse driver can
+ indirectly handle other mouse types if the Linux utility gpm is
+ used as to translate the native mouse protocol into PS/2 mouse
+ format. These drivers could be adapted and built in to the
+ front-end X server if this range of hardware and OS support is
+ sufficient. While much simpler than the XFree86 drivers, the
+ kdrive drivers were not used for the DMX implementation.
+
+ c. Reimplementation of keyboard and mouse drivers from scratch for
+ the DMX framework. Because keyboard and mouse drivers are
+ relatively trivial to implement, this pathway was selected. Other
+ drivers in the X source tree were referenced, and significant
+ contributions from other drivers are noted in the DMX source
+ code.
+
+ 2. Backend Input. The front-end can make use of the core input devices
+ attached to one or more of the back-end X servers. Core input events
+ from multiple back-ends are merged into a single input event stream.
+ This can work sanely when only a single set of input devices is used
+ at any given time. The keyboard and pointer state will be handled in
+ the front-end, with changes propagated to the back-end servers as
+ needed. This option was implemented and works well. Because the core
+ pointer on a back-end controls the hardware mouse on that back-end,
+ core pointers cannot be treated as XInput extension devices. However,
+ all back-end XInput extensions devices can be mapped to either DMX
+ core or DMX XInput extension devices.
+
+ 3. Console Input. The front-end server could create a console window that
+ is displayed on an X server independent of the back-end X servers.
+ This console window could display things like the physical screen
+ layout, and the front-end could get its core input events from events
+ delivered to the console window. This option was implemented and works
+ well. To help the human navigate, window outlines are also displayed
+ in the console window. Further, console windows can be used as either
+ core or XInput extension devices.
+
+ 4. Other options were initially explored, but they were all partial
+ subsets of the options listed above and, hence, are irrelevant.
+
+ Although extended input devices are not specifically mentioned in the
+ Distributed X requirements, the options above were all implemented so that
+ XInput extension devices were supported.
+
+ The bootstrap code (Xdmx) had dummy input devices, and these are still
+ supported in the final version. These do the necessary initialization to
+ satisfy the X server's requirements for core pointer and keyboard devices,
+ but no input events are ever generated.
+
+ Status: The input code is complete. Because of the complexity of the
+ XFree86 input device drivers (and their heavy reliance on XFree86
+ infrastructure), separate low-level device drivers were implemented for
+ Xdmx. The following kinds of drivers are supported (in general, the
+ devices can be treated arbitrarily as "core" input devices or as XInput
+ "extension" devices; and multiple instances of different kinds of devices
+ can be simultaneously available):
+
+ 1. A "dummy" device drive that never generates events.
+
+ 2. "Local" input is from the low-level hardware on which the Xdmx binary
+ is running. This is the only area where using the XFree86 driver
+ infrastructure would have been helpful, and then only partially, since
+ good support for generic USB devices does not yet exist in XFree86 (in
+ any case, XFree86 and kdrive driver code was used where possible).
+ Currently, the following local devices are supported under Linux
+ (porting to other operating systems should be fairly straightforward):
+
+ o Linux keyboard
+
+ o Linux serial mouse (MS)
+
+ o Linux PS/2 mouse
+
+ o USB keyboard
+
+ o USB mouse
+
+ o USB generic device (e.g., joystick, gamepad, etc.)
+
+ 3. "Backend" input is taken from one or more of the back-end displays. In
+ this case, events are taken from the back-end X server and are
+ converted to Xdmx events. Care must be taken so that the sprite moves
+ properly on the display from which input is being taken.
+
+ 4. "Console" input is taken from an X window that Xdmx creates on the
+ operator's display (i.e., on the machine running the Xdmx binary).
+ When the operator's mouse is inside the console window, then those
+ events are converted to Xdmx events. Several special features are
+ available: the console can display outlines of windows that are on the
+ Xdmx display (to facilitate navigation), the cursor can be confined to
+ the console, and a "fine" mode can be activated to allow very precise
+ cursor positioning.
+
+ Output device handling
+
+ The output of the DMX system displays rendering and windowing requests
+ across multiple screens. The screens are typically arranged in a grid such
+ that together they represent a single large display.
+
+ The output section of the DMX code consists of two parts. The first is in
+ the front-end proxy X server (Xdmx), which accepts client connections,
+ manages the windows, and potentially renders primitives but does not
+ actually display any of the drawing primitives. The second part is the
+ back-end X server(s), which accept commands from the front-end server and
+ display the results on their screens.
+
+ Initialization
+
+ The DMX front-end must first initialize its screens by connecting to each
+ of the back-end X servers and collecting information about each of these
+ screens. However, the information collected from the back-end X servers
+ might be inconsistent. Handling these cases can be difficult and/or
+ inefficient. For example, a two screen system has one back-end X server
+ running at 16bpp while the second is running at 32bpp. Converting
+ rendering requests (e.g., XPutImage() or XGetImage() requests) to the
+ appropriate bit depth can be very time consuming. Analyzing these cases to
+ determine how or even if it is possible to handle them is required. The
+ current Xinerama code handles many of these cases (e.g., in
+ PanoramiXConsolidate()) and will be used as a starting point. In general,
+ the best solution is to use homogeneous X servers and display devices.
+ Using back-end servers with the same depth is a requirement of the final
+ DMX implementation.
+
+ Once this screen consolidation is finished, the relative position of each
+ back-end X server's screen in the unified screen is initialized. A
+ full-screen window is opened on each of the back-end X servers, and the
+ cursor on each screen is turned off. The final DMX implementation can also
+ make use of a partial-screen window, or multiple windows per back-end
+ screen.
+
+ Handling rendering requests
+
+ After initialization, X applications connect to the front-end server.
+ There are two possible implementations of how rendering and windowing
+ requests are handled in the DMX system:
+
+ 1. A shadow framebuffer is used in the front-end server as the render
+ target. In this option, all protocol requests are completely handled
+ in the front-end server. All state and resources are maintained in the
+ front-end including a shadow copy of the entire framebuffer. The
+ framebuffers attached to the back-end servers are updated by
+ XPutImage() calls with data taken directly from the shadow
+ framebuffer.
+
+ This solution suffers from two main problems. First, it does not take
+ advantage of any accelerated hardware available in the system. Second,
+ the size of the XPutImage() calls can be quite large and thus will be
+ limited by the bandwidth available.
+
+ The initial DMX implementation used a shadow framebuffer by default.
+
+ 2. Rendering requests are sent to each back-end server for handling (as
+ is done in the Xnest server described above). In this option, certain
+ protocol requests are handled in the front-end server and certain
+ requests are repackaged and then sent to the back-end servers. The
+ framebuffer is distributed across the multiple back-end servers.
+ Rendering to the framebuffer is handled on each back-end and can take
+ advantage of any acceleration available on the back-end servers'
+ graphics display device. State is maintained both in the front and
+ back-end servers.
+
+ This solution suffers from two main drawbacks. First, protocol
+ requests are sent to all back-end servers -- even those that will
+ completely clip the rendering primitive -- which wastes bandwidth and
+ processing time. Second, state is maintained both in the front- and
+ back-end servers. These drawbacks are not as severe as in option 1
+ (above) and can either be overcome through optimizations or are
+ acceptable. Therefore, this option will be used in the final
+ implementation.
+
+ The final DMX implementation defaults to this mechanism, but also
+ supports the shadow framebuffer mechanism. Several optimizations were
+ implemented to eliminate the drawbacks of the default mechanism. These
+ optimizations are described the section below and in Phase II of the
+ Development Results (see appendix).
+
+ Status: Both the shadow framebuffer and Xnest-style code is complete.
+
+ Optimizing DMX
+
+ Initially, the Xnest-style solution's performance will be measured and
+ analyzed to determine where the performance bottlenecks exist. There are
+ four main areas that will be addressed.
+
+ First, to obtain reasonable interactivity with the first development
+ phase, XSync() was called after each protocol request. The XSync()
+ function flushes any pending protocol requests. It then waits for the
+ back-end to process the request and send a reply that the request has
+ completed. This happens with each back-end server and performance greatly
+ suffers. As a result of the way XSync() is called in the first development
+ phase, the batching that the X11 library performs is effectively defeated.
+ The XSync() call usage will be analyzed and optimized by batching calls
+ and performing them at regular intervals, except where interactivity will
+ suffer (e.g., on cursor movements).
+
+ Second, the initial Xnest-style solution described above sends the
+ repackaged protocol requests to all back-end servers regardless of whether
+ or not they would be completely clipped out. The requests that are
+ trivially rejected on the back-end server wastes the limited bandwidth
+ available. By tracking clipping changes in the DMX X server's windowing
+ code (e.g., by opening, closing, moving or resizing windows), we can
+ determine whether or not back-end windows are visible so that trivial
+ tests in the front-end server's GC ops drawing functions can eliminate
+ these unnecessary protocol requests.
+
+ Third, each protocol request will be analyzed to determine if it is
+ possible to break the request into smaller pieces at display boundaries.
+ The initial ones to be analyzed are put and get image requests since they
+ will require the greatest bandwidth to transmit data between the front and
+ back-end servers. Other protocol requests will be analyzed and those that
+ will benefit from breaking them into smaller requests will be implemented.
+
+ Fourth, an extension is being considered that will allow font glyphs to be
+ transferred from the front-end DMX X server to each back-end server. This
+ extension will permit the front-end to handle all font requests and
+ eliminate the requirement that all back-end X servers share the exact same
+ fonts as the front-end server. We are investigating the feasibility of
+ this extension during this development phase.
+
+ Other potential optimizations will be determined from the performance
+ analysis.
+
+ Please note that in our initial design, we proposed optimizing BLT
+ operations (e.g., XCopyArea() and window moves) by developing an extension
+ that would allow individual back-end servers to directly copy pixel data
+ to other back-end servers. This potential optimization was in response to
+ the simple image movement implementation that required potentially many
+ calls to GetImage() and PutImage(). However, the current Xinerama
+ implementation handles these BLT operations differently. Instead of
+ copying data to and from screens, they generate expose events -- just as
+ happens in the case when a window is moved from off a screen to on screen.
+ This approach saves the limited bandwidth available between front and
+ back-end servers and is being standardized with Xinerama. It also
+ eliminates the potential setup problems and security issues resulting from
+ having each back-end server open connections to all other back-end
+ servers. Therefore, we suggest accepting Xinerama's expose event solution.
+
+ Also note that the approach proposed in the second and third optimizations
+ might cause backing store algorithms in the back-end to be defeated, so a
+ DMX X server configuration flag will be added to disable these
+ optimizations.
+
+ Status: The optimizations proposed above are complete. It was determined
+ that the using the xfs font server was sufficient and creating a new
+ mechanism to pass glyphs was redundant; therefore, the fourth optimization
+ proposed above was not included in DMX.
+
+ DMX X extension support
+
+ The DMX X server keeps track of all the windowing information on the
+ back-end X servers, but does not currently export this information to any
+ client applications. An extension will be developed to pass the screen
+ information and back-end window IDs to DMX-aware clients. These clients
+ can then use this information to directly connect to and render to the
+ back-end windows. Bypassing the DMX X server allows DMX-aware clients to
+ break up complex rendering requests on their own and send them directly to
+ the windows on the back-end server's screens. An example of a client that
+ can make effective use of this extension is Chromium.
+
+ Status: The extension, as implemented, is fully documented in
+ "Client-to-Server DMX Extension to the X Protocol". Future changes might
+ be required based on feedback and other proposed enhancements to DMX.
+ Currently, the following facilities are supported:
+
+ 1. Screen information (clipping rectangle for each screen relative to the
+ virtual screen)
+
+ 2. Window information (window IDs and clipping information for each
+ back-end window that corresponds to each DMX window)
+
+ 3. Input device information (mappings from DMX device IDs to back-end
+ device IDs)
+
+ 4. Force window creation (so that a client can override the server-side
+ lazy window creation optimization)
+
+ 5. Reconfiguration (so that a client can request that a screen position
+ be changed)
+
+ 6. Addition and removal of back-end servers and back-end and console
+ inputs.
+
+ Common X extension support
+
+ The XInput, XKeyboard and Shape extensions are commonly used extensions to
+ the base X11 protocol. XInput allows multiple and non-standard input
+ devices to be accessed simultaneously. These input devices can be
+ connected to either the front-end or back-end servers. XKeyboard allows
+ much better keyboard mappings control. Shape adds support for arbitrarily
+ shaped windows and is used by various window managers. Nearly all
+ potential back-end X servers make these extensions available, and support
+ for each one will be added to the DMX system.
+
+ In addition to the extensions listed above, support for the X Rendering
+ extension (Render) is being developed. Render adds digital image
+ composition to the rendering model used by the X Window System. While this
+ extension is still under development by Keith Packard of HP, support for
+ the current version will be added to the DMX system.
+
+ Support for the XTest extension was added during the first development
+ phase.
+
+ Status: The following extensions are supported and are discussed in more
+ detail in Phase IV of the Development Results (see appendix):
+ BIG-REQUESTS, DEC-XTRAP, DMX, DPMS, Extended-Visual-Information, GLX, LBX,
+ RECORD, RENDER, SECURITY, SHAPE, SYNC, X-Resource, XC-APPGROUP, XC-MISC,
+ XFree86-Bigfont, XINERAMA, XInputExtension, XKEYBOARD, and XTEST.
+
+ OpenGL support
+
+ OpenGL support using the Mesa code base exists in XFree86 release 4 and
+ later. Currently, the direct rendering infrastructure (DRI) provides
+ accelerated OpenGL support for local clients and unaccelerated OpenGL
+ support (i.e., software rendering) is provided for non-local clients.
+
+ The single head OpenGL support in XFree86 4.x will be extended to use the
+ DMX system. When the front and back-end servers are on the same physical
+ hardware, it is possible to use the DRI to directly render to the back-end
+ servers. First, the existing DRI will be extended to support multiple
+ display heads, and then to support the DMX system. OpenGL rendering
+ requests will be direct rendering to each back-end X server. The DRI will
+ request the screen layout (either from the existing Xinerama extension or
+ a DMX-specific extension). Support for synchronized swap buffers will also
+ be added (on hardware that supports it). Note that a single front-end
+ server with a single back-end server on the same physical machine can
+ emulate accelerated indirect rendering.
+
+ When the front and back-end servers are on different physical hardware or
+ are using non-XFree86 4.x X servers, a mechanism to render primitives
+ across the back-end servers will be provided. There are several options as
+ to how this can be implemented.
+
+ 1. The existing OpenGL support in each back-end server can be used by
+ repackaging rendering primitives and sending them to each back-end
+ server. This option is similar to the unoptimized Xnest-style approach
+ mentioned above. Optimization of this solution is beyond the scope of
+ this project and is better suited to other distributed rendering
+ systems.
+
+ 2. Rendering to a pixmap in the front-end server using the current
+ XFree86 4.x code, and then displaying to the back-ends via calls to
+ XPutImage() is another option. This option is similar to the shadow
+ frame buffer approach mentioned above. It is slower and bandwidth
+ intensive, but has the advantage that the back-end servers are not
+ required to have OpenGL support.
+
+ These, and other, options will be investigated in this phase of the work.
+
+ Work by others have made Chromium DMX-aware. Chromium will use the DMX X
+ protocol extension to obtain information about the back-end servers and
+ will render directly to those servers, bypassing DMX.
+
+ Status: OpenGL support by the glxProxy extension was implemented by SGI
+ and has been integrated into the DMX code base.
+
+Current issues
+
+ In this sections the current issues are outlined that require further
+ investigation.
+
+ Fonts
+
+ The font path and glyphs need to be the same for the front-end and each of
+ the back-end servers. Font glyphs could be sent to the back-end servers as
+ necessary but this would consume a significant amount of available
+ bandwidth during font rendering for clients that use many different fonts
+ (e.g., Netscape). Initially, the font server (xfs) will be used to provide
+ the fonts to both the front-end and back-end servers. Other possibilities
+ will be investigated during development.
+
+ Zero width rendering primitives
+
+ To allow pixmap and on-screen rendering to be pixel perfect, all back-end
+ servers must render zero width primitives exactly the same as the
+ front-end renders the primitives to pixmaps. For those back-end servers
+ that do not exactly match, zero width primitives will be automatically
+ converted to one width primitives. This can be handled in the front-end
+ server via the GC state.
+
+ Output scaling
+
+ With very large tiled displays, it might be difficult to read the
+ information on the standard X desktop. In particular, the cursor can be
+ easily lost and fonts could be difficult to read. Automatic primitive
+ scaling might prove to be very useful. We will investigate the possibility
+ of scaling the cursor and providing a set of alternate pre-scaled fonts to
+ replace the standard fonts that many applications use (e.g., fixed). Other
+ options for automatic scaling will also be investigated.
+
+ Per-screen colormaps
+
+ Each screen's default colormap in the set of back-end X servers should be
+ able to be adjusted via a configuration utility. This support is would
+ allow the back-end screens to be calibrated via custom gamma tables. On
+ 24-bit systems that support a DirectColor visual, this type of correction
+ can be accommodated. One possible implementation would be to advertise to
+ X client of the DMX server a TrueColor visual while using DirectColor
+ visuals on the back-end servers to implement this type of color
+ correction. Other options will be investigated.
+
+A. Appendix
+
+Background
+
+ This section describes the existing Open Source architectures that can be
+ used to handle multiple screens and upon which this development project is
+ based. This section was written before the implementation was finished,
+ and may not reflect actual details of the implementation. It is left for
+ historical interest only.
+
+ Core input device handling
+
+ The following is a description of how core input devices are handled by an
+ X server.
+
+ InitInput()
+
+ InitInput() is a DDX function that is called at the start of each server
+ generation from the X server's main() function. Its purpose is to
+ determine what input devices are connected to the X server, register them
+ with the DIX and MI layers, and initialize the input event queue.
+ InitInput() does not have a return value, but the X server will abort if
+ either a core keyboard device or a core pointer device are not registered.
+ Extended input (XInput) devices can also be registered in InitInput().
+
+ InitInput() usually has implementation specific code to determine which
+ input devices are available. For each input device it will be using, it
+ calls AddInputDevice():
+
+ AddInputDevice() This DIX function allocates the device structure,
+ registers a callback function (which handles device init,
+ close, on and off), and returns the input handle, which
+ can be treated as opaque. It is called once for each
+ input device.
+
+ Once input handles for core keyboard and core pointer devices have been
+ obtained from AddInputDevice(). If both core devices are not registered,
+ then the X server will exit with a fatal error when it attempts to start
+ the input devices in InitAndStartDevices(), which is called directly after
+ InitInput() (see below).
+
+ The core pointer device is then registered with the miPointer code (which
+ does the high level cursor handling). While this registration is not
+ necessary for correct miPointer operation in the current XFree86 code, it
+ is still done mostly for compatibility reasons.
+
+ miRegisterPointerDevice() This MI function registers the core pointer's
+ input handle with with the miPointer code.
+
+ The final part of InitInput() is the initialization of the input event
+ queue handling. In most cases, the event queue handling provided in the MI
+ layer is used. The primary XFree86 X server uses its own event queue
+ handling to support some special cases related to the XInput extension and
+ the XFree86-specific DGA extension. For our purposes, the MI event queue
+ handling should be suitable. It is initialized by calling mieqInit():
+
+ mieqInit() This MI function initializes the MI event queue for the core
+ devices, and is passed the public component of the input
+ handles for the two core devices.
+
+ If a wakeup handler is required to deliver synchronous input events, it
+ can be registered here by calling the DIX function
+ RegisterBlockAndWakeupHandlers(). (See the devReadInput() description
+ below.)
+
+ InitAndStartDevices()
+
+ InitAndStartDevices() is a DIX function that is called immediately after
+ InitInput() from the X server's main() function. Its purpose is to
+ initialize each input device that was registered with AddInputDevice(),
+ enable each input device that was successfully initialized, and create the
+ list of enabled input devices. Once each registered device is processed in
+ this way, the list of enabled input devices is checked to make sure that
+ both a core keyboard device and core pointer device were registered and
+ successfully enabled. If not, InitAndStartDevices() returns failure, and
+ results in the the X server exiting with a fatal error.
+
+ Each registered device is initialized by calling its callback
+ (dev->deviceProc) with the DEVICE_INIT argument:
+
+ (*dev->deviceProc)(dev, This function initializes the device structs with
+ DEVICE_INIT) core information relevant to the device.
+
+ For pointer devices, this means specifying the
+ number of buttons, default button mapping, the
+ function used to get motion events (usually
+ miPointerGetMotionEvents()), the function used to
+ change/control the core pointer motion parameters
+ (acceleration and threshold), and the motion
+ buffer size.
+
+ For keyboard devices, this means specifying the
+ keycode range, default keycode to keysym mapping,
+ default modifier mapping, and the functions used
+ to sound the keyboard bell and modify/control the
+ keyboard parameters (LEDs, bell pitch and
+ duration, key click, which keys are
+ auto-repeating, etc).
+
+ Each initialized device is enabled by calling EnableDevice():
+
+ EnableDevice() EnableDevice() calls the device callback with DEVICE_ON:
+
+ (*dev->deviceProc)(dev, This typically opens and
+ DEVICE_ON) initializes the relevant physical
+ device, and when appropriate,
+ registers the device's file
+ descriptor (or equivalent) as a
+ valid input source.
+
+ EnableDevice() then adds the device handle to the X
+ server's global list of enabled devices.
+
+ InitAndStartDevices() then verifies that a valid core keyboard and pointer
+ has been initialized and enabled. It returns failure if either are
+ missing.
+
+ devReadInput()
+
+ Each device will have some function that gets called to read its physical
+ input. These may be called in a number of different ways. In the case of
+ synchronous I/O, they will be called from a DDX wakeup-handler that gets
+ called after the server detects that new input is available. In the case
+ of asynchronous I/O, they will be called from a (SIGIO) signal handler
+ triggered when new input is available. This function should do at least
+ two things: make sure that input events get enqueued, and make sure that
+ the cursor gets moved for motion events (except if these are handled later
+ by the driver's own event queue processing function, which cannot be done
+ when using the MI event queue handling).
+
+ Events are queued by calling mieqEnqueue():
+
+ mieqEnqueue() This MI function is used to add input events to the event
+ queue. It is simply passed the event to be queued.
+
+ The cursor position should be updated when motion events are enqueued, by
+ calling either miPointerAbsoluteCursor() or miPointerDeltaCursor():
+
+ miPointerAbsoluteCursor() This MI function is used to move the cursor to
+ the absolute coordinates provided.
+ miPointerDeltaCursor() This MI function is used to move the cursor
+ relative to its current position.
+
+ ProcessInputEvents()
+
+ ProcessInputEvents() is a DDX function that is called from the X server's
+ main dispatch loop when new events are available in the input event queue.
+ It typically processes the enqueued events, and updates the cursor/pointer
+ position. It may also do other DDX-specific event processing.
+
+ Enqueued events are processed by mieqProcessInputEvents() and passed to
+ the DIX layer for transmission to clients:
+
+ mieqProcessInputEvents() This function processes each event in the event
+ queue, and passes it to the device's input
+ processing function. The DIX layer provides
+ default functions to do this processing, and they
+ handle the task of getting the events passed back
+ to the relevant clients.
+ miPointerUpdate() This function resynchronized the cursor position
+ with the new pointer position. It also takes care
+ of moving the cursor between screens when needed
+ in multi-head configurations.
+
+ DisableDevice()
+
+ DisableDevice is a DIX function that removes an input device from the list
+ of enabled devices. The result of this is that the device no longer
+ generates input events. The device's data structures are kept in place,
+ and disabling a device like this can be reversed by calling
+ EnableDevice(). DisableDevice() may be called from the DDX when it is
+ desirable to do so (e.g., the XFree86 server does this when VT switching).
+ Except for special cases, this is not normally called for core input
+ devices.
+
+ DisableDevice() calls the device's callback function with DEVICE_OFF:
+
+ (*dev->deviceProc)(dev, DEVICE_OFF) This typically closes the relevant
+ physical device, and when appropriate,
+ unregisters the device's file
+ descriptor (or equivalent) as a valid
+ input source.
+
+ DisableDevice() then removes the device handle from the X server's global
+ list of enabled devices.
+
+ CloseDevice()
+
+ CloseDevice is a DIX function that removes an input device from the list
+ of available devices. It disables input from the device and frees all data
+ structures associated with the device. This function is usually called
+ from CloseDownDevices(), which is called from main() at the end of each
+ server generation to close all input devices.
+
+ CloseDevice() calls the device's callback function with DEVICE_CLOSE:
+
+ (*dev->deviceProc)(dev, This typically closes the relevant physical
+ DEVICE_CLOSE) device, and when appropriate, unregisters the
+ device's file descriptor (or equivalent) as a
+ valid input source. If any device specific data
+ structures were allocated when the device was
+ initialized, they are freed here.
+
+ CloseDevice() then frees the data structures that were allocated for the
+ device when it was registered/initialized.
+
+ LegalModifier()
+
+ LegalModifier() is a required DDX function that can be used to restrict
+ which keys may be modifier keys. This seems to be present for historical
+ reasons, so this function should simply return TRUE unconditionally.
+
+ Output handling
+
+ The following sections describe the main functions required to initialize,
+ use and close the output device(s) for each screen in the X server.
+
+ InitOutput()
+
+ This DDX function is called near the start of each server generation from
+ the X server's main() function. InitOutput()'s main purpose is to
+ initialize each screen and fill in the global screenInfo structure for
+ each screen. It is passed three arguments: a pointer to the screenInfo
+ struct, which it is to initialize, and argc and argv from main(), which
+ can be used to determine additional configuration information.
+
+ The primary tasks for this function are outlined below:
+
+ 1. Parse configuration info: The first task of InitOutput() is to parses
+ any configuration information from the configuration file. In addition
+ to the XF86Config file, other configuration information can be taken
+ from the command line. The command line options can be gathered either
+ in InitOutput() or earlier in the ddxProcessArgument() function, which
+ is called by ProcessCommandLine(). The configuration information
+ determines the characteristics of the screen(s). For example, in the
+ XFree86 X server, the XF86Config file specifies the monitor
+ information, the screen resolution, the graphics devices and slots in
+ which they are located, and, for Xinerama, the screens' layout.
+
+ 2. Initialize screen info: The next task is to initialize the
+ screen-dependent internal data structures. For example, part of what
+ the XFree86 X server does is to allocate its screen and pixmap private
+ indices, probe for graphics devices, compare the probed devices to the
+ ones listed in the XF86Config file, and add the ones that match to the
+ internal xf86Screens[] structure.
+
+ 3. Set pixmap formats: The next task is to initialize the screenInfo's
+ image byte order, bitmap bit order and bitmap scanline unit/pad. The
+ screenInfo's pixmap format's depth, bits per pixel and scanline
+ padding is also initialized at this stage.
+
+ 4. Unify screen info: An optional task that might be done at this stage
+ is to compare all of the information from the various screens and
+ determines if they are compatible (i.e., if the set of screens can be
+ unified into a single desktop). This task has potential to be useful
+ to the DMX front-end server, if Xinerama's PanoramiXConsolidate()
+ function is not sufficient.
+
+ Once these tasks are complete, the valid screens are known and each of
+ these screens can be initialized by calling AddScreen().
+
+ AddScreen()
+
+ This DIX function is called from InitOutput(), in the DDX layer, to add
+ each new screen to the screenInfo structure. The DDX screen initialization
+ function and command line arguments (i.e., argc and argv) are passed to it
+ as arguments.
+
+ This function first allocates a new Screen structure and any privates that
+ are required. It then initializes some of the fields in the Screen struct
+ and sets up the pixmap padding information. Finally, it calls the DDX
+ screen initialization function ScreenInit(), which is described below. It
+ returns the number of the screen that were just added, or -1 if there is
+ insufficient memory to add the screen or if the DDX screen initialization
+ fails.
+
+ ScreenInit()
+
+ This DDX function initializes the rest of the Screen structure with either
+ generic or screen-specific functions (as necessary). It also fills in
+ various screen attributes (e.g., width and height in millimeters, black
+ and white pixel values).
+
+ The screen init function usually calls several functions to perform
+ certain screen initialization functions. They are described below:
+
+ {mi,*fb}ScreenInit() The DDX layer's ScreenInit() function usually
+ calls another layer's ScreenInit() function
+ (e.g., miScreenInit() or fbScreenInit()) to
+ initialize the fallbacks that the DDX driver
+ does not specifically handle.
+
+ After calling another layer's ScreenInit()
+ function, any screen-specific functions either
+ wrap or replace the other layer's function
+ pointers. If a function is to be wrapped, each
+ of the old function pointers from the other
+ layer are stored in a screen private area.
+ Common functions to wrap are CloseScreen() and
+ SaveScreen().
+ miInitializeBackingStore() This MI function initializes the screen's
+ backing storage functions, which are used to
+ save areas of windows that are currently
+ covered by other windows.
+ miDCInitialize() This MI function initializes the MI cursor
+ display structures and function pointers. If a
+ hardware cursor is used, the DDX layer's
+ ScreenInit() function will wrap additional
+ screen and the MI cursor display function
+ pointers.
+
+ Another common task for ScreenInit() function is to initialize the output
+ device state. For example, in the XFree86 X server, the ScreenInit()
+ function saves the original state of the video card and then initializes
+ the video mode of the graphics device.
+
+ CloseScreen()
+
+ This function restores any wrapped screen functions (and in particular the
+ wrapped CloseScreen() function) and restores the state of the output
+ device to its original state. It should also free any private data it
+ created during the screen initialization.
+
+ GC operations
+
+ When the X server is requested to render drawing primitives, it does so by
+ calling drawing functions through the graphics context's operation
+ function pointer table (i.e., the GCOps functions). These functions render
+ the basic graphics operations such as drawing rectangles, lines, text or
+ copying pixmaps. Default routines are provided either by the MI layer,
+ which draws indirectly through a simple span interface, or by the
+ framebuffer layers (e.g., CFB, MFB, FB), which draw directly to a linearly
+ mapped frame buffer.
+
+ To take advantage of special hardware on the graphics device, specific
+ GCOps functions can be replaced by device specific code. However, many
+ times the graphics devices can handle only a subset of the possible states
+ of the GC, so during graphics context validation, appropriate routines are
+ selected based on the state and capabilities of the hardware. For example,
+ some graphics hardware can accelerate single pixel width lines with
+ certain dash patterns. Thus, for dash patterns that are not supported by
+ hardware or for width 2 or greater lines, the default routine is chosen
+ during GC validation.
+
+ Note that some pointers to functions that draw to the screen are stored in
+ the Screen structure. They include GetImage(), GetSpans(), CopyWindow()
+ and RestoreAreas().
+
+ Xnest
+
+ The Xnest X server is a special proxy X server that relays the X protocol
+ requests that it receives to a ``real'' X server that then processes the
+ requests and displays the results, if applicable. To the X applications,
+ Xnest appears as if it is a regular X server. However, Xnest is both
+ server to the X application and client of the real X server, which will
+ actually handle the requests.
+
+ The Xnest server implements all of the standard input and output
+ initialization steps outlined above.
+
+ InitOutput() Xnest takes its configuration information from command line
+ arguments via ddxProcessArguments(). This information
+ includes the real X server display to connect to, its
+ default visual class, the screen depth, the Xnest window's
+ geometry, etc. Xnest then connects to the real X server and
+ gathers visual, colormap, depth and pixmap information about
+ that server's display, creates a window on that server,
+ which will be used as the root window for Xnest.
+
+ Next, Xnest initializes its internal data structures and
+ uses the data from the real X server's pixmaps to initialize
+ its own pixmap formats. Finally, it calls
+ AddScreen(xnestOpenScreen, argc, argv) to initialize each of
+ its screens.
+ ScreenInit() Xnest's ScreenInit() function is called xnestOpenScreen().
+ This function initializes its screen's depth and visual
+ information, and then calls miScreenInit() to set up the
+ default screen functions. It then calls
+ miInitializeBackingStore() and miDCInitialize() to
+ initialize backing store and the software cursor. Finally,
+ it replaces many of the screen functions with its own
+ functions that repackage and send the requests to the real X
+ server to which Xnest is attached.
+ CloseScreen() This function frees its internal data structure allocations.
+ Since it replaces instead of wrapping screen functions,
+ there are no function pointers to unwrap. This can
+ potentially lead to problems during server regeneration.
+ GC operations The GC operations in Xnest are very simple since they leave
+ all of the drawing to the real X server to which Xnest is
+ attached. Each of the GCOps takes the request and sends it
+ to the real X server using standard Xlib calls. For example,
+ the X application issues a XDrawLines() call. This function
+ turns into a protocol request to Xnest, which calls the
+ xnestPolylines() function through Xnest's GCOps function
+ pointer table. The xnestPolylines() function is only a
+ single line, which calls XDrawLines() using the same
+ arguments that were passed into it. Other GCOps functions
+ are very similar. Two exceptions to the simple GCOps
+ functions described above are the image functions and the
+ BLT operations.
+
+ The image functions, GetImage() and PutImage(), must use a
+ temporary image to hold the image to be put of the image
+ that was just grabbed from the screen while it is in transit
+ to the real X server or the client. When the image has been
+ transmitted, the temporary image is destroyed.
+
+ The BLT operations, CopyArea() and CopyPlane(), handle not
+ only the copy function, which is the same as the simple
+ cases described above, but also the graphics exposures that
+ result when the GC's graphics exposure bit is set to True.
+ Graphics exposures are handled in a helper function,
+ xnestBitBlitHelper(). This function collects the exposure
+ events from the real X server and, if any resulting in
+ regions being exposed, then those regions are passed back to
+ the MI layer so that it can generate exposure events for the
+ X application.
+
+ The Xnest server takes its input from the X server to which it is
+ connected. When the mouse is in the Xnest server's window, keyboard and
+ mouse events are received by the Xnest server, repackaged and sent back to
+ any client that requests those events.
+
+ Shadow framebuffer
+
+ The most common type of framebuffer is a linear array memory that maps to
+ the video memory on the graphics device. However, accessing that video
+ memory over an I/O bus (e.g., ISA or PCI) can be slow. The shadow
+ framebuffer layer allows the developer to keep the entire framebuffer in
+ main memory and copy it back to video memory at regular intervals. It also
+ has been extended to handle planar video memory and rotated framebuffers.
+
+ There are two main entry points to the shadow framebuffer code:
+
+ shadowAlloc(width, height, This function allocates the in memory copy of
+ bpp) the framebuffer of size width*height*bpp. It
+ returns a pointer to that memory, which will be
+ used by the framebuffer ScreenInit() code
+ during the screen's initialization.
+ shadowInit(pScreen, This function initializes the shadow
+ updateProc, windowProc) framebuffer layer. It wraps several screen
+ drawing functions, and registers a block
+ handler that will update the screen. The
+ updateProc is a function that will copy the
+ damaged regions to the screen, and the
+ windowProc is a function that is used when the
+ entire linear video memory range cannot be
+ accessed simultaneously so that only a window
+ into that memory is available (e.g., when using
+ the VGA aperture).
+
+ The shadow framebuffer code keeps track of the damaged area of each screen
+ by calculating the bounding box of all drawing operations that have
+ occurred since the last screen update. Then, when the block handler is
+ next called, only the damaged portion of the screen is updated.
+
+ Note that since the shadow framebuffer is kept in main memory, all drawing
+ operations are performed by the CPU and, thus, no accelerated hardware
+ drawing operations are possible.
+
+ Xinerama
+
+ Xinerama is an X extension that allows multiple physical screens
+ controlled by a single X server to appear as a single screen. Although the
+ extension allows clients to find the physical screen layout via extension
+ requests, it is completely transparent to clients at the core X11 protocol
+ level. The original public implementation of Xinerama came from
+ Digital/Compaq. XFree86 rewrote it, filling in some missing pieces and
+ improving both X11 core protocol compliance and performance. The Xinerama
+ extension will be passing through X.Org's standardization process in the
+ near future, and the sample implementation will be based on this rewritten
+ version.
+
+ The current implementation of Xinerama is based primarily in the DIX
+ (device independent) and MI (machine independent) layers of the X server.
+ With few exceptions the DDX layers do not need any changes to support
+ Xinerama. X server extensions often do need modifications to provide full
+ Xinerama functionality.
+
+ The following is a code-level description of how Xinerama functions.
+
+ Note: Because the Xinerama extension was originally called the PanoramiX
+ extension, many of the Xinerama functions still have the PanoramiX prefix.
+
+ PanoramiXExtensionInit() PanoramiXExtensionInit() is a
+ device-independent extension function
+ that is called at the start of each
+ server generation from InitExtensions(),
+ which is called from the X server's
+ main() function after all output devices
+ have been initialized, but before any
+ input devices have been initialized.
+
+ PanoramiXNumScreens is set to the number
+ of physical screens. If only one physical
+ screen is present, the extension is
+ disabled, and PanoramiXExtensionInit()
+ returns without doing anything else.
+
+ The Xinerama extension is registered by
+ calling AddExtension().
+
+ GC and Screen private indexes are
+ allocated, and both GC and Screen private
+ areas are allocated for each physical
+ screen. These hold Xinerama-specific
+ per-GC and per-Screen data. Each screen's
+ CreateGC and CloseScreen functions are
+ wrapped by XineramaCreateGC() and
+ XineramaCloseScreen() respectively. Some
+ new resource classes are created for
+ Xinerama drawables and GCs, and resource
+ types for Xinerama windows, pixmaps and
+ colormaps.
+
+ A region (PanoramiXScreenRegion) is
+ initialized to be the union of the screen
+ regions. The relative positioning
+ information for the physical screens is
+ taken from the ScreenRec x and y members,
+ which the DDX layer must initialize in
+ InitOutput(). The bounds of the combined
+ screen is also calculated
+ (PanoramiXPixWidth and
+ PanoramiXPixHeight).
+
+ The DIX layer has a list of function
+ pointers (ProcVector[]) that holds the
+ entry points for the functions that
+ process core protocol requests. The
+ requests that Xinerama must intercept and
+ break up into physical screen-specific
+ requests are wrapped. The original set is
+ copied to SavedProcVector[]. The types of
+ requests intercepted are Window requests,
+ GC requests, colormap requests, drawing
+ requests, and some geometry-related
+ requests. This wrapping allows the bulk
+ of the protocol request processing to be
+ handled transparently to the DIX layer.
+ Some operations cannot be dealt with in
+ this way and are handled with
+ Xinerama-specific code within the DIX
+ layer.
+ PanoramiXConsolidate() PanoramiXConsolidate() is a
+ device-independent extension function
+ that is called directly from the X
+ server's main() function after extensions
+ and input/output devices have been
+ initialized, and before the root windows
+ are defined and initialized.
+
+ This function finds the set of depths
+ (PanoramiXDepths[]) and visuals
+ (PanoramiXVisuals[]) common to all of the
+ physical screens. PanoramiXNumDepths is
+ set to the number of common depths, and
+ PanoramiXNumVisuals is set to the number
+ of common visuals. Resources are created
+ for the single root window and the
+ default colormap. Each of these resources
+ has per-physical screen entries.
+ PanoramiXCreateConnectionBlock() PanoramiXConsolidate() is a
+ device-independent extension function
+ that is called directly from the X
+ server's main() function after the
+ per-physical screen root windows are
+ created. It is called instead of the
+ standard DIX CreateConnectionBlock()
+ function. If this function returns FALSE,
+ the X server exits with a fatal error.
+ This function will return FALSE if no
+ common depths were found in
+ PanoramiXConsolidate(). With no common
+ depths, Xinerama mode is not possible.
+
+ The connection block holds the
+ information that clients get when they
+ open a connection to the X server. It
+ includes information such as the
+ supported pixmap formats, number of
+ screens and the sizes, depths, visuals,
+ default colormap information, etc, for
+ each of the screens (much of information
+ that xdpyinfo shows). The connection
+ block is initialized with the combined
+ single screen values that were calculated
+ in the above two functions.
+
+ The Xinerama extension allows the
+ registration of connection block callback
+ functions. The purpose of these is to
+ allow other extensions to do processing
+ at this point. These callbacks can be
+ registered by calling
+ XineramaRegisterConnectionBlockCallback()
+ from the other extension's
+ ExtensionInit() function. Each registered
+ connection block callback is called at
+ the end of
+ PanoramiXCreateConnectionBlock().
+
+ Xinerama-specific changes to the DIX code
+
+ There are a few types of Xinerama-specific changes within the DIX code.
+ The main ones are described here.
+
+ Functions that deal with colormap or GC -related operations outside of the
+ intercepted protocol requests have a test added to only do the processing
+ for screen numbers > 0. This is because they are handled for the single
+ Xinerama screen and the processing is done once for screen 0.
+
+ The handling of motion events does some coordinate translation between the
+ physical screen's origin and screen zero's origin. Also, motion events
+ must be reported relative to the composite screen origin rather than the
+ physical screen origins.
+
+ There is some special handling for cursor, window and event processing
+ that cannot (either not at all or not conveniently) be done via the
+ intercepted protocol requests. A particular case is the handling of
+ pointers moving between physical screens.
+
+ Xinerama-specific changes to the MI code
+
+ The only Xinerama-specific change to the MI code is in miSendExposures()
+ to handle the coordinate (and window ID) translation for expose events.
+
+ Intercepted DIX core requests
+
+ Xinerama breaks up drawing requests for dispatch to each physical screen.
+ It also breaks up windows into pieces for each physical screen. GCs are
+ translated into per-screen GCs. Colormaps are replicated on each physical
+ screen. The functions handling the intercepted requests take care of
+ breaking the requests and repackaging them so that they can be passed to
+ the standard request handling functions for each screen in turn. In
+ addition, and to aid the repackaging, the information from many of the
+ intercepted requests is used to keep up to date the necessary state
+ information for the single composite screen. Requests (usually those with
+ replies) that can be satisfied completely from this stored state
+ information do not call the standard request handling functions.
+
+Development Results
+
+ In this section the results of each phase of development are discussed.
+ This development took place between approximately June 2001 and July 2003.
+
+ Phase I
+
+ The initial development phase dealt with the basic implementation
+ including the bootstrap code, which used the shadow framebuffer, and the
+ unoptimized implementation, based on an Xnest-style implementation.
+
+ Scope
+
+ The goal of Phase I is to provide fundamental functionality that can act
+ as a foundation for ongoing work:
+
+ 1. Develop the proxy X server
+
+ o The proxy X server will operate on the X11 protocol and relay
+ requests as necessary to correctly perform the request.
+
+ o Work will be based on the existing work for Xinerama and Xnest.
+
+ o Input events and windowing operations are handled in the proxy
+ server and rendering requests are repackaged and sent to each of
+ the back-end servers for display.
+
+ o The multiple screen layout (including support for overlapping
+ screens) will be user configurable via a configuration file or
+ through the configuration tool.
+
+ 2. Develop graphical configuration tool
+
+ o There will be potentially a large number of X servers to
+ configure into a single display. The tool will allow the user to
+ specify which servers are involved in the configuration and how
+ they should be laid out.
+
+ 3. Pass the X Test Suite
+
+ o The X Test Suite covers the basic X11 operations. All tests known
+ to succeed must correctly operate in the distributed X
+ environment.
+
+ For this phase, the back-end X servers are assumed to be unmodified X
+ servers that do not support any DMX-related protocol extensions; future
+ optimization pathways are considered, but are not implemented; and the
+ configuration tool is assumed to rely only on libraries in the X source
+ tree (e.g., Xt).
+
+ Results
+
+ The proxy X server, Xdmx, was developed to distribute X11 protocol
+ requests to the set of back-end X servers. It opens a window on each
+ back-end server, which represents the part of the front-end's root window
+ that is visible on that screen. It mirrors window, pixmap and other state
+ in each back-end server. Drawing requests are sent to either windows or
+ pixmaps on each back-end server. This code is based on Xnest and uses the
+ existing Xinerama extension.
+
+ Input events can be taken from (1) devices attached to the back-end
+ server, (2) core devices attached directly to the Xdmx server, or (3) from
+ a ``console'' window on another X server. Events for these devices are
+ gathered, processed and delivered to clients attached to the Xdmx server.
+
+ An intuitive configuration format was developed to help the user easily
+ configure the multiple back-end X servers. It was defined (see grammar in
+ Xdmx man page) and a parser was implemented that is used by the Xdmx
+ server and by a standalone xdmxconfig utility. The parsing support was
+ implemented such that it can be easily factored out of the X source tree
+ for use with other tools (e.g., vdl). Support for converting legacy
+ vdl-format configuration files to the DMX format is provided by the
+ vdltodmx utility.
+
+ Originally, the configuration file was going to be a subsection of
+ XFree86's XF86Config file, but that was not possible since Xdmx is a
+ completely separate X server. Thus, a separate config file format was
+ developed. In addition, a graphical configuration tool, xdmxconfig, was
+ developed to allow the user to create and arrange the screens in the
+ configuration file. The -configfile and -config command-line options can
+ be used to start Xdmx using a configuration file.
+
+ An extension that enables remote input testing is required for the X Test
+ Suite to function. During this phase, this extension (XTEST) was
+ implemented in the Xdmx server. The results from running the X Test Suite
+ are described in detail below.
+
+ X Test Suite
+
+ Introduction
+
+ The X Test Suite contains tests that verify Xlib functions operate
+ correctly. The test suite is designed to run on a single X server;
+ however, since X applications will not be able to tell the difference
+ between the DMX server and a standard X server, the X Test Suite should
+ also run on the DMX server.
+
+ The Xdmx server was tested with the X Test Suite, and the existing
+ failures are noted in this section. To put these results in perspective,
+ we first discuss expected X Test failures and how errors in underlying
+ systems can impact Xdmx test results.
+
+ Expected Failures for a Single Head
+
+ A correctly implemented X server with a single screen is expected to fail
+ certain X Test tests. The following well-known errors occur because of
+ rounding error in the X server code:
+
+ XDrawArc: Tests 42, 63, 66, 73
+ XDrawArcs: Tests 45, 66, 69, 76
+
+
+ The following failures occur because of the high-level X server
+ implementation:
+
+ XLoadQueryFont: Test 1
+ XListFontsWithInfo: Tests 3, 4
+ XQueryFont: Tests 1, 2
+
+
+ The following test fails when running the X server as root under Linux
+ because of the way directory modes are interpreted:
+
+ XWriteBitmapFile: Test 3
+
+
+ Depending on the video card used for the back-end, other failures may also
+ occur because of bugs in the low-level driver implementation. Over time,
+ failures of this kind are usually fixed by XFree86, but will show up in
+ Xdmx testing until then.
+
+ Expected Failures for Xinerama
+
+ Xinerama fails several X Test Suite tests because of design decisions made
+ for the current implementation of Xinerama. Over time, many of these
+ errors will be corrected by XFree86 and the group working on a new
+ Xinerama implementation. Therefore, Xdmx will also share X Suite Test
+ failures with Xinerama.
+
+ We may be able to fix or work-around some of these failures at the Xdmx
+ level, but this will require additional exploration that was not part of
+ Phase I.
+
+ Xinerama is constantly improving, and the list of Xinerama-related
+ failures depends on XFree86 version and the underlying graphics hardware.
+ We tested with a variety of hardware, including nVidia, S3, ATI Radeon,
+ and Matrox G400 (in dual-head mode). The list below includes only those
+ failures that appear to be from the Xinerama layer, and does not include
+ failures listed in the previous section, or failures that appear to be
+ from the low-level graphics driver itself:
+
+ These failures were noted with multiple Xinerama configurations:
+
+ XCopyPlane: Tests 13, 22, 31 (well-known Xinerama implementation issue)
+ XSetFontPath: Test 4
+ XGetDefault: Test 5
+ XMatchVisualInfo: Test 1
+
+
+ These failures were noted only when using one dual-head video card with a
+ 4.2.99.x XFree86 server:
+
+ XListPixmapFormats: Test 1
+ XDrawRectangles: Test 45
+
+
+ These failures were noted only when using two video cards from different
+ vendors with a 4.1.99.x XFree86 server:
+
+ XChangeWindowAttributes: Test 32
+ XCreateWindow: Test 30
+ XDrawLine: Test 22
+ XFillArc: Test 22
+ XChangeKeyboardControl: Tests 9, 10
+ XRebindKeysym: Test 1
+
+
+ Additional Failures from Xdmx
+
+ When running Xdmx, no unexpected failures were noted. Since the Xdmx
+ server is based on Xinerama, we expect to have most of the Xinerama
+ failures present in the Xdmx server. Similarly, since the Xdmx server must
+ rely on the low-level device drivers on each back-end server, we also
+ expect that Xdmx will exhibit most of the back-end failures. Here is a
+ summary:
+
+ XListPixmapFormats: Test 1 (configuration dependent)
+ XChangeWindowAttributes: Test 32
+ XCreateWindow: Test 30
+ XCopyPlane: Test 13, 22, 31
+ XSetFontPath: Test 4
+ XGetDefault: Test 5 (configuration dependent)
+ XMatchVisualInfo: Test 1
+ XRebindKeysym: Test 1 (configuration dependent)
+
+
+ Note that this list is shorter than the combined list for Xinerama because
+ Xdmx uses different code paths to perform some Xinerama operations.
+ Further, some Xinerama failures have been fixed in the XFree86 4.2.99.x
+ CVS repository.
+
+ Summary and Future Work
+
+ Running the X Test Suite on Xdmx does not produce any failures that cannot
+ be accounted for by the underlying Xinerama subsystem used by the
+ front-end or by the low-level device-driver code running on the back-end X
+ servers. The Xdmx server therefore is as ``correct'' as possible with
+ respect to the standard set of X Test Suite tests.
+
+ During the following phases, we will continue to verify Xdmx correctness
+ using the X Test Suite. We may also use other tests suites or write
+ additional tests that run under the X Test Suite that specifically verify
+ the expected behavior of DMX.
+
+ Fonts
+
+ In Phase I, fonts are handled directly by both the front-end and the
+ back-end servers, which is required since we must treat each back-end
+ server during this phase as a ``black box''. What this requires is that
+ the front- and back-end servers must share the exact same font path. There
+ are two ways to help make sure that all servers share the same font path:
+
+ 1. First, each server can be configured to use the same font server. The
+ font server, xfs, can be configured to serve fonts to multiple X
+ servers via TCP.
+
+ 2. Second, each server can be configured to use the same font path and
+ either those font paths can be copied to each back-end machine or they
+ can be mounted (e.g., via NFS) on each back-end machine.
+
+ One additional concern is that a client program can set its own font path,
+ and if it does so, then that font path must be available on each back-end
+ machine.
+
+ The -fontpath command line option was added to allow users to initialize
+ the font path of the front end server. This font path is propagated to
+ each back-end server when the default font is loaded. If there are any
+ problems, an error message is printed, which will describe the problem and
+ list the current font path. For more information about setting the font
+ path, see the -fontpath option description in the man page.
+
+ Performance
+
+ Phase I of development was not intended to optimize performance. Its focus
+ was on completely and correctly handling the base X11 protocol in the Xdmx
+ server. However, several insights were gained during Phase I, which are
+ listed here for reference during the next phase of development.
+
+ 1. Calls to XSync() can slow down rendering since it requires a complete
+ round trip to and from a back-end server. This is especially
+ problematic when communicating over long haul networks.
+
+ 2. Sending drawing requests to only the screens that they overlap should
+ improve performance.
+
+ Pixmaps
+
+ Pixmaps were originally expected to be handled entirely in the front-end X
+ server; however, it was found that this overly complicated the rendering
+ code and would have required sending potentially large images to each back
+ server that required them when copying from pixmap to screen. Thus, pixmap
+ state is mirrored in the back-end server just as it is with regular window
+ state. With this implementation, the same rendering code that draws to
+ windows can be used to draw to pixmaps on the back-end server, and no
+ large image transfers are required to copy from pixmap to window.
+
+ Phase II
+
+ The second phase of development concentrates on performance optimizations.
+ These optimizations are documented here, with x11perf data to show how the
+ optimizations improve performance.
+
+ All benchmarks were performed by running Xdmx on a dual processor 1.4GHz
+ AMD Athlon machine with 1GB of RAM connecting over 100baseT to two
+ single-processor 1GHz Pentium III machines with 256MB of RAM and ATI Rage
+ 128 (RF) video cards. The front end was running Linux 2.4.20-pre1-ac1 and
+ the back ends were running Linux 2.4.7-10 and version 4.2.99.1 of XFree86
+ pulled from the XFree86 CVS repository on August 7, 2002. All systems were
+ running Red Hat Linux 7.2.
+
+ Moving from XFree86 4.1.99.1 to 4.2.0.0
+
+ For phase II, the working source tree was moved to the branch tagged with
+ dmx-1-0-branch and was updated from version 4.1.99.1 (20 August 2001) of
+ the XFree86 sources to version 4.2.0.0 (18 January 2002). After this
+ update, the following tests were noted to be more than 10% faster:
+
+ 1.13 Fill 300x300 opaque stippled trapezoid (161x145 stipple)
+ 1.16 Fill 1x1 tiled trapezoid (161x145 tile)
+ 1.13 Fill 10x10 tiled trapezoid (161x145 tile)
+ 1.17 Fill 100x100 tiled trapezoid (161x145 tile)
+ 1.16 Fill 1x1 tiled trapezoid (216x208 tile)
+ 1.20 Fill 10x10 tiled trapezoid (216x208 tile)
+ 1.15 Fill 100x100 tiled trapezoid (216x208 tile)
+ 1.37 Circulate Unmapped window (200 kids)
+
+ And the following tests were noted to be more than 10% slower:
+
+ 0.88 Unmap window via parent (25 kids)
+ 0.75 Circulate Unmapped window (4 kids)
+ 0.79 Circulate Unmapped window (16 kids)
+ 0.80 Circulate Unmapped window (25 kids)
+ 0.82 Circulate Unmapped window (50 kids)
+ 0.85 Circulate Unmapped window (75 kids)
+
+ These changes were not caused by any changes in the DMX system, and may
+ point to changes in the XFree86 tree or to tests that have more "jitter"
+ than most other x11perf tests.
+
+ Global changes
+
+ During the development of the Phase II DMX server, several global changes
+ were made. These changes were also compared with the Phase I server. The
+ following tests were noted to be more than 10% faster:
+
+ 1.13 Fill 300x300 opaque stippled trapezoid (161x145 stipple)
+ 1.15 Fill 1x1 tiled trapezoid (161x145 tile)
+ 1.13 Fill 10x10 tiled trapezoid (161x145 tile)
+ 1.17 Fill 100x100 tiled trapezoid (161x145 tile)
+ 1.16 Fill 1x1 tiled trapezoid (216x208 tile)
+ 1.19 Fill 10x10 tiled trapezoid (216x208 tile)
+ 1.15 Fill 100x100 tiled trapezoid (216x208 tile)
+ 1.15 Circulate Unmapped window (4 kids)
+
+ The following tests were noted to be more than 10% slower:
+
+ 0.69 Scroll 10x10 pixels
+ 0.68 Scroll 100x100 pixels
+ 0.68 Copy 10x10 from window to window
+ 0.68 Copy 100x100 from window to window
+ 0.76 Circulate Unmapped window (75 kids)
+ 0.83 Circulate Unmapped window (100 kids)
+
+ For the remainder of this analysis, the baseline of comparison will be the
+ Phase II deliverable with all optimizations disabled (unless otherwise
+ noted). This will highlight how the optimizations in isolation impact
+ performance.
+
+ XSync() Batching
+
+ During the Phase I implementation, XSync() was called after every protocol
+ request made by the DMX server. This provided the DMX server with an
+ interactive feel, but defeated X11's protocol buffering system and
+ introduced round-trip wire latency into every operation. During Phase II,
+ DMX was changed so that protocol requests are no longer followed by calls
+ to XSync(). Instead, the need for an XSync() is noted, and XSync() calls
+ are only made every 100mS or when the DMX server specifically needs to
+ make a call to guarantee interactivity. With this new system, X11 buffers
+ protocol as much as possible during a 100mS interval, and many unnecessary
+ XSync() calls are avoided.
+
+ Out of more than 300 x11perf tests, 8 tests became more than 100 times
+ faster, with 68 more than 50X faster, 114 more than 10X faster, and 181
+ more than 2X faster. See table below for summary.
+
+ The following tests were noted to be more than 10% slower with XSync()
+ batching on:
+
+ 0.88 500x500 tiled rectangle (161x145 tile)
+ 0.89 Copy 500x500 from window to window
+
+ Offscreen Optimization
+
+ Windows span one or more of the back-end servers' screens; however, during
+ Phase I development, windows were created on every back-end server and
+ every rendering request was sent to every window regardless of whether or
+ not that window was visible. With the offscreen optimization, the DMX
+ server tracks when a window is completely off of a back-end server's
+ screen and, in that case, it does not send rendering requests to those
+ back-end windows. This optimization saves bandwidth between the front and
+ back-end servers, and it reduces the number of XSync() calls. The
+ performance tests were run on a DMX system with only two back-end servers.
+ Greater performance gains will be had as the number of back-end servers
+ increases.
+
+ Out of more than 300 x11perf tests, 3 tests were at least twice as fast,
+ and 146 tests were at least 10% faster. Two tests were more than 10%
+ slower with the offscreen optimization:
+
+ 0.88 Hide/expose window via popup (4 kids)
+ 0.89 Resize unmapped window (75 kids)
+
+ Lazy Window Creation Optimization
+
+ As mentioned above, during Phase I, windows were created on every back-end
+ server even if they were not visible on that back-end. With the lazy
+ window creation optimization, the DMX server does not create windows on a
+ back-end server until they are either visible or they become the parents
+ of a visible window. This optimization builds on the offscreen
+ optimization (described above) and requires it to be enabled.
+
+ The lazy window creation optimization works by creating the window data
+ structures in the front-end server when a client creates a window, but
+ delays creation of the window on the back-end server(s). A private window
+ structure in the DMX server saves the relevant window data and tracks
+ changes to the window's attributes and stacking order for later use. The
+ only times a window is created on a back-end server are (1) when it is
+ mapped and is at least partially overlapping the back-end server's screen
+ (tracked by the offscreen optimization), or (2) when the window becomes
+ the parent of a previously visible window. The first case occurs when a
+ window is mapped or when a visible window is copied, moved or resized and
+ now overlaps the back-end server's screen. The second case occurs when
+ starting a window manager after having created windows to which the window
+ manager needs to add decorations.
+
+ When either case occurs, a window on the back-end server is created using
+ the data saved in the DMX server's window private data structure. The
+ stacking order is then adjusted to correctly place the window on the
+ back-end and lastly the window is mapped. From this time forward, the
+ window is handled exactly as if the window had been created at the time of
+ the client's request.
+
+ Note that when a window is no longer visible on a back-end server's screen
+ (e.g., it is moved offscreen), the window is not destroyed; rather, it is
+ kept and reused later if the window once again becomes visible on the
+ back-end server's screen. Originally with this optimization, destroying
+ windows was implemented but was later rejected because it increased
+ bandwidth when windows were opaquely moved or resized, which is common in
+ many window managers.
+
+ The performance tests were run on a DMX system with only two back-end
+ servers. Greater performance gains will be had as the number of back-end
+ servers increases.
+
+ This optimization improved the following x11perf tests by more than 10%:
+
+ 1.10 500x500 rectangle outline
+ 1.12 Fill 100x100 stippled trapezoid (161x145 stipple)
+ 1.20 Circulate Unmapped window (50 kids)
+ 1.19 Circulate Unmapped window (75 kids)
+
+ Subdividing Rendering Primitives
+
+ X11 imaging requests transfer significant data between the client and the
+ X server. During Phase I, the DMX server would then transfer the image
+ data to each back-end server. Even with the offscreen optimization
+ (above), these requests still required transferring significant data to
+ each back-end server that contained a visible portion of the window. For
+ example, if the client uses XPutImage() to copy an image to a window that
+ overlaps the entire DMX screen, then the entire image is copied by the DMX
+ server to every back-end server.
+
+ To reduce the amount of data transferred between the DMX server and the
+ back-end servers when XPutImage() is called, the image data is subdivided
+ and only the data that will be visible on a back-end server's screen is
+ sent to that back-end server. Xinerama already implements a subdivision
+ algorithm for XGetImage() and no further optimization was needed.
+
+ Other rendering primitives were analyzed, but the time required to
+ subdivide these primitives was a significant proportion of the time
+ required to send the entire rendering request to the back-end server, so
+ this optimization was rejected for the other rendering primitives.
+
+ Again, the performance tests were run on a DMX system with only two
+ back-end servers. Greater performance gains will be had as the number of
+ back-end servers increases.
+
+ This optimization improved the following x11perf tests by more than 10%:
+
+ 1.12 Fill 100x100 stippled trapezoid (161x145 stipple)
+ 1.26 PutImage 10x10 square
+ 1.83 PutImage 100x100 square
+ 1.91 PutImage 500x500 square
+ 1.40 PutImage XY 10x10 square
+ 1.48 PutImage XY 100x100 square
+ 1.50 PutImage XY 500x500 square
+ 1.45 Circulate Unmapped window (75 kids)
+ 1.74 Circulate Unmapped window (100 kids)
+
+ The following test was noted to be more than 10% slower with this
+ optimization:
+
+ 0.88 10-pixel fill chord partial circle
+
+ Summary of x11perf Data
+
+ With all of the optimizations on, 53 x11perf tests are more than 100X
+ faster than the unoptimized Phase II deliverable, with 69 more than 50X
+ faster, 73 more than 10X faster, and 199 more than twice as fast. No tests
+ were more than 10% slower than the unoptimized Phase II deliverable.
+ (Compared with the Phase I deliverable, only Circulate Unmapped window
+ (100 kids) was more than 10% slower than the Phase II deliverable. As
+ noted above, this test seems to have wider variability than other x11perf
+ tests.)
+
+ The following table summarizes relative x11perf test changes for all
+ optimizations individually and collectively. Note that some of the
+ optimizations have a synergistic effect when used together.
+
+
+ 1: XSync() batching only
+ 2: Off screen optimizations only
+ 3: Window optimizations only
+ 4: Subdivprims only
+ 5: All optimizations
+
+ 1 2 3 4 5 Operation
+ ------ ---- ---- ---- ------ ---------
+ 2.14 1.85 1.00 1.00 4.13 Dot
+ 1.67 1.80 1.00 1.00 3.31 1x1 rectangle
+ 2.38 1.43 1.00 1.00 2.44 10x10 rectangle
+ 1.00 1.00 0.92 0.98 1.00 100x100 rectangle
+ 1.00 1.00 1.00 1.00 1.00 500x500 rectangle
+ 1.83 1.85 1.05 1.06 3.54 1x1 stippled rectangle (8x8 stipple)
+ 2.43 1.43 1.00 1.00 2.41 10x10 stippled rectangle (8x8 stipple)
+ 0.98 1.00 1.00 1.00 1.00 100x100 stippled rectangle (8x8 stipple)
+ 1.00 1.00 1.00 1.00 0.98 500x500 stippled rectangle (8x8 stipple)
+ 1.75 1.75 1.00 1.00 3.40 1x1 opaque stippled rectangle (8x8 stipple)
+ 2.38 1.42 1.00 1.00 2.34 10x10 opaque stippled rectangle (8x8 stipple)
+ 1.00 1.00 0.97 0.97 1.00 100x100 opaque stippled rectangle (8x8 stipple)
+ 1.00 1.00 1.00 1.00 0.99 500x500 opaque stippled rectangle (8x8 stipple)
+ 1.82 1.82 1.04 1.04 3.56 1x1 tiled rectangle (4x4 tile)
+ 2.33 1.42 1.00 1.00 2.37 10x10 tiled rectangle (4x4 tile)
+ 1.00 0.92 1.00 1.00 1.00 100x100 tiled rectangle (4x4 tile)
+ 1.00 1.00 1.00 1.00 1.00 500x500 tiled rectangle (4x4 tile)
+ 1.94 1.62 1.00 1.00 3.66 1x1 stippled rectangle (17x15 stipple)
+ 1.74 1.28 1.00 1.00 1.73 10x10 stippled rectangle (17x15 stipple)
+ 1.00 1.00 1.00 0.89 0.98 100x100 stippled rectangle (17x15 stipple)
+ 1.00 1.00 1.00 1.00 0.98 500x500 stippled rectangle (17x15 stipple)
+ 1.94 1.62 1.00 1.00 3.67 1x1 opaque stippled rectangle (17x15 stipple)
+ 1.69 1.26 1.00 1.00 1.66 10x10 opaque stippled rectangle (17x15 stipple)
+ 1.00 0.95 1.00 1.00 1.00 100x100 opaque stippled rectangle (17x15 stipple)
+ 1.00 1.00 1.00 1.00 0.97 500x500 opaque stippled rectangle (17x15 stipple)
+ 1.93 1.61 0.99 0.99 3.69 1x1 tiled rectangle (17x15 tile)
+ 1.73 1.27 1.00 1.00 1.72 10x10 tiled rectangle (17x15 tile)
+ 1.00 1.00 1.00 1.00 0.98 100x100 tiled rectangle (17x15 tile)
+ 1.00 1.00 0.97 0.97 1.00 500x500 tiled rectangle (17x15 tile)
+ 1.95 1.63 1.00 1.00 3.83 1x1 stippled rectangle (161x145 stipple)
+ 1.80 1.30 1.00 1.00 1.83 10x10 stippled rectangle (161x145 stipple)
+ 0.97 1.00 1.00 1.00 1.01 100x100 stippled rectangle (161x145 stipple)
+ 1.00 1.00 1.00 1.00 0.98 500x500 stippled rectangle (161x145 stipple)
+ 1.95 1.63 1.00 1.00 3.56 1x1 opaque stippled rectangle (161x145 stipple)
+ 1.65 1.25 1.00 1.00 1.68 10x10 opaque stippled rectangle (161x145 stipple)
+ 1.00 1.00 1.00 1.00 1.01 100x100 opaque stippled rectangle (161x145...
+ 1.00 1.00 1.00 1.00 0.97 500x500 opaque stippled rectangle (161x145...
+ 1.95 1.63 0.98 0.99 3.80 1x1 tiled rectangle (161x145 tile)
+ 1.67 1.26 1.00 1.00 1.67 10x10 tiled rectangle (161x145 tile)
+ 1.13 1.14 1.14 1.14 1.14 100x100 tiled rectangle (161x145 tile)
+ 0.88 1.00 1.00 1.00 0.99 500x500 tiled rectangle (161x145 tile)
+ 1.93 1.63 1.00 1.00 3.53 1x1 tiled rectangle (216x208 tile)
+ 1.69 1.26 1.00 1.00 1.66 10x10 tiled rectangle (216x208 tile)
+ 1.00 1.00 1.00 1.00 1.00 100x100 tiled rectangle (216x208 tile)
+ 1.00 1.00 1.00 1.00 1.00 500x500 tiled rectangle (216x208 tile)
+ 1.82 1.70 1.00 1.00 3.38 1-pixel line segment
+ 2.07 1.56 0.90 1.00 3.31 10-pixel line segment
+ 1.29 1.10 1.00 1.00 1.27 100-pixel line segment
+ 1.05 1.06 1.03 1.03 1.09 500-pixel line segment
+ 1.30 1.13 1.00 1.00 1.29 100-pixel line segment (1 kid)
+ 1.32 1.15 1.00 1.00 1.32 100-pixel line segment (2 kids)
+ 1.33 1.16 1.00 1.00 1.33 100-pixel line segment (3 kids)
+ 1.92 1.64 1.00 1.00 3.73 10-pixel dashed segment
+ 1.34 1.16 1.00 1.00 1.34 100-pixel dashed segment
+ 1.24 1.11 0.99 0.97 1.23 100-pixel double-dashed segment
+ 1.72 1.77 1.00 1.00 3.25 10-pixel horizontal line segment
+ 1.83 1.66 1.01 1.00 3.54 100-pixel horizontal line segment
+ 1.86 1.30 1.00 1.00 1.84 500-pixel horizontal line segment
+ 2.11 1.52 1.00 0.99 3.02 10-pixel vertical line segment
+ 1.21 1.10 1.00 1.00 1.20 100-pixel vertical line segment
+ 1.03 1.03 1.00 1.00 1.02 500-pixel vertical line segment
+ 4.42 1.68 1.00 1.01 4.64 10x1 wide horizontal line segment
+ 1.83 1.31 1.00 1.00 1.83 100x10 wide horizontal line segment
+ 1.07 1.00 0.96 1.00 1.07 500x50 wide horizontal line segment
+ 4.10 1.67 1.00 1.00 4.62 10x1 wide vertical line segment
+ 1.50 1.24 1.06 1.06 1.48 100x10 wide vertical line segment
+ 1.06 1.03 1.00 1.00 1.05 500x50 wide vertical line segment
+ 2.54 1.61 1.00 1.00 3.61 1-pixel line
+ 2.71 1.48 1.00 1.00 2.67 10-pixel line
+ 1.19 1.09 1.00 1.00 1.19 100-pixel line
+ 1.04 1.02 1.00 1.00 1.03 500-pixel line
+ 2.68 1.51 0.98 1.00 3.17 10-pixel dashed line
+ 1.23 1.11 0.99 0.99 1.23 100-pixel dashed line
+ 1.15 1.08 1.00 1.00 1.15 100-pixel double-dashed line
+ 2.27 1.39 1.00 1.00 2.23 10x1 wide line
+ 1.20 1.09 1.00 1.00 1.20 100x10 wide line
+ 1.04 1.02 1.00 1.00 1.04 500x50 wide line
+ 1.52 1.45 1.00 1.00 1.52 100x10 wide dashed line
+ 1.54 1.47 1.00 1.00 1.54 100x10 wide double-dashed line
+ 1.97 1.30 0.96 0.95 1.95 10x10 rectangle outline
+ 1.44 1.27 1.00 1.00 1.43 100x100 rectangle outline
+ 3.22 2.16 1.10 1.09 3.61 500x500 rectangle outline
+ 1.95 1.34 1.00 1.00 1.90 10x10 wide rectangle outline
+ 1.14 1.14 1.00 1.00 1.13 100x100 wide rectangle outline
+ 1.00 1.00 1.00 1.00 1.00 500x500 wide rectangle outline
+ 1.57 1.72 1.00 1.00 3.03 1-pixel circle
+ 1.96 1.35 1.00 1.00 1.92 10-pixel circle
+ 1.21 1.07 0.86 0.97 1.20 100-pixel circle
+ 1.08 1.04 1.00 1.00 1.08 500-pixel circle
+ 1.39 1.19 1.03 1.03 1.38 100-pixel dashed circle
+ 1.21 1.11 1.00 1.00 1.23 100-pixel double-dashed circle
+ 1.59 1.28 1.00 1.00 1.58 10-pixel wide circle
+ 1.22 1.12 0.99 1.00 1.22 100-pixel wide circle
+ 1.06 1.04 1.00 1.00 1.05 500-pixel wide circle
+ 1.87 1.84 1.00 1.00 1.85 100-pixel wide dashed circle
+ 1.90 1.93 1.01 1.01 1.90 100-pixel wide double-dashed circle
+ 2.13 1.43 1.00 1.00 2.32 10-pixel partial circle
+ 1.42 1.18 1.00 1.00 1.42 100-pixel partial circle
+ 1.92 1.85 1.01 1.01 1.89 10-pixel wide partial circle
+ 1.73 1.67 1.00 1.00 1.73 100-pixel wide partial circle
+ 1.36 1.95 1.00 1.00 2.64 1-pixel solid circle
+ 2.02 1.37 1.00 1.00 2.03 10-pixel solid circle
+ 1.19 1.09 1.00 1.00 1.19 100-pixel solid circle
+ 1.02 0.99 1.00 1.00 1.01 500-pixel solid circle
+ 1.74 1.28 1.00 0.88 1.73 10-pixel fill chord partial circle
+ 1.31 1.13 1.00 1.00 1.31 100-pixel fill chord partial circle
+ 1.67 1.31 1.03 1.03 1.72 10-pixel fill slice partial circle
+ 1.30 1.13 1.00 1.00 1.28 100-pixel fill slice partial circle
+ 2.45 1.49 1.01 1.00 2.71 10-pixel ellipse
+ 1.22 1.10 1.00 1.00 1.22 100-pixel ellipse
+ 1.09 1.04 1.00 1.00 1.09 500-pixel ellipse
+ 1.90 1.28 1.00 1.00 1.89 100-pixel dashed ellipse
+ 1.62 1.24 0.96 0.97 1.61 100-pixel double-dashed ellipse
+ 2.43 1.50 1.00 1.00 2.42 10-pixel wide ellipse
+ 1.61 1.28 1.03 1.03 1.60 100-pixel wide ellipse
+ 1.08 1.05 1.00 1.00 1.08 500-pixel wide ellipse
+ 1.93 1.88 1.00 1.00 1.88 100-pixel wide dashed ellipse
+ 1.94 1.89 1.01 1.00 1.94 100-pixel wide double-dashed ellipse
+ 2.31 1.48 1.00 1.00 2.67 10-pixel partial ellipse
+ 1.38 1.17 1.00 1.00 1.38 100-pixel partial ellipse
+ 2.00 1.85 0.98 0.97 1.98 10-pixel wide partial ellipse
+ 1.89 1.86 1.00 1.00 1.89 100-pixel wide partial ellipse
+ 3.49 1.60 1.00 1.00 3.65 10-pixel filled ellipse
+ 1.67 1.26 1.00 1.00 1.67 100-pixel filled ellipse
+ 1.06 1.04 1.00 1.00 1.06 500-pixel filled ellipse
+ 2.38 1.43 1.01 1.00 2.32 10-pixel fill chord partial ellipse
+ 2.06 1.30 1.00 1.00 2.05 100-pixel fill chord partial ellipse
+ 2.27 1.41 1.00 1.00 2.27 10-pixel fill slice partial ellipse
+ 1.98 1.33 1.00 0.97 1.97 100-pixel fill slice partial ellipse
+ 57.46 1.99 1.01 1.00 114.92 Fill 1x1 equivalent triangle
+ 56.94 1.98 1.01 1.00 73.89 Fill 10x10 equivalent triangle
+ 6.07 1.75 1.00 1.00 6.07 Fill 100x100 equivalent triangle
+ 51.12 1.98 1.00 1.00 102.81 Fill 1x1 trapezoid
+ 51.42 1.82 1.01 1.00 94.89 Fill 10x10 trapezoid
+ 6.47 1.80 1.00 1.00 6.44 Fill 100x100 trapezoid
+ 1.56 1.28 1.00 0.99 1.56 Fill 300x300 trapezoid
+ 51.27 1.97 0.96 0.97 102.54 Fill 1x1 stippled trapezoid (8x8 stipple)
+ 51.73 2.00 1.02 1.02 67.92 Fill 10x10 stippled trapezoid (8x8 stipple)
+ 5.36 1.72 1.00 1.00 5.36 Fill 100x100 stippled trapezoid (8x8 stipple)
+ 1.54 1.26 1.00 1.00 1.59 Fill 300x300 stippled trapezoid (8x8 stipple)
+ 51.41 1.94 1.01 1.00 102.82 Fill 1x1 opaque stippled trapezoid (8x8 stipple)
+ 50.71 1.95 0.99 1.00 65.44 Fill 10x10 opaque stippled trapezoid (8x8...
+ 5.33 1.73 1.00 1.00 5.36 Fill 100x100 opaque stippled trapezoid (8x8...
+ 1.58 1.25 1.00 1.00 1.58 Fill 300x300 opaque stippled trapezoid (8x8...
+ 51.56 1.96 0.99 0.90 103.68 Fill 1x1 tiled trapezoid (4x4 tile)
+ 51.59 1.99 1.01 1.01 62.25 Fill 10x10 tiled trapezoid (4x4 tile)
+ 5.38 1.72 1.00 1.00 5.38 Fill 100x100 tiled trapezoid (4x4 tile)
+ 1.54 1.25 1.00 0.99 1.58 Fill 300x300 tiled trapezoid (4x4 tile)
+ 51.70 1.98 1.01 1.01 103.98 Fill 1x1 stippled trapezoid (17x15 stipple)
+ 44.86 1.97 1.00 1.00 44.86 Fill 10x10 stippled trapezoid (17x15 stipple)
+ 2.74 1.56 1.00 1.00 2.73 Fill 100x100 stippled trapezoid (17x15 stipple)
+ 1.29 1.14 1.00 1.00 1.27 Fill 300x300 stippled trapezoid (17x15 stipple)
+ 51.41 1.96 0.96 0.95 103.39 Fill 1x1 opaque stippled trapezoid (17x15...
+ 45.14 1.96 1.01 1.00 45.14 Fill 10x10 opaque stippled trapezoid (17x15...
+ 2.68 1.56 1.00 1.00 2.68 Fill 100x100 opaque stippled trapezoid (17x15...
+ 1.26 1.10 1.00 1.00 1.28 Fill 300x300 opaque stippled trapezoid (17x15...
+ 51.13 1.97 1.00 0.99 103.39 Fill 1x1 tiled trapezoid (17x15 tile)
+ 47.58 1.96 1.00 1.00 47.86 Fill 10x10 tiled trapezoid (17x15 tile)
+ 2.74 1.56 1.00 1.00 2.74 Fill 100x100 tiled trapezoid (17x15 tile)
+ 1.29 1.14 1.00 1.00 1.28 Fill 300x300 tiled trapezoid (17x15 tile)
+ 51.13 1.97 0.99 0.97 103.39 Fill 1x1 stippled trapezoid (161x145 stipple)
+ 45.14 1.97 1.00 1.00 44.29 Fill 10x10 stippled trapezoid (161x145 stipple)
+ 3.02 1.77 1.12 1.12 3.38 Fill 100x100 stippled trapezoid (161x145 stipple)
+ 1.31 1.13 1.00 1.00 1.30 Fill 300x300 stippled trapezoid (161x145 stipple)
+ 51.27 1.97 1.00 1.00 103.10 Fill 1x1 opaque stippled trapezoid (161x145...
+ 45.01 1.97 1.00 1.00 45.01 Fill 10x10 opaque stippled trapezoid (161x145...
+ 2.67 1.56 1.00 1.00 2.69 Fill 100x100 opaque stippled trapezoid (161x145..
+ 1.29 1.13 1.00 1.01 1.27 Fill 300x300 opaque stippled trapezoid (161x145..
+ 51.41 1.96 1.00 0.99 103.39 Fill 1x1 tiled trapezoid (161x145 tile)
+ 45.01 1.96 0.98 1.00 45.01 Fill 10x10 tiled trapezoid (161x145 tile)
+ 2.62 1.36 1.00 1.00 2.69 Fill 100x100 tiled trapezoid (161x145 tile)
+ 1.27 1.13 1.00 1.00 1.22 Fill 300x300 tiled trapezoid (161x145 tile)
+ 51.13 1.98 1.00 1.00 103.39 Fill 1x1 tiled trapezoid (216x208 tile)
+ 45.14 1.97 1.01 0.99 45.14 Fill 10x10 tiled trapezoid (216x208 tile)
+ 2.62 1.55 1.00 1.00 2.71 Fill 100x100 tiled trapezoid (216x208 tile)
+ 1.28 1.13 1.00 1.00 1.20 Fill 300x300 tiled trapezoid (216x208 tile)
+ 50.71 1.95 1.00 1.00 54.70 Fill 10x10 equivalent complex polygon
+ 5.51 1.71 0.96 0.98 5.47 Fill 100x100 equivalent complex polygons
+ 8.39 1.97 1.00 1.00 16.75 Fill 10x10 64-gon (Convex)
+ 8.38 1.83 1.00 1.00 8.43 Fill 100x100 64-gon (Convex)
+ 8.50 1.96 1.00 1.00 16.64 Fill 10x10 64-gon (Complex)
+ 8.26 1.83 1.00 1.00 8.35 Fill 100x100 64-gon (Complex)
+ 14.09 1.87 1.00 1.00 14.05 Char in 80-char line (6x13)
+ 11.91 1.87 1.00 1.00 11.95 Char in 70-char line (8x13)
+ 11.16 1.85 1.01 1.00 11.10 Char in 60-char line (9x15)
+ 10.09 1.78 1.00 1.00 10.09 Char16 in 40-char line (k14)
+ 6.15 1.75 1.00 1.00 6.31 Char16 in 23-char line (k24)
+ 11.92 1.90 1.03 1.03 11.88 Char in 80-char line (TR 10)
+ 8.18 1.78 1.00 0.99 8.17 Char in 30-char line (TR 24)
+ 42.83 1.44 1.01 1.00 42.11 Char in 20/40/20 line (6x13, TR 10)
+ 27.45 1.43 1.01 1.01 27.45 Char16 in 7/14/7 line (k14, k24)
+ 12.13 1.85 1.00 1.00 12.05 Char in 80-char image line (6x13)
+ 10.00 1.84 1.00 1.00 10.00 Char in 70-char image line (8x13)
+ 9.18 1.83 1.00 1.00 9.12 Char in 60-char image line (9x15)
+ 9.66 1.82 0.98 0.95 9.66 Char16 in 40-char image line (k14)
+ 5.82 1.72 1.00 1.00 5.99 Char16 in 23-char image line (k24)
+ 8.70 1.80 1.00 1.00 8.65 Char in 80-char image line (TR 10)
+ 4.67 1.66 1.00 1.00 4.67 Char in 30-char image line (TR 24)
+ 84.43 1.47 1.00 1.00 124.18 Scroll 10x10 pixels
+ 3.73 1.50 1.00 0.98 3.73 Scroll 100x100 pixels
+ 1.00 1.00 1.00 1.00 1.00 Scroll 500x500 pixels
+ 84.43 1.51 1.00 1.00 134.02 Copy 10x10 from window to window
+ 3.62 1.51 0.98 0.98 3.62 Copy 100x100 from window to window
+ 0.89 1.00 1.00 1.00 1.00 Copy 500x500 from window to window
+ 57.06 1.99 1.00 1.00 88.64 Copy 10x10 from pixmap to window
+ 2.49 2.00 1.00 1.00 2.48 Copy 100x100 from pixmap to window
+ 1.00 0.91 1.00 1.00 0.98 Copy 500x500 from pixmap to window
+ 2.04 1.01 1.00 1.00 2.03 Copy 10x10 from window to pixmap
+ 1.05 1.00 1.00 1.00 1.05 Copy 100x100 from window to pixmap
+ 1.00 1.00 0.93 1.00 1.04 Copy 500x500 from window to pixmap
+ 58.52 1.03 1.03 1.02 57.95 Copy 10x10 from pixmap to pixmap
+ 2.40 1.00 1.00 1.00 2.45 Copy 100x100 from pixmap to pixmap
+ 1.00 1.00 1.00 1.00 1.00 Copy 500x500 from pixmap to pixmap
+ 51.57 1.92 1.00 1.00 85.75 Copy 10x10 1-bit deep plane
+ 6.37 1.75 1.01 1.01 6.37 Copy 100x100 1-bit deep plane
+ 1.26 1.11 1.00 1.00 1.24 Copy 500x500 1-bit deep plane
+ 4.23 1.63 0.98 0.97 4.38 Copy 10x10 n-bit deep plane
+ 1.04 1.02 1.00 1.00 1.04 Copy 100x100 n-bit deep plane
+ 1.00 1.00 1.00 1.00 1.00 Copy 500x500 n-bit deep plane
+ 6.45 1.98 1.00 1.26 12.80 PutImage 10x10 square
+ 1.10 1.87 1.00 1.83 2.11 PutImage 100x100 square
+ 1.02 1.93 1.00 1.91 1.91 PutImage 500x500 square
+ 4.17 1.78 1.00 1.40 7.18 PutImage XY 10x10 square
+ 1.27 1.49 0.97 1.48 2.10 PutImage XY 100x100 square
+ 1.00 1.50 1.00 1.50 1.52 PutImage XY 500x500 square
+ 1.07 1.01 1.00 1.00 1.06 GetImage 10x10 square
+ 1.01 1.00 1.00 1.00 1.01 GetImage 100x100 square
+ 1.00 1.00 1.00 1.00 1.00 GetImage 500x500 square
+ 1.56 1.00 0.99 0.97 1.56 GetImage XY 10x10 square
+ 1.02 1.00 1.00 1.00 1.02 GetImage XY 100x100 square
+ 1.00 1.00 1.00 1.00 1.00 GetImage XY 500x500 square
+ 1.00 1.00 1.01 0.98 0.95 X protocol NoOperation
+ 1.02 1.03 1.04 1.03 1.00 QueryPointer
+ 1.03 1.02 1.04 1.03 1.00 GetProperty
+ 100.41 1.51 1.00 1.00 198.76 Change graphics context
+ 45.81 1.00 0.99 0.97 57.10 Create and map subwindows (4 kids)
+ 78.45 1.01 1.02 1.02 63.07 Create and map subwindows (16 kids)
+ 73.91 1.01 1.00 1.00 56.37 Create and map subwindows (25 kids)
+ 73.22 1.00 1.00 1.00 49.07 Create and map subwindows (50 kids)
+ 72.36 1.01 0.99 1.00 32.14 Create and map subwindows (75 kids)
+ 70.34 1.00 1.00 1.00 30.12 Create and map subwindows (100 kids)
+ 55.00 1.00 1.00 0.99 23.75 Create and map subwindows (200 kids)
+ 55.30 1.01 1.00 1.00 141.03 Create unmapped window (4 kids)
+ 55.38 1.01 1.01 1.00 163.25 Create unmapped window (16 kids)
+ 54.75 0.96 1.00 0.99 166.95 Create unmapped window (25 kids)
+ 54.83 1.00 1.00 0.99 178.81 Create unmapped window (50 kids)
+ 55.38 1.01 1.01 1.00 181.20 Create unmapped window (75 kids)
+ 55.38 1.01 1.01 1.00 181.20 Create unmapped window (100 kids)
+ 54.87 1.01 1.01 1.00 182.05 Create unmapped window (200 kids)
+ 28.13 1.00 1.00 1.00 30.75 Map window via parent (4 kids)
+ 36.14 1.01 1.01 1.01 32.58 Map window via parent (16 kids)
+ 26.13 1.00 0.98 0.95 29.85 Map window via parent (25 kids)
+ 40.07 1.00 1.01 1.00 27.57 Map window via parent (50 kids)
+ 23.26 0.99 1.00 1.00 18.23 Map window via parent (75 kids)
+ 22.91 0.99 1.00 0.99 16.52 Map window via parent (100 kids)
+ 27.79 1.00 1.00 0.99 12.50 Map window via parent (200 kids)
+ 22.35 1.00 1.00 1.00 56.19 Unmap window via parent (4 kids)
+ 9.57 1.00 0.99 1.00 89.78 Unmap window via parent (16 kids)
+ 80.77 1.01 1.00 1.00 103.85 Unmap window via parent (25 kids)
+ 96.34 1.00 1.00 1.00 116.06 Unmap window via parent (50 kids)
+ 99.72 1.00 1.00 1.00 124.93 Unmap window via parent (75 kids)
+ 112.36 1.00 1.00 1.00 125.27 Unmap window via parent (100 kids)
+ 105.41 1.00 1.00 0.99 120.00 Unmap window via parent (200 kids)
+ 51.29 1.03 1.02 1.02 74.19 Destroy window via parent (4 kids)
+ 86.75 0.99 0.99 0.99 116.87 Destroy window via parent (16 kids)
+ 106.43 1.01 1.01 1.01 127.49 Destroy window via parent (25 kids)
+ 120.34 1.01 1.01 1.00 140.11 Destroy window via parent (50 kids)
+ 126.67 1.00 0.99 0.99 145.00 Destroy window via parent (75 kids)
+ 126.11 1.01 1.01 1.00 140.56 Destroy window via parent (100 kids)
+ 128.57 1.01 1.00 1.00 137.91 Destroy window via parent (200 kids)
+ 16.04 0.88 1.00 1.00 20.36 Hide/expose window via popup (4 kids)
+ 19.04 1.01 1.00 1.00 23.48 Hide/expose window via popup (16 kids)
+ 19.22 1.00 1.00 1.00 20.44 Hide/expose window via popup (25 kids)
+ 17.41 1.00 0.91 0.97 17.68 Hide/expose window via popup (50 kids)
+ 17.29 1.01 1.00 1.01 17.07 Hide/expose window via popup (75 kids)
+ 16.74 1.00 1.00 1.00 16.17 Hide/expose window via popup (100 kids)
+ 10.30 1.00 1.00 1.00 10.51 Hide/expose window via popup (200 kids)
+ 16.48 1.01 1.00 1.00 26.05 Move window (4 kids)
+ 17.01 0.95 1.00 1.00 23.97 Move window (16 kids)
+ 16.95 1.00 1.00 1.00 22.90 Move window (25 kids)
+ 16.05 1.01 1.00 1.00 21.32 Move window (50 kids)
+ 15.58 1.00 0.98 0.98 19.44 Move window (75 kids)
+ 14.98 1.02 1.03 1.03 18.17 Move window (100 kids)
+ 10.90 1.01 1.01 1.00 12.68 Move window (200 kids)
+ 49.42 1.00 1.00 1.00 198.27 Moved unmapped window (4 kids)
+ 50.72 0.97 1.00 1.00 193.66 Moved unmapped window (16 kids)
+ 50.87 1.00 0.99 1.00 195.09 Moved unmapped window (25 kids)
+ 50.72 1.00 1.00 1.00 189.34 Moved unmapped window (50 kids)
+ 50.87 1.00 1.00 1.00 191.33 Moved unmapped window (75 kids)
+ 50.87 1.00 1.00 0.90 186.71 Moved unmapped window (100 kids)
+ 50.87 1.00 1.00 1.00 179.19 Moved unmapped window (200 kids)
+ 41.04 1.00 1.00 1.00 56.61 Move window via parent (4 kids)
+ 69.81 1.00 1.00 1.00 130.82 Move window via parent (16 kids)
+ 95.81 1.00 1.00 1.00 141.92 Move window via parent (25 kids)
+ 95.98 1.00 1.00 1.00 149.43 Move window via parent (50 kids)
+ 96.59 1.01 1.01 1.00 153.98 Move window via parent (75 kids)
+ 97.19 1.00 1.00 1.00 157.30 Move window via parent (100 kids)
+ 96.67 1.00 0.99 0.96 159.44 Move window via parent (200 kids)
+ 17.75 1.01 1.00 1.00 27.61 Resize window (4 kids)
+ 17.94 1.00 1.00 0.99 25.42 Resize window (16 kids)
+ 17.92 1.01 1.00 1.00 24.47 Resize window (25 kids)
+ 17.24 0.97 1.00 1.00 24.14 Resize window (50 kids)
+ 16.81 1.00 1.00 0.99 22.75 Resize window (75 kids)
+ 16.08 1.00 1.00 1.00 21.20 Resize window (100 kids)
+ 12.92 1.00 0.99 1.00 16.26 Resize window (200 kids)
+ 52.94 1.01 1.00 1.00 327.12 Resize unmapped window (4 kids)
+ 53.60 1.01 1.01 1.01 333.71 Resize unmapped window (16 kids)
+ 52.99 1.00 1.00 1.00 337.29 Resize unmapped window (25 kids)
+ 51.98 1.00 1.00 1.00 329.38 Resize unmapped window (50 kids)
+ 53.05 0.89 1.00 1.00 322.60 Resize unmapped window (75 kids)
+ 53.05 1.00 1.00 1.00 318.08 Resize unmapped window (100 kids)
+ 53.11 1.00 1.00 0.99 306.21 Resize unmapped window (200 kids)
+ 16.76 1.00 0.96 1.00 19.46 Circulate window (4 kids)
+ 17.24 1.00 1.00 0.97 16.24 Circulate window (16 kids)
+ 16.30 1.03 1.03 1.03 15.85 Circulate window (25 kids)
+ 13.45 1.00 1.00 1.00 14.90 Circulate window (50 kids)
+ 12.91 1.00 1.00 1.00 13.06 Circulate window (75 kids)
+ 11.30 0.98 1.00 1.00 11.03 Circulate window (100 kids)
+ 7.58 1.01 1.01 0.99 7.47 Circulate window (200 kids)
+ 1.01 1.01 0.98 1.00 0.95 Circulate Unmapped window (4 kids)
+ 1.07 1.07 1.01 1.07 1.02 Circulate Unmapped window (16 kids)
+ 1.04 1.09 1.06 1.05 0.97 Circulate Unmapped window (25 kids)
+ 1.04 1.23 1.20 1.18 1.05 Circulate Unmapped window (50 kids)
+ 1.18 1.53 1.19 1.45 1.24 Circulate Unmapped window (75 kids)
+ 1.08 1.02 1.01 1.74 1.01 Circulate Unmapped window (100 kids)
+ 1.01 1.12 0.98 0.91 0.97 Circulate Unmapped window (200 kids)
+
+ Profiling with OProfile
+
+ OProfile (available from http://oprofile.sourceforge.net/) is a
+ system-wide profiler for Linux systems that uses processor-level counters
+ to collect sampling data. OProfile can provide information that is similar
+ to that provided by gprof, but without the necessity of recompiling the
+ program with special instrumentation (i.e., OProfile can collect
+ statistical profiling information about optimized programs). A test
+ harness was developed to collect OProfile data for each x11perf test
+ individually.
+
+ Test runs were performed using the RETIRED_INSNS counter on the AMD Athlon
+ and the CPU_CLK_HALTED counter on the Intel Pentium III (with a test
+ configuration different from the one described above). We have examined
+ OProfile output and have compared it with gprof output. This investigation
+ has not produced results that yield performance increases in x11perf
+ numbers.
+
+ X Test Suite
+
+ The X Test Suite was run on the fully optimized DMX server using the
+ configuration described above. The following failures were noted:
+
+ XListPixmapFormats: Test 1 [1]
+ XChangeWindowAttributes: Test 32 [1]
+ XCreateWindow: Test 30 [1]
+ XFreeColors: Test 4 [3]
+ XCopyArea: Test 13, 17, 21, 25, 30 [2]
+ XCopyPlane: Test 11, 15, 27, 31 [2]
+ XSetFontPath: Test 4 [1]
+ XChangeKeyboardControl: Test 9, 10 [1]
+
+ [1] Previously documented errors expected from the Xinerama
+ implementation (see Phase I discussion).
+ [2] Newly noted errors that have been verified as expected
+ behavior of the Xinerama implementation.
+ [3] Newly noted error that has been verified as a Xinerama
+ implementation bug.
+
+ Phase III
+
+ During the third phase of development, support was provided for the
+ following extensions: SHAPE, RENDER, XKEYBOARD, XInput.
+
+ SHAPE
+
+ The SHAPE extension is supported. Test applications (e.g., xeyes and
+ oclock) and window managers that make use of the SHAPE extension will work
+ as expected.
+
+ RENDER
+
+ The RENDER extension is supported. The version included in the DMX CVS
+ tree is version 0.2, and this version is fully supported by Xdmx.
+ Applications using only version 0.2 functions will work correctly;
+ however, some apps that make use of functions from later versions do not
+ properly check the extension's major/minor version numbers. These apps
+ will fail with a Bad Implementation error when using post-version 0.2
+ functions. This is expected behavior. When the DMX CVS tree is updated to
+ include newer versions of RENDER, support for these newer functions will
+ be added to the DMX X server.
+
+ XKEYBOARD
+
+ The XKEYBOARD extension is supported. If present on the back-end X
+ servers, the XKEYBOARD extension will be used to obtain information about
+ the type of the keyboard for initialization. Otherwise, the keyboard will
+ be initialized using defaults. Note that this departs from older behavior:
+ when Xdmx is compiled without XKEYBOARD support, the map from the back-end
+ X server will be preserved. With XKEYBOARD support, the map is not
+ preserved because better information and control of the keyboard is
+ available.
+
+ XInput
+
+ The XInput extension is supported. Any device can be used as a core device
+ and be used as an XInput extension device, with the exception of core
+ devices on the back-end servers. This limitation is present because cursor
+ handling on the back-end requires that the back-end cursor sometimes track
+ the Xdmx core cursor -- behavior that is incompatible with using the
+ back-end pointer as a non-core device.
+
+ Currently, back-end extension devices are not available as Xdmx extension
+ devices, but this limitation should be removed in the future.
+
+ To demonstrate the XInput extension, and to provide more examples for
+ low-level input device driver writers, USB device drivers have been
+ written for mice (usb-mou), keyboards (usb-kbd), and
+ non-mouse/non-keyboard USB devices (usb-oth). Please see the man page for
+ information on Linux kernel drivers that are required for using these Xdmx
+ drivers.
+
+ DPMS
+
+ The DPMS extension is exported but does not do anything at this time.
+
+ Other Extensions
+
+ The LBX, SECURITY, XC-APPGROUP, and XFree86-Bigfont extensions do not
+ require any special Xdmx support and have been exported.
+
+ The BIG-REQUESTS, DEC-XTRAP, DOUBLE-BUFFER, Extended-Visual-Information,
+ FontCache, GLX, MIT-SCREEN-SAVER, MIT-SHM, MIT-SUNDRY-NONSTANDARD, RECORD,
+ SECURITY, SGI-GLX, SYNC, TOG-CUP, X-Resource, XC-MISC, XFree86-DGA,
+ XFree86-DRI, XFree86-Misc, XFree86-VidModeExtension, and XVideo extensions
+ are not supported at this time, but will be evaluated for inclusion in
+ future DMX releases. See below for additional work on extensions after
+ Phase III.
+
+ Phase IV
+
+ Moving to XFree86 4.3.0
+
+ For Phase IV, the recent release of XFree86 4.3.0 (27 February 2003) was
+ merged onto the dmx.sourceforge.net CVS trunk and all work is proceeding
+ using this tree.
+
+ Extensions
+
+ XC-MISC (supported)
+
+ XC-MISC is used internally by the X library to recycle XIDs from the X
+ server. This is important for long-running X server sessions. Xdmx
+ supports this extension. The X Test Suite passed and failed the exact same
+ tests before and after this extension was enabled.
+
+ Extended-Visual-Information (supported)
+
+ The Extended-Visual-Information extension provides a method for an X
+ client to obtain detailed visual information. Xdmx supports this
+ extension. It was tested using the hw/dmx/examples/evi example program.
+ Note that this extension is not Xinerama-aware -- it will return visual
+ information for each screen even though Xinerama is causing the X server
+ to export a single logical screen.
+
+ RES (supported)
+
+ The X-Resource extension provides a mechanism for a client to obtain
+ detailed information about the resources used by other clients. This
+ extension was tested with the hw/dmx/examples/res program. The X Test
+ Suite passed and failed the exact same tests before and after this
+ extension was enabled.
+
+ BIG-REQUESTS (supported)
+
+ This extension enables the X11 protocol to handle requests longer than
+ 262140 bytes. The X Test Suite passed and failed the exact same tests
+ before and after this extension was enabled.
+
+ XSYNC (supported)
+
+ This extension provides facilities for two different X clients to
+ synchronize their requests. This extension was minimally tested with
+ xdpyinfo and the X Test Suite passed and failed the exact same tests
+ before and after this extension was enabled.
+
+ XTEST, RECORD, DEC-XTRAP (supported) and XTestExtension1 (not supported)
+
+ The XTEST and RECORD extension were developed by the X Consortium for use
+ in the X Test Suite and are supported as a standard in the X11R6 tree.
+ They are also supported in Xdmx. When X Test Suite tests that make use of
+ the XTEST extension are run, Xdmx passes and fails exactly the same tests
+ as does a standard XFree86 X server. When the rcrdtest test (a part of the
+ X Test Suite that verifies the RECORD extension) is run, Xdmx passes and
+ fails exactly the same tests as does a standard XFree86 X server.
+
+ There are two older XTEST-like extensions: DEC-XTRAP and XTestExtension1.
+ The XTestExtension1 extension was developed for use by the X Testing
+ Consortium for use with a test suite that eventually became (part of?) the
+ X Test Suite. Unlike XTEST, which only allows events to be sent to the
+ server, the XTestExtension1 extension also allowed events to be recorded
+ (similar to the RECORD extension). The second is the DEC-XTRAP extension
+ that was developed by the Digital Equipment Corporation.
+
+ The DEC-XTRAP extension is available from Xdmx and has been tested with
+ the xtrap* tools which are distributed as standard X11R6 clients.
+
+ The XTestExtension1 is not supported because it does not appear to be used
+ by any modern X clients (the few that support it also support XTEST) and
+ because there are no good methods available for testing that it functions
+ correctly (unlike XTEST and DEC-XTRAP, the code for XTestExtension1 is not
+ part of the standard X server source tree, so additional testing is
+ important).
+
+ Most of these extensions are documented in the X11R6 source tree. Further,
+ several original papers exist that this author was unable to locate -- for
+ completeness and historical interest, citations are provide:
+
+ XRECORD Martha Zimet. Extending X For Recording. 8th Annual X
+ Technical Conference Boston, MA January 24-26, 1994.
+ DEC-XTRAP Dick Annicchiarico, Robert Chesler, Alan Jamison. XTrap
+ Architecture. Digital Equipment Corporation, July 1991.
+ XTestExtension1 Larry Woestman. X11 Input Synthesis Extension Proposal.
+ Hewlett Packard, November 1991.
+
+ MIT-MISC (not supported)
+
+ The MIT-MISC extension is used to control a bug-compatibility flag that
+ provides compatibility with xterm programs from X11R1 and X11R2. There
+ does not appear to be a single client available that makes use of this
+ extension and there is not way to verify that it works correctly. The Xdmx
+ server does not support MIT-MISC.
+
+ SCREENSAVER (not supported)
+
+ This extension provides special support for the X screen saver. It was
+ tested with beforelight, which appears to be the only client that works
+ with it. When Xinerama was not active, beforelight behaved as expected.
+ However, when Xinerama was active, beforelight did not behave as expected.
+ Further, when this extension is not active, xscreensaver (a widely-used X
+ screen saver program) did not behave as expected. Since this extension is
+ not Xinerama-aware and is not commonly used with expected results by
+ clients, we have left this extension disabled at this time.
+
+ GLX (supported)
+
+ The GLX extension provides OpenGL and GLX windowing support. In Xdmx, the
+ extension is called glxProxy, and it is Xinerama aware. It works by either
+ feeding requests forward through Xdmx to each of the back-end servers or
+ handling them locally. All rendering requests are handled on the back-end
+ X servers. This code was donated to the DMX project by SGI. For the X Test
+ Suite results comparison, see below.
+
+ RENDER (supported)
+
+ The X Rendering Extension (RENDER) provides support for digital image
+ composition. Geometric and text rendering are supported. RENDER is
+ partially Xinerama-aware, with text and the most basic compositing
+ operator; however, its higher level primitives (triangles, triangle
+ strips, and triangle fans) are not yet Xinerama-aware. The RENDER
+ extension is still under development, and is currently at version 0.8.
+ Additional support will be required in DMX as more primitives and/or
+ requests are added to the extension.
+
+ There is currently no test suite for the X Rendering Extension; however,
+ there has been discussion of developing a test suite as the extension
+ matures. When that test suite becomes available, additional testing can be
+ performed with Xdmx. The X Test Suite passed and failed the exact same
+ tests before and after this extension was enabled.
+
+ Summary
+
+ To summarize, the following extensions are currently supported:
+ BIG-REQUESTS, DEC-XTRAP, DMX, DPMS, Extended-Visual-Information, GLX, LBX,
+ RECORD, RENDER, SECURITY, SHAPE, SYNC, X-Resource, XC-APPGROUP, XC-MISC,
+ XFree86-Bigfont, XINERAMA, XInputExtension, XKEYBOARD, and XTEST.
+
+ The following extensions are not supported at this time: DOUBLE-BUFFER,
+ FontCache, MIT-SCREEN-SAVER, MIT-SHM, MIT-SUNDRY-NONSTANDARD, TOG-CUP,
+ XFree86-DGA, XFree86-Misc, XFree86-VidModeExtension, XTestExtensionExt1,
+ and XVideo.
+
+ Additional Testing with the X Test Suite
+
+ XFree86 without XTEST
+
+ After the release of XFree86 4.3.0, we retested the XFree86 X server with
+ and without using the XTEST extension. When the XTEST extension was not
+ used for testing, the XFree86 4.3.0 server running on our usual test
+ system with a Radeon VE card reported unexpected failures in the following
+ tests:
+
+ XListPixmapFormats: Test 1
+ XChangeKeyboardControl: Tests 9, 10
+ XGetDefault: Test 5
+ XRebindKeysym: Test 1
+
+ XFree86 with XTEST
+
+ When using the XTEST extension, the XFree86 4.3.0 server reported the
+ following errors:
+
+ XListPixmapFormats: Test 1
+ XChangeKeyboardControl: Tests 9, 10
+ XGetDefault: Test 5
+ XRebindKeysym: Test 1
+
+ XAllowEvents: Tests 20, 21, 24
+ XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+ XGrabKey: Test 8
+ XSetPointerMapping: Test 3
+ XUngrabButton: Test 4
+
+ While these errors may be important, they will probably be fixed
+ eventually in the XFree86 source tree. We are particularly interested in
+ demonstrating that the Xdmx server does not introduce additional failures
+ that are not known Xinerama failures.
+
+ Xdmx with XTEST, without Xinerama, without GLX
+
+ Without Xinerama, but using the XTEST extension, the following errors were
+ reported from Xdmx (note that these are the same as for the XFree86 4.3.0,
+ except that XGetDefault no longer fails):
+
+ XListPixmapFormats: Test 1
+ XChangeKeyboardControl: Tests 9, 10
+ XRebindKeysym: Test 1
+
+ XAllowEvents: Tests 20, 21, 24
+ XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+ XGrabKey: Test 8
+ XSetPointerMapping: Test 3
+ XUngrabButton: Test 4
+
+ Xdmx with XTEST, with Xinerama, without GLX
+
+ With Xinerama, using the XTEST extension, the following errors were
+ reported from Xdmx:
+
+ XListPixmapFormats: Test 1
+ XChangeKeyboardControl: Tests 9, 10
+ XRebindKeysym: Test 1
+
+ XAllowEvents: Tests 20, 21, 24
+ XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+ XGrabKey: Test 8
+ XSetPointerMapping: Test 3
+ XUngrabButton: Test 4
+
+ XCopyPlane: Tests 13, 22, 31 (well-known XTEST/Xinerama interaction issue)
+ XDrawLine: Test 67
+ XDrawLines: Test 91
+ XDrawSegments: Test 68
+
+ Note that the first two sets of errors are the same as for the XFree86
+ 4.3.0 server, and that the XCopyPlane error is a well-known error
+ resulting from an XTEST/Xinerama interaction when the request crosses a
+ screen boundary. The XDraw* errors are resolved when the tests are run
+ individually and they do not cross a screen boundary. We will investigate
+ these errors further to determine their cause.
+
+ Xdmx with XTEST, with Xinerama, with GLX
+
+ With GLX enabled, using the XTEST extension, the following errors were
+ reported from Xdmx (these results are from early during the Phase IV
+ development, but were confirmed with a late Phase IV snapshot):
+
+ XListPixmapFormats: Test 1
+ XChangeKeyboardControl: Tests 9, 10
+ XRebindKeysym: Test 1
+
+ XAllowEvents: Tests 20, 21, 24
+ XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+ XGrabKey: Test 8
+ XSetPointerMapping: Test 3
+ XUngrabButton: Test 4
+
+ XClearArea: Test 8
+ XCopyArea: Tests 4, 5, 11, 14, 17, 23, 25, 27, 30
+ XCopyPlane: Tests 6, 7, 10, 19, 22, 31
+ XDrawArcs: Tests 89, 100, 102
+ XDrawLine: Test 67
+ XDrawSegments: Test 68
+
+ Note that the first two sets of errors are the same as for the XFree86
+ 4.3.0 server, and that the third set has different failures than when Xdmx
+ does not include GLX support. Since the GLX extension adds new visuals to
+ support GLX's visual configs and the X Test Suite runs tests over the
+ entire set of visuals, additional rendering tests were run and presumably
+ more of them crossed a screen boundary. This conclusion is supported by
+ the fact that nearly all of the rendering errors reported are resolved
+ when the tests are run individually and they do no cross a screen
+ boundary.
+
+ Further, when hardware rendering is disabled on the back-end displays,
+ many of the errors in the third set are eliminated, leaving only:
+
+ XClearArea: Test 8
+ XCopyArea: Test 4, 5, 11, 14, 17, 23, 25, 27, 30
+ XCopyPlane: Test 6, 7, 10, 19, 22, 31
+
+ Conclusion
+
+ We conclude that all of the X Test Suite errors reported for Xdmx are the
+ result of errors in the back-end X server or the Xinerama implementation.
+ Further, all of these errors that can be reasonably fixed at the Xdmx
+ layer have been. (Where appropriate, we have submitted patches to the
+ XFree86 and Xinerama upstream maintainers.)
+
+ Dynamic Reconfiguration
+
+ During this development phase, dynamic reconfiguration support was added
+ to DMX. This support allows an application to change the position and
+ offset of a back-end server's screen. For example, if the application
+ would like to shift a screen slightly to the left, it could query Xdmx for
+ the screen's <x,y> position and then dynamically reconfigure that screen
+ to be at position <x+10,y>. When a screen is dynamically reconfigured,
+ input handling and a screen's root window dimensions are adjusted as
+ needed. These adjustments are transparent to the user.
+
+ Dynamic reconfiguration extension
+
+ The application interface to DMX's dynamic reconfiguration is through a
+ function in the DMX extension library:
+
+ Bool DMXReconfigureScreen(Display *dpy, int screen, int x, int y)
+
+ where dpy is DMX server's display, screen is the number of the screen to
+ be reconfigured, and x and y are the new upper, left-hand coordinates of
+ the screen to be reconfigured.
+
+ The coordinates are not limited other than as required by the X protocol,
+ which limits all coordinates to a signed 16 bit number. In addition, all
+ coordinates within a screen must also be legal values. Therefore, setting
+ a screen's upper, left-hand coordinates such that the right or bottom
+ edges of the screen is greater than 32,767 is illegal.
+
+ Bounding box
+
+ When the Xdmx server is started, a bounding box is calculated from the
+ screens' layout given either on the command line or in the configuration
+ file. This bounding box is currently fixed for the lifetime of the Xdmx
+ server.
+
+ While it is possible to move a screen outside of the bounding box, it is
+ currently not possible to change the dimensions of the bounding box. For
+ example, it is possible to specify coordinates of <-100,-100> for the
+ upper, left-hand corner of the bounding box, which was previously at
+ coordinates <0,0>. As expected, the screen is moved down and to the right;
+ however, since the bounding box is fixed, the left side and upper portions
+ of the screen exposed by the reconfiguration are no longer accessible on
+ that screen. Those inaccessible regions are filled with black.
+
+ This fixed bounding box limitation will be addressed in a future
+ development phase.
+
+ Sample applications
+
+ An example of where this extension is useful is in setting up a video
+ wall. It is not always possible to get everything perfectly aligned, and
+ sometimes the positions are changed (e.g., someone might bump into a
+ projector). Instead of physically moving projectors or monitors, it is now
+ possible to adjust the positions of the back-end server's screens using
+ the dynamic reconfiguration support in DMX.
+
+ Other applications, such as automatic setup and calibration tools, can
+ make use of dynamic reconfiguration to correct for projector alignment
+ problems, as long as the projectors are still arranged rectilinearly.
+ Horizontal and vertical keystone correction could be applied to projectors
+ to correct for non-rectilinear alignment problems; however, this must be
+ done external to Xdmx.
+
+ A sample test program is included in the DMX server's examples directory
+ to demonstrate the interface and how an application might use dynamic
+ reconfiguration. See dmxreconfig.c for details.
+
+ Additional notes
+
+ In the original development plan, Phase IV was primarily devoted to adding
+ OpenGL support to DMX; however, SGI became interested in the DMX project
+ and developed code to support OpenGL/GLX. This code was later donated to
+ the DMX project and integrated into the DMX code base, which freed the DMX
+ developers to concentrate on dynamic reconfiguration (as described above).
+
+ Doxygen documentation
+
+ Doxygen is an open-source (GPL) documentation system for generating
+ browseable documentation from stylized comments in the source code. We
+ have placed all of the Xdmx server and DMX protocol source code files
+ under Doxygen so that comprehensive documentation for the Xdmx source code
+ is available in an easily browseable format.
+
+ Valgrind
+
+ Valgrind, an open-source (GPL) memory debugger for Linux, was used to
+ search for memory management errors. Several memory leaks were detected
+ and repaired. The following errors were not addressed:
+
+ 1. When the X11 transport layer sends a reply to the client, only those
+ fields that are required by the protocol are filled in -- unused
+ fields are left as uninitialized memory and are therefore noted by
+ valgrind. These instances are not errors and were not repaired.
+
+ 2. At each server generation, glxInitVisuals allocates memory that is
+ never freed. The amount of memory lost each generation approximately
+ equal to 128 bytes for each back-end visual. Because the code involved
+ is automatically generated, this bug has not been fixed and will be
+ referred to SGI.
+
+ 3. At each server generation, dmxRealizeFont calls XLoadQueryFont, which
+ allocates a font structure that is not freed. dmxUnrealizeFont can
+ free the font structure for the first screen, but cannot free it for
+ the other screens since they are already closed by the time
+ dmxUnrealizeFont could free them. The amount of memory lost each
+ generation is approximately equal to 80 bytes per font per back-end.
+ When this bug is fixed in the the X server's device-independent (dix)
+ code, DMX will be able to properly free the memory allocated by
+ XLoadQueryFont.
+
+ RATS
+
+ RATS (Rough Auditing Tool for Security) is an open-source (GPL) security
+ analysis tool that scans source code for common security-related
+ programming errors (e.g., buffer overflows and TOCTOU races). RATS was
+ used to audit all of the code in the hw/dmx directory and all "High"
+ notations were checked manually. The code was either re-written to
+ eliminate the warning, or a comment containing "RATS" was inserted on the
+ line to indicate that a human had checked the code. Unrepaired warnings
+ are as follows:
+
+ 1. Fixed-size buffers are used in many areas, but code has been added to
+ protect against buffer overflows (e.g., XmuSnprint). The only
+ instances that have not yet been fixed are in config/xdmxconfig.c
+ (which is not part of the Xdmx server) and input/usb-common.c.
+
+ 2. vprintf and vfprintf are used in the logging routines. In general, all
+ uses of these functions (e.g., dmxLog) provide a constant format
+ string from a trusted source, so the use is relatively benign.
+
+ 3. glxProxy/glxscreens.c uses getenv and strcat. The use of these
+ functions is safe and will remain safe as long as ExtensionsString is
+ longer then GLXServerExtensions (ensuring this may not be ovious to
+ the casual programmer, but this is in automatically generated code, so
+ we hope that the generator enforces this constraint).
diff --git a/hw/dmx/doc/dmx.xml b/hw/dmx/doc/dmx.xml
new file mode 100644
index 0000000..8dbb7d8
--- /dev/null
+++ b/hw/dmx/doc/dmx.xml
@@ -0,0 +1,3430 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+
+<article>
+
+ <articleinfo>
+ <!-- Title information -->
+ <title>Distributed Multihead X design</title>
+ <authorgroup>
+ <author><firstname>Kevin E.</firstname><surname>Martin</surname></author>
+ <author><firstname>David H.</firstname><surname>Dawes</surname></author>
+ <author><firstname>Rickard E.</firstname><surname>Faith</surname></author>
+ </authorgroup>
+ <pubdate>29 June 2004 (created 25 July 2001)</pubdate>
+ <abstract><para>
+ This document covers the motivation, background, design, and
+ implementation of the distributed multihead X (DMX) system. It
+ is a living document and describes the current design and
+ implementation details of the DMX system. As the project
+ progresses, this document will be continually updated to reflect
+ the changes in the code and/or design. <emphasis remap="it">Copyright 2001 by VA
+ Linux Systems, Inc., Fremont, California. Copyright 2001-2004
+ by Red Hat, Inc., Raleigh, North Carolina</emphasis>
+ </para></abstract>
+ </articleinfo>
+
+<!-- Begin the document -->
+<sect1>
+<title>Introduction</title>
+
+<sect2>
+<title>The Distributed Multihead X Server</title>
+
+<para>Current Open Source multihead solutions are limited to a single
+physical machine. A single X server controls multiple display devices,
+which can be arranged as independent heads or unified into a single
+desktop (with Xinerama). These solutions are limited to the number of
+physical devices that can co-exist in a single machine (e.g., due to the
+number of AGP/PCI slots available for graphics cards). Thus, large
+tiled displays are not currently possible. The work described in this
+paper will eliminate the requirement that the display devices reside in
+the same physical machine. This will be accomplished by developing a
+front-end proxy X server that will control multiple back-end X servers
+that make up the large display.
+</para>
+
+<para>The overall structure of the distributed multihead X (DMX) project is
+as follows: A single front-end X server will act as a proxy to a set of
+back-end X servers, which handle all of the visible rendering. X
+clients will connect to the front-end server just as they normally would
+to a regular X server. The front-end server will present an abstracted
+view to the client of a single large display. This will ensure that all
+standard X clients will continue to operate without modification
+(limited, as always, by the visuals and extensions provided by the X
+server). Clients that are DMX-aware will be able to use an extension to
+obtain information about the back-end servers (e.g., for placement of
+pop-up windows, window alignments by the window manager, etc.).
+</para>
+
+<para>The architecture of the DMX server is divided into two main sections:
+input (e.g., mouse and keyboard events) and output (e.g., rendering and
+windowing requests). Each of these are describe briefly below, and the
+rest of this design document will describe them in greater detail.
+</para>
+
+<para>The DMX server can receive input from three general types of input
+devices: "local" devices that are physically attached to the machine on
+which DMX is running, "backend" devices that are physically attached to
+one or more of the back-end X servers (and that generate events via the
+X protocol stream from the backend), and "console" devices that can be
+abstracted from any non-back-end X server. Backend and console devices
+are treated differently because the pointer device on the back-end X
+server also controls the location of the hardware X cursor. Full
+support for XInput extension devices is provided.
+</para>
+
+<para>Rendering requests will be accepted by the front-end server; however,
+rendering to visible windows will be broken down as needed and sent to
+the appropriate back-end server(s) via X11 library calls for actual
+rendering. The basic framework will follow a Xnest-style approach. GC
+state will be managed in the front-end server and sent to the
+appropriate back-end server(s) as required. Pixmap rendering will (at
+least initially) be handled by the front-end X server. Windowing
+requests (e.g., ordering, mapping, moving, etc.) will handled in the
+front-end server. If the request requires a visible change, the
+windowing operation will be translated into requests for the appropriate
+back-end server(s). Window state will be mirrored in the back-end
+server(s) as needed.
+</para>
+</sect2>
+
+<sect2>
+<title>Layout of Paper</title>
+
+<para>The next section describes the general development plan that was
+actually used for implementation. The final section discusses
+outstanding issues at the conclusion of development. The first appendix
+provides low-level technical detail that may be of interest to those
+intimately familiar with the X server architecture. The final appendix
+describes the four phases of development that were performed during the
+first two years of development.
+</para>
+
+<para>The final year of work was divided into 9 tasks that are not
+described in specific sections of this document. The major tasks during
+that time were the enhancement of the reconfiguration ability added in
+Phase IV, addition of support for a dynamic number of back-end displays
+(instead of a hard-coded limit), and the support for back-end display
+and input removal and addition. This work is mentioned in this paper,
+but is not covered in detail.
+</para>
+</sect2>
+</sect1>
+
+<!-- ============================================================ -->
+<sect1>
+<title>Development plan</title>
+
+<para>This section describes the development plan from approximately June
+2001 through July 2003.
+</para>
+
+<sect2>
+<title>Bootstrap code</title>
+
+<para>To allow for rapid development of the DMX server by multiple
+developers during the first development stage, the problem will be
+broken down into three tasks: the overall DMX framework, back-end
+rendering services and input device handling services. However, before
+the work begins on these tasks, a simple framework that each developer
+could use was implemented to bootstrap the development effort. This
+framework renders to a single back-end server and provides dummy input
+devices (i.e., the keyboard and mouse). The simple back-end rendering
+service was implemented using the shadow framebuffer support currently
+available in the XFree86 environment.
+</para>
+
+<para>Using this bootstrapping framework, each developer has been able to
+work on each of the tasks listed above independently as follows: the
+framework will be extended to handle arbitrary back-end server
+configurations; the back-end rendering services will be transitioned to
+the more efficient Xnest-style implementation; and, an input device
+framework to handle various input devices via the input extension will
+be developed.
+</para>
+
+<para>Status: The boot strap code is complete. <!-- August 2001 -->
+</para>
+
+</sect2>
+
+<sect2>
+<title>Input device handling</title>
+
+<para>An X server (including the front-end X server) requires two core
+input devices -- a keyboard and a pointer (mouse). These core devices
+are handled and required by the core X11 protocol. Additional types of
+input devices may be attached and utilized via the XInput extension.
+These are usually referred to as ``XInput extension devices'',
+</para>
+
+<para>There are some options as to how the front-end X server gets its core
+input devices:
+
+<orderedlist>
+<listitem>
+ <para>Local Input. The physical input devices (e.g., keyboard and
+ mouse) can be attached directly to the front-end X server. In this
+ case, the keyboard and mouse on the machine running the front-end X
+ server will be used. The front-end will have drivers to read the
+ raw input from those devices and convert it into the required X
+ input events (e.g., key press/release, pointer button press/release,
+ pointer motion). The front-end keyboard driver will keep track of
+ keyboard properties such as key and modifier mappings, autorepeat
+ state, keyboard sound and led state. Similarly the front-end
+ pointer driver will keep track if pointer properties such as the
+ button mapping and movement acceleration parameters. With this
+ option, input is handled fully in the front-end X server, and the
+ back-end X servers are used in a display-only mode. This option was
+ implemented and works for a limited number of Linux-specific
+ devices. Adding additional local input devices for other
+ architectures is expected to be relatively simple.
+</para>
+
+ <para>The following options are available for implementing local input
+ devices:
+
+<orderedlist>
+<listitem>
+ <para>The XFree86 X server has modular input drivers that could
+ be adapted for this purpose. The mouse driver supports a wide
+ range of mouse types and interfaces, as well as a range of
+ Operating System platforms. The keyboard driver in XFree86 is
+ not currently as modular as the mouse driver, but could be made
+ so. The XFree86 X server also has a range of other input
+ drivers for extended input devices such as tablets and touch
+ screens. Unfortunately, the XFree86 drivers are generally
+ complex, often simultaneously providing support for multiple
+ devices across multiple architectures; and rely so heavily on
+ XFree86-specific helper-functions, that this option was not
+ pursued.
+</para>
+</listitem>
+
+<listitem>
+ <para>The <command>kdrive</command> X server in XFree86 has built-in drivers that
+ support PS/2 mice and keyboard under Linux. The mouse driver
+ can indirectly handle other mouse types if the Linux utility
+ <command>gpm</command> is used as to translate the native mouse protocol into
+ PS/2 mouse format. These drivers could be adapted and built in
+ to the front-end X server if this range of hardware and OS
+ support is sufficient. While much simpler than the XFree86
+ drivers, the <command>kdrive</command> drivers were not used for the DMX
+ implementation.
+</para>
+</listitem>
+
+<listitem>
+ <para>Reimplementation of keyboard and mouse drivers from
+ scratch for the DMX framework. Because keyboard and mouse
+ drivers are relatively trivial to implement, this pathway was
+ selected. Other drivers in the X source tree were referenced,
+ and significant contributions from other drivers are noted in
+ the DMX source code.
+</para>
+</listitem>
+</orderedlist>
+</para>
+</listitem>
+
+<listitem>
+ <para>Backend Input. The front-end can make use of the core input
+ devices attached to one or more of the back-end X servers. Core
+ input events from multiple back-ends are merged into a single input
+ event stream. This can work sanely when only a single set of input
+ devices is used at any given time. The keyboard and pointer state
+ will be handled in the front-end, with changes propagated to the
+ back-end servers as needed. This option was implemented and works
+ well. Because the core pointer on a back-end controls the hardware
+ mouse on that back-end, core pointers cannot be treated as XInput
+ extension devices. However, all back-end XInput extensions devices
+ can be mapped to either DMX core or DMX XInput extension devices.
+</para>
+</listitem>
+
+<listitem>
+ <para>Console Input. The front-end server could create a console
+ window that is displayed on an X server independent of the back-end
+ X servers. This console window could display things like the
+ physical screen layout, and the front-end could get its core input
+ events from events delivered to the console window. This option was
+ implemented and works well. To help the human navigate, window
+ outlines are also displayed in the console window. Further, console
+ windows can be used as either core or XInput extension devices.
+</para>
+</listitem>
+
+<listitem>
+ <para>Other options were initially explored, but they were all
+ partial subsets of the options listed above and, hence, are
+ irrelevant.
+</para>
+</listitem>
+
+</orderedlist>
+</para>
+
+<para>Although extended input devices are not specifically mentioned in the
+Distributed X requirements, the options above were all implemented so
+that XInput extension devices were supported.
+</para>
+
+<para>The bootstrap code (Xdmx) had dummy input devices, and these are
+still supported in the final version. These do the necessary
+initialization to satisfy the X server's requirements for core pointer
+and keyboard devices, but no input events are ever generated.
+</para>
+
+<para>Status: The input code is complete. Because of the complexity of the
+XFree86 input device drivers (and their heavy reliance on XFree86
+infrastructure), separate low-level device drivers were implemented for
+Xdmx. The following kinds of drivers are supported (in general, the
+devices can be treated arbitrarily as "core" input devices or as XInput
+"extension" devices; and multiple instances of different kinds of
+devices can be simultaneously available):
+<orderedlist>
+<listitem>
+ <para> A "dummy" device drive that never generates events.
+</para>
+</listitem>
+
+<listitem>
+ <para> "Local" input is from the low-level hardware on which the
+ Xdmx binary is running. This is the only area where using the
+ XFree86 driver infrastructure would have been helpful, and then
+ only partially, since good support for generic USB devices does
+ not yet exist in XFree86 (in any case, XFree86 and kdrive driver
+ code was used where possible). Currently, the following local
+ devices are supported under Linux (porting to other operating
+ systems should be fairly straightforward):
+ <itemizedlist>
+ <listitem><para>Linux keyboard</para></listitem>
+ <listitem><para>Linux serial mouse (MS)</para></listitem>
+ <listitem><para>Linux PS/2 mouse</para></listitem>
+ <listitem><para>USB keyboard</para></listitem>
+ <listitem><para>USB mouse</para></listitem>
+ <listitem><para>USB generic device (e.g., joystick, gamepad, etc.)</para></listitem>
+ </itemizedlist>
+</para>
+</listitem>
+
+<listitem>
+ <para> "Backend" input is taken from one or more of the back-end
+ displays. In this case, events are taken from the back-end X
+ server and are converted to Xdmx events. Care must be taken so
+ that the sprite moves properly on the display from which input
+ is being taken.
+</para>
+</listitem>
+
+<listitem>
+ <para> "Console" input is taken from an X window that Xdmx
+ creates on the operator's display (i.e., on the machine running
+ the Xdmx binary). When the operator's mouse is inside the
+ console window, then those events are converted to Xdmx events.
+ Several special features are available: the console can display
+ outlines of windows that are on the Xdmx display (to facilitate
+ navigation), the cursor can be confined to the console, and a
+ "fine" mode can be activated to allow very precise cursor
+ positioning.
+</para>
+</listitem>
+</orderedlist>
+
+</para>
+
+</sect2>
+
+<!-- May 2002; July 2003 -->
+
+<sect2>
+<title>Output device handling</title>
+
+<para>The output of the DMX system displays rendering and windowing
+requests across multiple screens. The screens are typically arranged in
+a grid such that together they represent a single large display.
+</para>
+
+<para>The output section of the DMX code consists of two parts. The first
+is in the front-end proxy X server (Xdmx), which accepts client
+connections, manages the windows, and potentially renders primitives but
+does not actually display any of the drawing primitives. The second
+part is the back-end X server(s), which accept commands from the
+front-end server and display the results on their screens.
+</para>
+
+<sect3>
+<title>Initialization</title>
+
+<para>The DMX front-end must first initialize its screens by connecting to
+each of the back-end X servers and collecting information about each of
+these screens. However, the information collected from the back-end X
+servers might be inconsistent. Handling these cases can be difficult
+and/or inefficient. For example, a two screen system has one back-end X
+server running at 16bpp while the second is running at 32bpp.
+Converting rendering requests (e.g., XPutImage() or XGetImage()
+requests) to the appropriate bit depth can be very time consuming.
+Analyzing these cases to determine how or even if it is possible to
+handle them is required. The current Xinerama code handles many of
+these cases (e.g., in PanoramiXConsolidate()) and will be used as a
+starting point. In general, the best solution is to use homogeneous X
+servers and display devices. Using back-end servers with the same depth
+is a requirement of the final DMX implementation.
+</para>
+
+<para>Once this screen consolidation is finished, the relative position of
+each back-end X server's screen in the unified screen is initialized. A
+full-screen window is opened on each of the back-end X servers, and the
+cursor on each screen is turned off. The final DMX implementation can
+also make use of a partial-screen window, or multiple windows per
+back-end screen.
+</para>
+</sect3>
+
+<sect3>
+<title>Handling rendering requests</title>
+
+<para>After initialization, X applications connect to the front-end server.
+There are two possible implementations of how rendering and windowing
+requests are handled in the DMX system:
+
+<orderedlist>
+<listitem>
+ <para>A shadow framebuffer is used in the front-end server as the
+ render target. In this option, all protocol requests are completely
+ handled in the front-end server. All state and resources are
+ maintained in the front-end including a shadow copy of the entire
+ framebuffer. The framebuffers attached to the back-end servers are
+ updated by XPutImage() calls with data taken directly from the
+ shadow framebuffer.
+</para>
+
+ <para>This solution suffers from two main problems. First, it does not
+ take advantage of any accelerated hardware available in the system.
+ Second, the size of the XPutImage() calls can be quite large and
+ thus will be limited by the bandwidth available.
+</para>
+
+ <para>The initial DMX implementation used a shadow framebuffer by
+ default.
+</para>
+</listitem>
+
+<listitem>
+ <para>Rendering requests are sent to each back-end server for
+ handling (as is done in the Xnest server described above). In this
+ option, certain protocol requests are handled in the front-end
+ server and certain requests are repackaged and then sent to the
+ back-end servers. The framebuffer is distributed across the
+ multiple back-end servers. Rendering to the framebuffer is handled
+ on each back-end and can take advantage of any acceleration
+ available on the back-end servers' graphics display device. State
+ is maintained both in the front and back-end servers.
+</para>
+
+ <para>This solution suffers from two main drawbacks. First, protocol
+ requests are sent to all back-end servers -- even those that will
+ completely clip the rendering primitive -- which wastes bandwidth
+ and processing time. Second, state is maintained both in the front-
+ and back-end servers. These drawbacks are not as severe as in
+ option 1 (above) and can either be overcome through optimizations or
+ are acceptable. Therefore, this option will be used in the final
+ implementation.
+</para>
+
+ <para>The final DMX implementation defaults to this mechanism, but also
+ supports the shadow framebuffer mechanism. Several optimizations
+ were implemented to eliminate the drawbacks of the default
+ mechanism. These optimizations are described the section below and
+ in Phase II of the Development Results (see appendix).
+</para>
+</listitem>
+
+</orderedlist>
+</para>
+
+<para>Status: Both the shadow framebuffer and Xnest-style code is complete.
+<!-- May 2002 -->
+</para>
+
+</sect3>
+</sect2>
+
+<sect2>
+<title>Optimizing DMX</title>
+
+<para>Initially, the Xnest-style solution's performance will be measured
+and analyzed to determine where the performance bottlenecks exist.
+There are four main areas that will be addressed.
+</para>
+
+<para>First, to obtain reasonable interactivity with the first development
+phase, XSync() was called after each protocol request. The XSync()
+function flushes any pending protocol requests. It then waits for the
+back-end to process the request and send a reply that the request has
+completed. This happens with each back-end server and performance
+greatly suffers. As a result of the way XSync() is called in the first
+development phase, the batching that the X11 library performs is
+effectively defeated. The XSync() call usage will be analyzed and
+optimized by batching calls and performing them at regular intervals,
+except where interactivity will suffer (e.g., on cursor movements).
+</para>
+
+<para>Second, the initial Xnest-style solution described above sends the
+repackaged protocol requests to all back-end servers regardless of
+whether or not they would be completely clipped out. The requests that
+are trivially rejected on the back-end server wastes the limited
+bandwidth available. By tracking clipping changes in the DMX X server's
+windowing code (e.g., by opening, closing, moving or resizing windows),
+we can determine whether or not back-end windows are visible so that
+trivial tests in the front-end server's GC ops drawing functions can
+eliminate these unnecessary protocol requests.
+</para>
+
+<para>Third, each protocol request will be analyzed to determine if it is
+possible to break the request into smaller pieces at display boundaries.
+The initial ones to be analyzed are put and get image requests since
+they will require the greatest bandwidth to transmit data between the
+front and back-end servers. Other protocol requests will be analyzed
+and those that will benefit from breaking them into smaller requests
+will be implemented.
+</para>
+
+<para>Fourth, an extension is being considered that will allow font glyphs to
+be transferred from the front-end DMX X server to each back-end server.
+This extension will permit the front-end to handle all font requests and
+eliminate the requirement that all back-end X servers share the exact
+same fonts as the front-end server. We are investigating the
+feasibility of this extension during this development phase.
+</para>
+
+<para>Other potential optimizations will be determined from the performance
+analysis.
+</para>
+
+<para>Please note that in our initial design, we proposed optimizing BLT
+operations (e.g., XCopyArea() and window moves) by developing an
+extension that would allow individual back-end servers to directly copy
+pixel data to other back-end servers. This potential optimization was
+in response to the simple image movement implementation that required
+potentially many calls to GetImage() and PutImage(). However, the
+current Xinerama implementation handles these BLT operations
+differently. Instead of copying data to and from screens, they generate
+expose events -- just as happens in the case when a window is moved from
+off a screen to on screen. This approach saves the limited bandwidth
+available between front and back-end servers and is being standardized
+with Xinerama. It also eliminates the potential setup problems and
+security issues resulting from having each back-end server open
+connections to all other back-end servers. Therefore, we suggest
+accepting Xinerama's expose event solution.
+</para>
+
+<para>Also note that the approach proposed in the second and third
+optimizations might cause backing store algorithms in the back-end to be
+defeated, so a DMX X server configuration flag will be added to disable
+these optimizations.
+</para>
+
+<para>Status: The optimizations proposed above are complete. It was
+determined that the using the xfs font server was sufficient and
+creating a new mechanism to pass glyphs was redundant; therefore, the
+fourth optimization proposed above was not included in DMX.
+<!-- September 2002 -->
+</para>
+
+</sect2>
+
+<sect2>
+<title>DMX X extension support</title>
+
+<para>The DMX X server keeps track of all the windowing information on the
+back-end X servers, but does not currently export this information to
+any client applications. An extension will be developed to pass the
+screen information and back-end window IDs to DMX-aware clients. These
+clients can then use this information to directly connect to and render
+to the back-end windows. Bypassing the DMX X server allows DMX-aware
+clients to break up complex rendering requests on their own and send
+them directly to the windows on the back-end server's screens. An
+example of a client that can make effective use of this extension is
+Chromium.
+</para>
+
+<para>Status: The extension, as implemented, is fully documented in
+"Client-to-Server DMX Extension to the X Protocol". Future changes
+might be required based on feedback and other proposed enhancements to
+DMX. Currently, the following facilities are supported:
+<orderedlist>
+<listitem><para>
+ Screen information (clipping rectangle for each screen relative
+ to the virtual screen)
+</para></listitem>
+<listitem><para>
+ Window information (window IDs and clipping information for each
+ back-end window that corresponds to each DMX window)
+</para></listitem>
+<listitem><para>
+ Input device information (mappings from DMX device IDs to
+ back-end device IDs)
+</para></listitem>
+<listitem><para>
+ Force window creation (so that a client can override the
+ server-side lazy window creation optimization)
+</para></listitem>
+<listitem><para>
+ Reconfiguration (so that a client can request that a screen
+ position be changed)
+</para></listitem>
+<listitem><para>
+ Addition and removal of back-end servers and back-end and
+ console inputs.
+</para></listitem>
+</orderedlist>
+</para>
+<!-- September 2002; July 2003 -->
+
+</sect2>
+
+<sect2>
+<title>Common X extension support</title>
+
+<para>The XInput, XKeyboard and Shape extensions are commonly used
+extensions to the base X11 protocol. XInput allows multiple and
+non-standard input devices to be accessed simultaneously. These input
+devices can be connected to either the front-end or back-end servers.
+XKeyboard allows much better keyboard mappings control. Shape adds
+support for arbitrarily shaped windows and is used by various window
+managers. Nearly all potential back-end X servers make these extensions
+available, and support for each one will be added to the DMX system.
+</para>
+
+<para>In addition to the extensions listed above, support for the X
+Rendering extension (Render) is being developed. Render adds digital
+image composition to the rendering model used by the X Window System.
+While this extension is still under development by Keith Packard of HP,
+support for the current version will be added to the DMX system.
+</para>
+
+<para>Support for the XTest extension was added during the first
+development phase.
+</para>
+
+<!-- WARNING: this list is duplicated in the Phase IV discussion -->
+<para>Status: The following extensions are supported and are discussed in
+more detail in Phase IV of the Development Results (see appendix):
+ BIG-REQUESTS,
+ DEC-XTRAP,
+ DMX,
+ DPMS,
+ Extended-Visual-Information,
+ GLX,
+ LBX,
+ RECORD,
+ RENDER,
+ SECURITY,
+ SHAPE,
+ SYNC,
+ X-Resource,
+ XC-APPGROUP,
+ XC-MISC,
+ XFree86-Bigfont,
+ XINERAMA,
+ XInputExtension,
+ XKEYBOARD, and
+ XTEST.
+<!-- November 2002; updated February 2003, July 2003 -->
+</para>
+</sect2>
+
+<sect2>
+<title>OpenGL support</title>
+
+<para>OpenGL support using the Mesa code base exists in XFree86 release 4
+and later. Currently, the direct rendering infrastructure (DRI)
+provides accelerated OpenGL support for local clients and unaccelerated
+OpenGL support (i.e., software rendering) is provided for non-local
+clients.
+</para>
+
+<para>The single head OpenGL support in XFree86 4.x will be extended to use
+the DMX system. When the front and back-end servers are on the same
+physical hardware, it is possible to use the DRI to directly render to
+the back-end servers. First, the existing DRI will be extended to
+support multiple display heads, and then to support the DMX system.
+OpenGL rendering requests will be direct rendering to each back-end X
+server. The DRI will request the screen layout (either from the
+existing Xinerama extension or a DMX-specific extension). Support for
+synchronized swap buffers will also be added (on hardware that supports
+it). Note that a single front-end server with a single back-end server
+on the same physical machine can emulate accelerated indirect rendering.
+</para>
+
+<para>When the front and back-end servers are on different physical
+hardware or are using non-XFree86 4.x X servers, a mechanism to render
+primitives across the back-end servers will be provided. There are
+several options as to how this can be implemented.
+</para>
+
+<orderedlist>
+<listitem>
+ <para>The existing OpenGL support in each back-end server can be
+ used by repackaging rendering primitives and sending them to each
+ back-end server. This option is similar to the unoptimized
+ Xnest-style approach mentioned above. Optimization of this solution
+ is beyond the scope of this project and is better suited to other
+ distributed rendering systems.
+</para></listitem>
+
+<listitem>
+ <para>Rendering to a pixmap in the front-end server using the
+ current XFree86 4.x code, and then displaying to the back-ends via
+ calls to XPutImage() is another option. This option is similar to
+ the shadow frame buffer approach mentioned above. It is slower and
+ bandwidth intensive, but has the advantage that the back-end servers
+ are not required to have OpenGL support.
+</para></listitem>
+</orderedlist>
+
+<para>These, and other, options will be investigated in this phase of the
+work.
+</para>
+
+<para>Work by others have made Chromium DMX-aware. Chromium will use the
+DMX X protocol extension to obtain information about the back-end
+servers and will render directly to those servers, bypassing DMX.
+</para>
+
+<para>Status: OpenGL support by the glxProxy extension was implemented by
+SGI and has been integrated into the DMX code base.
+</para>
+<!-- May 2003-->
+</sect2>
+
+</sect1>
+
+<!-- ============================================================ -->
+<sect1>
+<title>Current issues</title>
+
+<para>In this sections the current issues are outlined that require further
+investigation.
+</para>
+
+<sect2>
+<title>Fonts</title>
+
+<para>The font path and glyphs need to be the same for the front-end and
+each of the back-end servers. Font glyphs could be sent to the back-end
+servers as necessary but this would consume a significant amount of
+available bandwidth during font rendering for clients that use many
+different fonts (e.g., Netscape). Initially, the font server (xfs) will
+be used to provide the fonts to both the front-end and back-end servers.
+Other possibilities will be investigated during development.
+</para>
+</sect2>
+
+<sect2>
+<title>Zero width rendering primitives</title>
+
+<para>To allow pixmap and on-screen rendering to be pixel perfect, all
+back-end servers must render zero width primitives exactly the same as
+the front-end renders the primitives to pixmaps. For those back-end
+servers that do not exactly match, zero width primitives will be
+automatically converted to one width primitives. This can be handled in
+the front-end server via the GC state.
+</para>
+</sect2>
+
+<sect2>
+<title>Output scaling</title>
+
+<para>With very large tiled displays, it might be difficult to read the
+information on the standard X desktop. In particular, the cursor can be
+easily lost and fonts could be difficult to read. Automatic primitive
+scaling might prove to be very useful. We will investigate the
+possibility of scaling the cursor and providing a set of alternate
+pre-scaled fonts to replace the standard fonts that many applications
+use (e.g., fixed). Other options for automatic scaling will also be
+investigated.
+</para>
+</sect2>
+
+<sect2>
+<title>Per-screen colormaps</title>
+
+<para>Each screen's default colormap in the set of back-end X servers
+should be able to be adjusted via a configuration utility. This support
+is would allow the back-end screens to be calibrated via custom gamma
+tables. On 24-bit systems that support a DirectColor visual, this type
+of correction can be accommodated. One possible implementation would be
+to advertise to X client of the DMX server a TrueColor visual while
+using DirectColor visuals on the back-end servers to implement this type
+of color correction. Other options will be investigated.
+</para>
+</sect2>
+</sect1>
+
+<!-- ============================================================ -->
+<appendix>
+<title>Appendix</title>
+
+<sect1>
+<title>Background</title>
+
+<para>This section describes the existing Open Source architectures that
+can be used to handle multiple screens and upon which this development
+project is based. This section was written before the implementation
+was finished, and may not reflect actual details of the implementation.
+It is left for historical interest only.
+</para>
+
+<sect2>
+<title>Core input device handling</title>
+
+<para>The following is a description of how core input devices are handled
+by an X server.
+</para>
+
+<sect3>
+<title>InitInput()</title>
+
+<para>InitInput() is a DDX function that is called at the start of each
+server generation from the X server's main() function. Its purpose is
+to determine what input devices are connected to the X server, register
+them with the DIX and MI layers, and initialize the input event queue.
+InitInput() does not have a return value, but the X server will abort if
+either a core keyboard device or a core pointer device are not
+registered. Extended input (XInput) devices can also be registered in
+InitInput().
+</para>
+
+<para>InitInput() usually has implementation specific code to determine
+which input devices are available. For each input device it will be
+using, it calls AddInputDevice():
+
+<variablelist>
+<varlistentry>
+<term>AddInputDevice()</term>
+<listitem><para>This DIX function allocates the device structure,
+registers a callback function (which handles device init, close, on and
+off), and returns the input handle, which can be treated as opaque. It
+is called once for each input device.
+</para></listitem>
+</varlistentry>
+</variablelist>
+</para>
+
+<para>Once input handles for core keyboard and core pointer devices have
+been obtained from AddInputDevice(). If both core devices are not
+registered, then the X server will exit with a fatal error when it
+attempts to start the input devices in InitAndStartDevices(), which is
+called directly after InitInput() (see below).
+</para>
+
+<para>The core pointer device is then registered with the miPointer code
+(which does the high level cursor handling). While this registration
+is not necessary for correct miPointer operation in the current XFree86
+code, it is still done mostly for compatibility reasons.
+</para>
+
+<para><variablelist>
+
+<varlistentry>
+<term>miRegisterPointerDevice()</term>
+<listitem><para>This MI function registers the core
+pointer's input handle with with the miPointer code.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>The final part of InitInput() is the initialization of the input
+event queue handling. In most cases, the event queue handling provided
+in the MI layer is used. The primary XFree86 X server uses its own
+event queue handling to support some special cases related to the XInput
+extension and the XFree86-specific DGA extension. For our purposes, the
+MI event queue handling should be suitable. It is initialized by
+calling mieqInit():
+
+<variablelist>
+<varlistentry>
+<term>mieqInit()</term>
+<listitem><para>This MI function initializes the MI event queue for the
+core devices, and is passed the public component of the input handles
+for the two core devices.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>If a wakeup handler is required to deliver synchronous input
+events, it can be registered here by calling the DIX function
+RegisterBlockAndWakeupHandlers(). (See the devReadInput() description
+below.)
+</para>
+</sect3>
+
+<sect3>
+<title>InitAndStartDevices()</title>
+
+<para>InitAndStartDevices() is a DIX function that is called immediately
+after InitInput() from the X server's main() function. Its purpose is
+to initialize each input device that was registered with
+AddInputDevice(), enable each input device that was successfully
+initialized, and create the list of enabled input devices. Once each
+registered device is processed in this way, the list of enabled input
+devices is checked to make sure that both a core keyboard device and
+core pointer device were registered and successfully enabled. If not,
+InitAndStartDevices() returns failure, and results in the the X server
+exiting with a fatal error.
+</para>
+
+<para>Each registered device is initialized by calling its callback
+(dev-&gt;deviceProc) with the DEVICE_INIT argument:
+
+<variablelist>
+<varlistentry>
+<term>(*dev-&gt;deviceProc)(dev, DEVICE_INIT)</term>
+<listitem>
+<para>This function initializes the
+device structs with core information relevant to the device.
+</para>
+
+<para>For pointer devices, this means specifying the number of buttons,
+default button mapping, the function used to get motion events (usually
+miPointerGetMotionEvents()), the function used to change/control the
+core pointer motion parameters (acceleration and threshold), and the
+motion buffer size.
+</para>
+
+<para>For keyboard devices, this means specifying the keycode range,
+default keycode to keysym mapping, default modifier mapping, and the
+functions used to sound the keyboard bell and modify/control the
+keyboard parameters (LEDs, bell pitch and duration, key click, which
+keys are auto-repeating, etc).
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>Each initialized device is enabled by calling EnableDevice():
+
+<variablelist>
+<varlistentry>
+<term>EnableDevice()</term>
+<listitem>
+<para>EnableDevice() calls the device callback with
+DEVICE_ON:
+ <variablelist>
+ <varlistentry>
+ <term>(*dev-&gt;deviceProc)(dev, DEVICE_ON)</term>
+ <listitem>
+ <para>This typically opens and
+ initializes the relevant physical device, and when appropriate,
+ registers the device's file descriptor (or equivalent) as a valid
+ input source.
+ </para></listitem></varlistentry>
+ </variablelist>
+ </para>
+
+ <para>EnableDevice() then adds the device handle to the X server's
+ global list of enabled devices.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>InitAndStartDevices() then verifies that a valid core keyboard and
+pointer has been initialized and enabled. It returns failure if either
+are missing.
+</para>
+</sect3>
+
+<sect3>
+<title>devReadInput()</title>
+
+<para>Each device will have some function that gets called to read its
+physical input. These may be called in a number of different ways. In
+the case of synchronous I/O, they will be called from a DDX
+wakeup-handler that gets called after the server detects that new input is
+available. In the case of asynchronous I/O, they will be called from a
+(SIGIO) signal handler triggered when new input is available. This
+function should do at least two things: make sure that input events get
+enqueued, and make sure that the cursor gets moved for motion events
+(except if these are handled later by the driver's own event queue
+processing function, which cannot be done when using the MI event queue
+handling).
+</para>
+
+<para>Events are queued by calling mieqEnqueue():
+
+<variablelist>
+<varlistentry>
+<term>mieqEnqueue()</term>
+<listitem>
+<para>This MI function is used to add input events to the
+event queue. It is simply passed the event to be queued.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>The cursor position should be updated when motion events are
+enqueued, by calling either miPointerAbsoluteCursor() or
+miPointerDeltaCursor():
+
+<variablelist>
+<varlistentry>
+<term>miPointerAbsoluteCursor()</term>
+<listitem>
+<para>This MI function is used to move the
+cursor to the absolute coordinates provided.
+</para></listitem></varlistentry>
+<varlistentry>
+<term>miPointerDeltaCursor()</term>
+<listitem>
+<para>This MI function is used to move the cursor
+relative to its current position.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+</sect3>
+
+<sect3>
+<title>ProcessInputEvents()</title>
+
+<para>ProcessInputEvents() is a DDX function that is called from the X
+server's main dispatch loop when new events are available in the input
+event queue. It typically processes the enqueued events, and updates
+the cursor/pointer position. It may also do other DDX-specific event
+processing.
+</para>
+
+<para>Enqueued events are processed by mieqProcessInputEvents() and passed
+to the DIX layer for transmission to clients:
+
+<variablelist>
+<varlistentry>
+<term>mieqProcessInputEvents()</term>
+<listitem>
+<para>This function processes each event in the
+event queue, and passes it to the device's input processing function.
+The DIX layer provides default functions to do this processing, and they
+handle the task of getting the events passed back to the relevant
+clients.
+</para></listitem></varlistentry>
+<varlistentry>
+<term>miPointerUpdate()</term>
+<listitem>
+<para>This function resynchronized the cursor position
+with the new pointer position. It also takes care of moving the cursor
+between screens when needed in multi-head configurations.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+</sect3>
+
+<sect3>
+<title>DisableDevice()</title>
+
+<para>DisableDevice is a DIX function that removes an input device from the
+list of enabled devices. The result of this is that the device no
+longer generates input events. The device's data structures are kept in
+place, and disabling a device like this can be reversed by calling
+EnableDevice(). DisableDevice() may be called from the DDX when it is
+desirable to do so (e.g., the XFree86 server does this when VT
+switching). Except for special cases, this is not normally called for
+core input devices.
+</para>
+
+<para>DisableDevice() calls the device's callback function with
+<constant>DEVICE_OFF</constant>:
+
+<variablelist>
+<varlistentry>
+<term>(*dev-&gt;deviceProc)(dev, DEVICE_OFF)</term>
+<listitem>
+<para>This typically closes the
+relevant physical device, and when appropriate, unregisters the device's
+file descriptor (or equivalent) as a valid input source.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>DisableDevice() then removes the device handle from the X server's
+global list of enabled devices.
+</para>
+
+</sect3>
+
+<sect3>
+<title>CloseDevice()</title>
+
+<para>CloseDevice is a DIX function that removes an input device from the
+list of available devices. It disables input from the device and frees
+all data structures associated with the device. This function is
+usually called from CloseDownDevices(), which is called from main() at
+the end of each server generation to close all input devices.
+</para>
+
+<para>CloseDevice() calls the device's callback function with
+<constant>DEVICE_CLOSE</constant>:
+
+<variablelist>
+<varlistentry>
+<term>(*dev-&gt;deviceProc)(dev, DEVICE_CLOSE)</term>
+<listitem>
+<para>This typically closes the
+relevant physical device, and when appropriate, unregisters the device's
+file descriptor (or equivalent) as a valid input source. If any device
+specific data structures were allocated when the device was initialized,
+they are freed here.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>CloseDevice() then frees the data structures that were allocated
+for the device when it was registered/initialized.
+</para>
+
+</sect3>
+
+<sect3>
+<title>LegalModifier()</title>
+<!-- dmx/dmxinput.c - currently returns TRUE -->
+<para>LegalModifier() is a required DDX function that can be used to
+restrict which keys may be modifier keys. This seems to be present for
+historical reasons, so this function should simply return TRUE
+unconditionally.
+</para>
+
+</sect3>
+</sect2>
+
+<sect2>
+<title>Output handling</title>
+
+<para>The following sections describe the main functions required to
+initialize, use and close the output device(s) for each screen in the X
+server.
+</para>
+
+<sect3>
+<title>InitOutput()</title>
+
+<para>This DDX function is called near the start of each server generation
+from the X server's main() function. InitOutput()'s main purpose is to
+initialize each screen and fill in the global screenInfo structure for
+each screen. It is passed three arguments: a pointer to the screenInfo
+struct, which it is to initialize, and argc and argv from main(), which
+can be used to determine additional configuration information.
+</para>
+
+<para>The primary tasks for this function are outlined below:
+
+<orderedlist>
+<listitem>
+ <para><emphasis remap="bf">Parse configuration info:</emphasis> The first task of InitOutput()
+ is to parses any configuration information from the configuration
+ file. In addition to the XF86Config file, other configuration
+ information can be taken from the command line. The command line
+ options can be gathered either in InitOutput() or earlier in the
+ ddxProcessArgument() function, which is called by
+ ProcessCommandLine(). The configuration information determines the
+ characteristics of the screen(s). For example, in the XFree86 X
+ server, the XF86Config file specifies the monitor information, the
+ screen resolution, the graphics devices and slots in which they are
+ located, and, for Xinerama, the screens' layout.
+</para>
+</listitem>
+
+<listitem>
+ <para><emphasis remap="bf">Initialize screen info:</emphasis> The next task is to initialize
+ the screen-dependent internal data structures. For example, part of
+ what the XFree86 X server does is to allocate its screen and pixmap
+ private indices, probe for graphics devices, compare the probed
+ devices to the ones listed in the XF86Config file, and add the ones that
+ match to the internal xf86Screens&lsqb;&rsqb; structure.
+</para>
+</listitem>
+
+<listitem>
+ <para><emphasis remap="bf">Set pixmap formats:</emphasis> The next task is to initialize the
+ screenInfo's image byte order, bitmap bit order and bitmap scanline
+ unit/pad. The screenInfo's pixmap format's depth, bits per pixel
+ and scanline padding is also initialized at this stage.
+</para>
+</listitem>
+
+<listitem>
+ <para><emphasis remap="bf">Unify screen info:</emphasis> An optional task that might be done at
+ this stage is to compare all of the information from the various
+ screens and determines if they are compatible (i.e., if the set of
+ screens can be unified into a single desktop). This task has
+ potential to be useful to the DMX front-end server, if Xinerama's
+ PanoramiXConsolidate() function is not sufficient.
+</para>
+</listitem>
+</orderedlist>
+</para>
+
+<para>Once these tasks are complete, the valid screens are known and each
+of these screens can be initialized by calling AddScreen().
+</para>
+</sect3>
+
+<sect3>
+<title>AddScreen()</title>
+
+<para>This DIX function is called from InitOutput(), in the DDX layer, to
+add each new screen to the screenInfo structure. The DDX screen
+initialization function and command line arguments (i.e., argc and argv)
+are passed to it as arguments.
+</para>
+
+<para>This function first allocates a new Screen structure and any privates
+that are required. It then initializes some of the fields in the Screen
+struct and sets up the pixmap padding information. Finally, it calls
+the DDX screen initialization function ScreenInit(), which is described
+below. It returns the number of the screen that were just added, or -1
+if there is insufficient memory to add the screen or if the DDX screen
+initialization fails.
+</para>
+</sect3>
+
+<sect3>
+<title>ScreenInit()</title>
+
+<para>This DDX function initializes the rest of the Screen structure with
+either generic or screen-specific functions (as necessary). It also
+fills in various screen attributes (e.g., width and height in
+millimeters, black and white pixel values).
+</para>
+
+<para>The screen init function usually calls several functions to perform
+certain screen initialization functions. They are described below:
+
+<variablelist>
+<varlistentry>
+<term>{mi,*fb}ScreenInit()</term>
+<listitem>
+<para>The DDX layer's ScreenInit() function usually
+calls another layer's ScreenInit() function (e.g., miScreenInit() or
+fbScreenInit()) to initialize the fallbacks that the DDX driver does not
+specifically handle.
+</para>
+
+<para>After calling another layer's ScreenInit() function, any
+screen-specific functions either wrap or replace the other layer's
+function pointers. If a function is to be wrapped, each of the old
+function pointers from the other layer are stored in a screen private
+area. Common functions to wrap are CloseScreen() and SaveScreen().
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>miInitializeBackingStore()</term>
+<listitem>
+<para>This MI function initializes the
+screen's backing storage functions, which are used to save areas of
+windows that are currently covered by other windows.
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>miDCInitialize()</term>
+<listitem>
+<para>This MI function initializes the MI cursor
+display structures and function pointers. If a hardware cursor is used,
+the DDX layer's ScreenInit() function will wrap additional screen and
+the MI cursor display function pointers.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>Another common task for ScreenInit() function is to initialize the
+output device state. For example, in the XFree86 X server, the
+ScreenInit() function saves the original state of the video card and
+then initializes the video mode of the graphics device.
+</para>
+</sect3>
+
+<sect3>
+<title>CloseScreen()</title>
+
+<para>This function restores any wrapped screen functions (and in
+particular the wrapped CloseScreen() function) and restores the state of
+the output device to its original state. It should also free any
+private data it created during the screen initialization.
+</para>
+</sect3>
+
+<sect3>
+<title>GC operations</title>
+
+<para>When the X server is requested to render drawing primitives, it does
+so by calling drawing functions through the graphics context's operation
+function pointer table (i.e., the GCOps functions). These functions
+render the basic graphics operations such as drawing rectangles, lines,
+text or copying pixmaps. Default routines are provided either by the MI
+layer, which draws indirectly through a simple span interface, or by the
+framebuffer layers (e.g., CFB, MFB, FB), which draw directly to a
+linearly mapped frame buffer.
+</para>
+
+<para>To take advantage of special hardware on the graphics device,
+specific GCOps functions can be replaced by device specific code.
+However, many times the graphics devices can handle only a subset of the
+possible states of the GC, so during graphics context validation,
+appropriate routines are selected based on the state and capabilities of
+the hardware. For example, some graphics hardware can accelerate single
+pixel width lines with certain dash patterns. Thus, for dash patterns
+that are not supported by hardware or for width 2 or greater lines, the
+default routine is chosen during GC validation.
+</para>
+
+<para>Note that some pointers to functions that draw to the screen are
+stored in the Screen structure. They include GetImage(), GetSpans(),
+CopyWindow() and RestoreAreas().
+</para>
+</sect3>
+
+<sect3>
+<title>Xnest</title>
+
+<para>The Xnest X server is a special proxy X server that relays the X
+protocol requests that it receives to a ``real'' X server that then
+processes the requests and displays the results, if applicable. To the X
+applications, Xnest appears as if it is a regular X server. However,
+Xnest is both server to the X application and client of the real X
+server, which will actually handle the requests.
+</para>
+
+<para>The Xnest server implements all of the standard input and output
+initialization steps outlined above.
+</para>
+
+<para><variablelist>
+<varlistentry>
+<term>InitOutput()</term>
+<listitem>
+<para>Xnest takes its configuration information from
+command line arguments via ddxProcessArguments(). This information
+includes the real X server display to connect to, its default visual
+class, the screen depth, the Xnest window's geometry, etc. Xnest then
+connects to the real X server and gathers visual, colormap, depth and
+pixmap information about that server's display, creates a window on that
+server, which will be used as the root window for Xnest.
+</para>
+
+<para>Next, Xnest initializes its internal data structures and uses the
+data from the real X server's pixmaps to initialize its own pixmap
+formats. Finally, it calls AddScreen(xnestOpenScreen, argc, argv) to
+initialize each of its screens.
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>ScreenInit()</term>
+<listitem>
+<para>Xnest's ScreenInit() function is called
+xnestOpenScreen(). This function initializes its screen's depth and
+visual information, and then calls miScreenInit() to set up the default
+screen functions. It then calls miInitializeBackingStore() and
+miDCInitialize() to initialize backing store and the software cursor.
+Finally, it replaces many of the screen functions with its own
+functions that repackage and send the requests to the real X server to
+which Xnest is attached.
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>CloseScreen()</term>
+<listitem>
+<para>This function frees its internal data structure
+allocations. Since it replaces instead of wrapping screen functions,
+there are no function pointers to unwrap. This can potentially lead to
+problems during server regeneration.
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>GC operations</term>
+<listitem>
+<para>The GC operations in Xnest are very simple since
+they leave all of the drawing to the real X server to which Xnest is
+attached. Each of the GCOps takes the request and sends it to the
+real X server using standard Xlib calls. For example, the X
+application issues a XDrawLines() call. This function turns into a
+protocol request to Xnest, which calls the xnestPolylines() function
+through Xnest's GCOps function pointer table. The xnestPolylines()
+function is only a single line, which calls XDrawLines() using the same
+arguments that were passed into it. Other GCOps functions are very
+similar. Two exceptions to the simple GCOps functions described above
+are the image functions and the BLT operations.
+</para>
+
+<para>The image functions, GetImage() and PutImage(), must use a temporary
+image to hold the image to be put of the image that was just grabbed
+from the screen while it is in transit to the real X server or the
+client. When the image has been transmitted, the temporary image is
+destroyed.
+</para>
+
+<para>The BLT operations, CopyArea() and CopyPlane(), handle not only the
+copy function, which is the same as the simple cases described above,
+but also the graphics exposures that result when the GC's graphics
+exposure bit is set to True. Graphics exposures are handled in a helper
+function, xnestBitBlitHelper(). This function collects the exposure
+events from the real X server and, if any resulting in regions being
+exposed, then those regions are passed back to the MI layer so that it
+can generate exposure events for the X application.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>The Xnest server takes its input from the X server to which it is
+connected. When the mouse is in the Xnest server's window, keyboard and
+mouse events are received by the Xnest server, repackaged and sent back
+to any client that requests those events.
+</para>
+</sect3>
+
+<sect3>
+<title>Shadow framebuffer</title>
+
+<para>The most common type of framebuffer is a linear array memory that
+maps to the video memory on the graphics device. However, accessing
+that video memory over an I/O bus (e.g., ISA or PCI) can be slow. The
+shadow framebuffer layer allows the developer to keep the entire
+framebuffer in main memory and copy it back to video memory at regular
+intervals. It also has been extended to handle planar video memory and
+rotated framebuffers.
+</para>
+
+<para>There are two main entry points to the shadow framebuffer code:
+
+<variablelist>
+<varlistentry>
+<term>shadowAlloc(width, height, bpp)</term>
+<listitem>
+<para>This function allocates the in
+memory copy of the framebuffer of size width*height*bpp. It returns a
+pointer to that memory, which will be used by the framebuffer
+ScreenInit() code during the screen's initialization.
+</para></listitem></varlistentry>
+
+<varlistentry>
+<term>shadowInit(pScreen, updateProc, windowProc)</term>
+<listitem>
+<para>This function
+initializes the shadow framebuffer layer. It wraps several screen
+drawing functions, and registers a block handler that will update the
+screen. The updateProc is a function that will copy the damaged regions
+to the screen, and the windowProc is a function that is used when the
+entire linear video memory range cannot be accessed simultaneously so
+that only a window into that memory is available (e.g., when using the
+VGA aperture).
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+
+<para>The shadow framebuffer code keeps track of the damaged area of each
+screen by calculating the bounding box of all drawing operations that
+have occurred since the last screen update. Then, when the block handler
+is next called, only the damaged portion of the screen is updated.
+</para>
+
+<para>Note that since the shadow framebuffer is kept in main memory, all
+drawing operations are performed by the CPU and, thus, no accelerated
+hardware drawing operations are possible.
+</para>
+
+</sect3>
+</sect2>
+
+<sect2>
+<title>Xinerama</title>
+
+<para>Xinerama is an X extension that allows multiple physical screens
+controlled by a single X server to appear as a single screen. Although
+the extension allows clients to find the physical screen layout via
+extension requests, it is completely transparent to clients at the core
+X11 protocol level. The original public implementation of Xinerama came
+from Digital/Compaq. XFree86 rewrote it, filling in some missing pieces
+and improving both X11 core protocol compliance and performance. The
+Xinerama extension will be passing through X.Org's standardization
+process in the near future, and the sample implementation will be based
+on this rewritten version.
+</para>
+
+<para>The current implementation of Xinerama is based primarily in the DIX
+(device independent) and MI (machine independent) layers of the X
+server. With few exceptions the DDX layers do not need any changes to
+support Xinerama. X server extensions often do need modifications to
+provide full Xinerama functionality.
+</para>
+
+<para>The following is a code-level description of how Xinerama functions.
+</para>
+
+<para>Note: Because the Xinerama extension was originally called the
+PanoramiX extension, many of the Xinerama functions still have the
+PanoramiX prefix.
+</para>
+
+<variablelist>
+<varlistentry>
+<term>PanoramiXExtensionInit()</term>
+<listitem>
+ <para>PanoramiXExtensionInit() is a
+ device-independent extension function that is called at the start of
+ each server generation from InitExtensions(), which is called from
+ the X server's main() function after all output devices have been
+ initialized, but before any input devices have been initialized.
+ </para>
+
+ <para>PanoramiXNumScreens is set to the number of physical screens. If
+ only one physical screen is present, the extension is disabled, and
+ PanoramiXExtensionInit() returns without doing anything else.
+ </para>
+
+ <para>The Xinerama extension is registered by calling AddExtension().
+ </para>
+
+ <para>GC and Screen private
+ indexes are allocated, and both GC and Screen private areas are
+ allocated for each physical screen. These hold Xinerama-specific
+ per-GC and per-Screen data. Each screen's CreateGC and CloseScreen
+ functions are wrapped by XineramaCreateGC() and
+ XineramaCloseScreen() respectively. Some new resource classes are
+ created for Xinerama drawables and GCs, and resource types for
+ Xinerama windows, pixmaps and colormaps.
+ </para>
+
+ <para>A region (PanoramiXScreenRegion) is
+ initialized to be the union of the screen regions.
+ The relative positioning information for the
+ physical screens is taken from the ScreenRec x and y members, which
+ the DDX layer must initialize in InitOutput(). The bounds of the
+ combined screen is also calculated (PanoramiXPixWidth and
+ PanoramiXPixHeight).
+ </para>
+
+ <para>The DIX layer has a list of function pointers
+ (ProcVector&lsqb;&rsqb;) that
+ holds the entry points for the functions that process core protocol
+ requests. The requests that Xinerama must intercept and break up
+ into physical screen-specific requests are wrapped. The original
+ set is copied to SavedProcVector&lsqb;&rsqb;. The types of requests
+ intercepted are Window requests, GC requests, colormap requests,
+ drawing requests, and some geometry-related requests. This wrapping
+ allows the bulk of the protocol request processing to be handled
+ transparently to the DIX layer. Some operations cannot be dealt with
+ in this way and are handled with Xinerama-specific code within the
+ DIX layer.
+ </para>
+</listitem></varlistentry>
+
+<varlistentry>
+<term>PanoramiXConsolidate()</term>
+<listitem>
+ <para>PanoramiXConsolidate() is a
+ device-independent extension function that is called directly from
+ the X server's main() function after extensions and input/output
+ devices have been initialized, and before the root windows are
+ defined and initialized.
+</para>
+
+ <para>This function finds the set of depths (PanoramiXDepths&lsqb;&rsqb;) and
+ visuals (PanoramiXVisuals&lsqb;&rsqb;)
+ common to all of the physical screens.
+ PanoramiXNumDepths is set to the number of common depths, and
+ PanoramiXNumVisuals is set to the number of common visuals.
+ Resources are created for the single root window and the default
+ colormap. Each of these resources has per-physical screen entries.
+ </para>
+</listitem></varlistentry>
+
+<varlistentry>
+<term>PanoramiXCreateConnectionBlock()</term>
+<listitem>
+ <para>PanoramiXConsolidate() is a
+ device-independent extension function that is called directly from
+ the X server's main() function after the per-physical screen root
+ windows are created. It is called instead of the standard DIX
+ CreateConnectionBlock() function. If this function returns FALSE,
+ the X server exits with a fatal error. This function will return
+ FALSE if no common depths were found in PanoramiXConsolidate().
+ With no common depths, Xinerama mode is not possible.
+ </para>
+
+ <para>The connection block holds the information that clients get when
+ they open a connection to the X server. It includes information
+ such as the supported pixmap formats, number of screens and the
+ sizes, depths, visuals, default colormap information, etc, for each
+ of the screens (much of information that <command>xdpyinfo</command> shows). The
+ connection block is initialized with the combined single screen
+ values that were calculated in the above two functions.
+ </para>
+
+ <para>The Xinerama extension allows the registration of connection
+ block callback functions. The purpose of these is to allow other
+ extensions to do processing at this point. These callbacks can be
+ registered by calling XineramaRegisterConnectionBlockCallback() from
+ the other extension's ExtensionInit() function. Each registered
+ connection block callback is called at the end of
+ PanoramiXCreateConnectionBlock().
+ </para>
+</listitem></varlistentry>
+</variablelist>
+
+<sect3>
+<title>Xinerama-specific changes to the DIX code</title>
+
+<para>There are a few types of Xinerama-specific changes within the DIX
+code. The main ones are described here.
+</para>
+
+<para>Functions that deal with colormap or GC -related operations outside of
+the intercepted protocol requests have a test added to only do the
+processing for screen numbers &gt; 0. This is because they are handled for
+the single Xinerama screen and the processing is done once for screen 0.
+</para>
+
+<para>The handling of motion events does some coordinate translation between
+the physical screen's origin and screen zero's origin. Also, motion
+events must be reported relative to the composite screen origin rather
+than the physical screen origins.
+</para>
+
+<para>There is some special handling for cursor, window and event processing
+that cannot (either not at all or not conveniently) be done via the
+intercepted protocol requests. A particular case is the handling of
+pointers moving between physical screens.
+</para>
+</sect3>
+
+<sect3>
+<title>Xinerama-specific changes to the MI code</title>
+
+<para>The only Xinerama-specific change to the MI code is in miSendExposures()
+to handle the coordinate (and window ID) translation for expose events.
+</para>
+</sect3>
+
+<sect3>
+<title>Intercepted DIX core requests</title>
+
+<para>Xinerama breaks up drawing requests for dispatch to each physical
+screen. It also breaks up windows into pieces for each physical screen.
+GCs are translated into per-screen GCs. Colormaps are replicated on
+each physical screen. The functions handling the intercepted requests
+take care of breaking the requests and repackaging them so that they can
+be passed to the standard request handling functions for each screen in
+turn. In addition, and to aid the repackaging, the information from
+many of the intercepted requests is used to keep up to date the
+necessary state information for the single composite screen. Requests
+(usually those with replies) that can be satisfied completely from this
+stored state information do not call the standard request handling
+functions.
+</para>
+
+</sect3>
+
+</sect2>
+
+</sect1>
+
+<!-- ============================================================ -->
+
+<sect1>
+<title>Development Results</title>
+
+<para>In this section the results of each phase of development are
+discussed. This development took place between approximately June 2001
+and July 2003.
+</para>
+
+<sect2>
+<title>Phase I</title>
+
+<para>The initial development phase dealt with the basic implementation
+including the bootstrap code, which used the shadow framebuffer, and the
+unoptimized implementation, based on an Xnest-style implementation.
+</para>
+
+<sect3>
+<title>Scope</title>
+
+<para>The goal of Phase I is to provide fundamental functionality that can
+act as a foundation for ongoing work:
+<orderedlist>
+<listitem>
+ <para>Develop the proxy X server
+ <itemizedlist>
+ <listitem>
+ <para>The proxy X server will operate on the X11 protocol and
+ relay requests as necessary to correctly perform the request.
+ </para></listitem>
+ <listitem>
+ <para>Work will be based on the existing work for Xinerama and
+ Xnest.
+ </para></listitem>
+ <listitem>
+ <para>Input events and windowing operations are handled in the
+ proxy server and rendering requests are repackaged and sent to
+ each of the back-end servers for display.
+ </para></listitem>
+ <listitem>
+ <para>The multiple screen layout (including support for
+ overlapping screens) will be user configurable via a
+ configuration file or through the configuration tool.
+ </para></listitem>
+ </itemizedlist>
+ </para></listitem>
+ <listitem>
+ <para>Develop graphical configuration tool
+ <itemizedlist>
+ <listitem>
+ <para>There will be potentially a large number of X servers to
+ configure into a single display. The tool will allow the user
+ to specify which servers are involved in the configuration and
+ how they should be laid out.
+ </para></listitem>
+ </itemizedlist>
+ </para></listitem>
+ <listitem>
+ <para>Pass the X Test Suite
+ <itemizedlist>
+ <listitem>
+ <para>The X Test Suite covers the basic X11 operations. All
+ tests known to succeed must correctly operate in the distributed
+ X environment.
+ </para></listitem>
+ </itemizedlist>
+ </para></listitem>
+</orderedlist>
+
+</para>
+
+<para>For this phase, the back-end X servers are assumed to be unmodified X
+servers that do not support any DMX-related protocol extensions; future
+optimization pathways are considered, but are not implemented; and the
+configuration tool is assumed to rely only on libraries in the X source
+tree (e.g., Xt).
+</para>
+</sect3>
+
+<sect3>
+<title>Results</title>
+
+<para>The proxy X server, Xdmx, was developed to distribute X11 protocol
+requests to the set of back-end X servers. It opens a window on each
+back-end server, which represents the part of the front-end's root
+window that is visible on that screen. It mirrors window, pixmap and
+other state in each back-end server. Drawing requests are sent to
+either windows or pixmaps on each back-end server. This code is based
+on Xnest and uses the existing Xinerama extension.
+</para>
+
+<para>Input events can be taken from (1) devices attached to the back-end
+server, (2) core devices attached directly to the Xdmx server, or (3)
+from a ``console'' window on another X server. Events for these devices
+are gathered, processed and delivered to clients attached to the Xdmx
+server.
+</para>
+
+<para>An intuitive configuration format was developed to help the user
+easily configure the multiple back-end X servers. It was defined (see
+grammar in Xdmx man page) and a parser was implemented that is used by
+the Xdmx server and by a standalone xdmxconfig utility. The parsing
+support was implemented such that it can be easily factored out of the X
+source tree for use with other tools (e.g., vdl). Support for
+converting legacy vdl-format configuration files to the DMX format is
+provided by the vdltodmx utility.
+</para>
+
+<para>Originally, the configuration file was going to be a subsection of
+XFree86's XF86Config file, but that was not possible since Xdmx is a
+completely separate X server. Thus, a separate config file format was
+developed. In addition, a graphical configuration
+tool, xdmxconfig, was developed to allow the user to create and arrange
+the screens in the configuration file. The <emphasis remap="bf">-configfile</emphasis> and <emphasis remap="bf">-config</emphasis>
+command-line options can be used to start Xdmx using a configuration
+file.
+</para>
+
+<para>An extension that enables remote input testing is required for the X
+Test Suite to function. During this phase, this extension (XTEST) was
+implemented in the Xdmx server. The results from running the X Test
+Suite are described in detail below.
+</para>
+</sect3>
+
+<sect3>
+<title>X Test Suite</title>
+
+ <sect4>
+ <title>Introduction</title>
+ <para>
+ The X Test Suite contains tests that verify Xlib functions
+ operate correctly. The test suite is designed to run on a
+ single X server; however, since X applications will not be
+ able to tell the difference between the DMX server and a
+ standard X server, the X Test Suite should also run on the
+ DMX server.
+ </para>
+ <para>
+ The Xdmx server was tested with the X Test Suite, and the
+ existing failures are noted in this section. To put these
+ results in perspective, we first discuss expected X Test
+ failures and how errors in underlying systems can impact
+ Xdmx test results.
+ </para>
+ </sect4>
+
+ <sect4>
+ <title>Expected Failures for a Single Head</title>
+ <para>
+ A correctly implemented X server with a single screen is
+ expected to fail certain X Test tests. The following
+ well-known errors occur because of rounding error in the X
+ server code:
+ <literallayout>
+XDrawArc: Tests 42, 63, 66, 73
+XDrawArcs: Tests 45, 66, 69, 76
+ </literallayout>
+ </para>
+ <para>
+ The following failures occur because of the high-level X
+ server implementation:
+ <literallayout>
+XLoadQueryFont: Test 1
+XListFontsWithInfo: Tests 3, 4
+XQueryFont: Tests 1, 2
+ </literallayout>
+ </para>
+ <para>
+ The following test fails when running the X server as root
+ under Linux because of the way directory modes are
+ interpreted:
+ <literallayout>
+XWriteBitmapFile: Test 3
+ </literallayout>
+ </para>
+ <para>
+ Depending on the video card used for the back-end, other
+ failures may also occur because of bugs in the low-level
+ driver implementation. Over time, failures of this kind
+ are usually fixed by XFree86, but will show up in Xdmx
+ testing until then.
+ </para>
+ </sect4>
+
+ <sect4>
+ <title>Expected Failures for Xinerama</title>
+ <para>
+ Xinerama fails several X Test Suite tests because of
+ design decisions made for the current implementation of
+ Xinerama. Over time, many of these errors will be
+ corrected by XFree86 and the group working on a new
+ Xinerama implementation. Therefore, Xdmx will also share
+ X Suite Test failures with Xinerama.
+ </para>
+
+ <para>
+ We may be able to fix or work-around some of these
+ failures at the Xdmx level, but this will require
+ additional exploration that was not part of Phase I.
+ </para>
+
+ <para>
+ Xinerama is constantly improving, and the list of
+ Xinerama-related failures depends on XFree86 version and
+ the underlying graphics hardware. We tested with a
+ variety of hardware, including nVidia, S3, ATI Radeon,
+ and Matrox G400 (in dual-head mode). The list below
+ includes only those failures that appear to be from the
+ Xinerama layer, and does not include failures listed in
+ the previous section, or failures that appear to be from
+ the low-level graphics driver itself:
+ </para>
+
+ <para>
+ These failures were noted with multiple Xinerama
+ configurations:
+ <literallayout>
+XCopyPlane: Tests 13, 22, 31 (well-known Xinerama implementation issue)
+XSetFontPath: Test 4
+XGetDefault: Test 5
+XMatchVisualInfo: Test 1
+ </literallayout>
+ </para>
+ <para>
+ These failures were noted only when using one dual-head
+ video card with a 4.2.99.x XFree86 server:
+ <literallayout>
+XListPixmapFormats: Test 1
+XDrawRectangles: Test 45
+ </literallayout>
+ </para>
+ <para>
+ These failures were noted only when using two video cards
+ from different vendors with a 4.1.99.x XFree86 server:
+ <literallayout>
+XChangeWindowAttributes: Test 32
+XCreateWindow: Test 30
+XDrawLine: Test 22
+XFillArc: Test 22
+XChangeKeyboardControl: Tests 9, 10
+XRebindKeysym: Test 1
+ </literallayout>
+ </para>
+ </sect4>
+
+ <sect4>
+ <title>Additional Failures from Xdmx</title>
+
+ <para>
+ When running Xdmx, no unexpected failures were noted.
+ Since the Xdmx server is based on Xinerama, we expect to
+ have most of the Xinerama failures present in the Xdmx
+ server. Similarly, since the Xdmx server must rely on the
+ low-level device drivers on each back-end server, we also
+ expect that Xdmx will exhibit most of the back-end
+ failures. Here is a summary:
+ <literallayout>
+XListPixmapFormats: Test 1 (configuration dependent)
+XChangeWindowAttributes: Test 32
+XCreateWindow: Test 30
+XCopyPlane: Test 13, 22, 31
+XSetFontPath: Test 4
+XGetDefault: Test 5 (configuration dependent)
+XMatchVisualInfo: Test 1
+XRebindKeysym: Test 1 (configuration dependent)
+ </literallayout>
+ </para>
+ <para>
+ Note that this list is shorter than the combined list for
+ Xinerama because Xdmx uses different code paths to perform
+ some Xinerama operations. Further, some Xinerama failures
+ have been fixed in the XFree86 4.2.99.x CVS repository.
+ </para>
+ </sect4>
+
+ <sect4>
+ <title>Summary and Future Work</title>
+
+ <para>
+ Running the X Test Suite on Xdmx does not produce any
+ failures that cannot be accounted for by the underlying
+ Xinerama subsystem used by the front-end or by the
+ low-level device-driver code running on the back-end X
+ servers. The Xdmx server therefore is as ``correct'' as
+ possible with respect to the standard set of X Test Suite
+ tests.
+ </para>
+
+ <para>
+ During the following phases, we will continue to verify
+ Xdmx correctness using the X Test Suite. We may also use
+ other tests suites or write additional tests that run
+ under the X Test Suite that specifically verify the
+ expected behavior of DMX.
+ </para>
+ </sect4>
+</sect3>
+
+<sect3>
+<title>Fonts</title>
+
+<para>In Phase I, fonts are handled directly by both the front-end and the
+back-end servers, which is required since we must treat each back-end
+server during this phase as a ``black box''. What this requires is that
+<emphasis remap="bf">the front- and back-end servers must share the exact same font
+path</emphasis>. There are two ways to help make sure that all servers share the
+same font path:
+
+<orderedlist>
+ <listitem>
+ <para>First, each server can be configured to use the same font
+ server. The font server, xfs, can be configured to serve fonts to
+ multiple X servers via TCP.
+ </para></listitem>
+
+ <listitem>
+ <para>Second, each server can be configured to use the same font
+ path and either those font paths can be copied to each back-end
+ machine or they can be mounted (e.g., via NFS) on each back-end
+ machine.
+ </para></listitem>
+</orderedlist>
+</para>
+
+<para>One additional concern is that a client program can set its own font
+path, and if it does so, then that font path must be available on each
+back-end machine.
+</para>
+
+<para>The -fontpath command line option was added to allow users to
+initialize the font path of the front end server. This font path is
+propagated to each back-end server when the default font is loaded. If
+there are any problems, an error message is printed, which will describe
+the problem and list the current font path. For more information about
+setting the font path, see the -fontpath option description in the man
+page.
+</para>
+</sect3>
+
+<sect3>
+<title>Performance</title>
+
+<para>Phase I of development was not intended to optimize performance. Its
+focus was on completely and correctly handling the base X11 protocol in
+the Xdmx server. However, several insights were gained during Phase I,
+which are listed here for reference during the next phase of
+development.
+</para>
+
+<orderedlist>
+ <listitem>
+ <para>Calls to XSync() can slow down rendering since it requires a
+ complete round trip to and from a back-end server. This is
+ especially problematic when communicating over long haul networks.
+ </para></listitem>
+
+ <listitem>
+ <para>Sending drawing requests to only the screens that they overlap
+ should improve performance.
+ </para></listitem>
+</orderedlist>
+</sect3>
+
+<sect3>
+<title>Pixmaps</title>
+
+<para>Pixmaps were originally expected to be handled entirely in the
+front-end X server; however, it was found that this overly complicated
+the rendering code and would have required sending potentially large
+images to each back server that required them when copying from pixmap
+to screen. Thus, pixmap state is mirrored in the back-end server just
+as it is with regular window state. With this implementation, the same
+rendering code that draws to windows can be used to draw to pixmaps on
+the back-end server, and no large image transfers are required to copy
+from pixmap to window.
+</para>
+
+</sect3>
+
+</sect2>
+
+<!-- ============================================================ -->
+<sect2>
+<title>Phase II</title>
+
+<para>The second phase of development concentrates on performance
+optimizations. These optimizations are documented here, with
+<command>x11perf</command> data to show how the optimizations improve performance.
+</para>
+
+<para>All benchmarks were performed by running Xdmx on a dual processor
+1.4GHz AMD Athlon machine with 1GB of RAM connecting over 100baseT to
+two single-processor 1GHz Pentium III machines with 256MB of RAM and ATI
+Rage 128 (RF) video cards. The front end was running Linux
+2.4.20-pre1-ac1 and the back ends were running Linux 2.4.7-10 and
+version 4.2.99.1 of XFree86 pulled from the XFree86 CVS repository on
+August 7, 2002. All systems were running Red Hat Linux 7.2.
+</para>
+
+<sect3>
+<title>Moving from XFree86 4.1.99.1 to 4.2.0.0</title>
+
+<para>For phase II, the working source tree was moved to the branch tagged
+with dmx-1-0-branch and was updated from version 4.1.99.1 (20 August
+2001) of the XFree86 sources to version 4.2.0.0 (18 January 2002).
+After this update, the following tests were noted to be more than 10%
+faster:
+<screen>
+1.13 Fill 300x300 opaque stippled trapezoid (161x145 stipple)
+1.16 Fill 1x1 tiled trapezoid (161x145 tile)
+1.13 Fill 10x10 tiled trapezoid (161x145 tile)
+1.17 Fill 100x100 tiled trapezoid (161x145 tile)
+1.16 Fill 1x1 tiled trapezoid (216x208 tile)
+1.20 Fill 10x10 tiled trapezoid (216x208 tile)
+1.15 Fill 100x100 tiled trapezoid (216x208 tile)
+1.37 Circulate Unmapped window (200 kids)
+</screen>
+And the following tests were noted to be more than 10% slower:
+<screen>
+0.88 Unmap window via parent (25 kids)
+0.75 Circulate Unmapped window (4 kids)
+0.79 Circulate Unmapped window (16 kids)
+0.80 Circulate Unmapped window (25 kids)
+0.82 Circulate Unmapped window (50 kids)
+0.85 Circulate Unmapped window (75 kids)
+</screen>
+</para>
+
+<para>These changes were not caused by any changes in the DMX system, and
+may point to changes in the XFree86 tree or to tests that have more
+"jitter" than most other <command>x11perf</command> tests.
+</para>
+</sect3>
+
+<sect3>
+<title>Global changes</title>
+
+<para>During the development of the Phase II DMX server, several global
+changes were made. These changes were also compared with the Phase I
+server. The following tests were noted to be more than 10% faster:
+<screen>
+1.13 Fill 300x300 opaque stippled trapezoid (161x145 stipple)
+1.15 Fill 1x1 tiled trapezoid (161x145 tile)
+1.13 Fill 10x10 tiled trapezoid (161x145 tile)
+1.17 Fill 100x100 tiled trapezoid (161x145 tile)
+1.16 Fill 1x1 tiled trapezoid (216x208 tile)
+1.19 Fill 10x10 tiled trapezoid (216x208 tile)
+1.15 Fill 100x100 tiled trapezoid (216x208 tile)
+1.15 Circulate Unmapped window (4 kids)
+</screen>
+</para>
+
+<para>The following tests were noted to be more than 10% slower:
+<screen>
+0.69 Scroll 10x10 pixels
+0.68 Scroll 100x100 pixels
+0.68 Copy 10x10 from window to window
+0.68 Copy 100x100 from window to window
+0.76 Circulate Unmapped window (75 kids)
+0.83 Circulate Unmapped window (100 kids)
+</screen>
+</para>
+
+<para>For the remainder of this analysis, the baseline of comparison will
+be the Phase II deliverable with all optimizations disabled (unless
+otherwise noted). This will highlight how the optimizations in
+isolation impact performance.
+</para>
+</sect3>
+
+<sect3>
+<title>XSync() Batching</title>
+
+<para>During the Phase I implementation, XSync() was called after every
+protocol request made by the DMX server. This provided the DMX server
+with an interactive feel, but defeated X11's protocol buffering system
+and introduced round-trip wire latency into every operation. During
+Phase II, DMX was changed so that protocol requests are no longer
+followed by calls to XSync(). Instead, the need for an XSync() is
+noted, and XSync() calls are only made every 100mS or when the DMX
+server specifically needs to make a call to guarantee interactivity.
+With this new system, X11 buffers protocol as much as possible during a
+100mS interval, and many unnecessary XSync() calls are avoided.
+</para>
+
+<para>Out of more than 300 <command>x11perf</command> tests, 8 tests became more than 100
+times faster, with 68 more than 50X faster, 114 more than 10X faster,
+and 181 more than 2X faster. See table below for summary.
+</para>
+
+<para>The following tests were noted to be more than 10% slower with
+XSync() batching on:
+<screen>
+0.88 500x500 tiled rectangle (161x145 tile)
+0.89 Copy 500x500 from window to window
+</screen>
+</para>
+</sect3>
+
+<sect3>
+<title>Offscreen Optimization</title>
+
+<para>Windows span one or more of the back-end servers' screens; however,
+during Phase I development, windows were created on every back-end
+server and every rendering request was sent to every window regardless
+of whether or not that window was visible. With the offscreen
+optimization, the DMX server tracks when a window is completely off of a
+back-end server's screen and, in that case, it does not send rendering
+requests to those back-end windows. This optimization saves bandwidth
+between the front and back-end servers, and it reduces the number of
+XSync() calls. The performance tests were run on a DMX system with only
+two back-end servers. Greater performance gains will be had as the
+number of back-end servers increases.
+</para>
+
+<para>Out of more than 300 <command>x11perf</command> tests, 3 tests were at least twice as
+fast, and 146 tests were at least 10% faster. Two tests were more than
+10% slower with the offscreen optimization:
+<screen>
+0.88 Hide/expose window via popup (4 kids)
+0.89 Resize unmapped window (75 kids)
+</screen>
+</para>
+</sect3>
+
+<sect3>
+<title>Lazy Window Creation Optimization</title>
+
+<para>As mentioned above, during Phase I, windows were created on every
+back-end server even if they were not visible on that back-end. With
+the lazy window creation optimization, the DMX server does not create
+windows on a back-end server until they are either visible or they
+become the parents of a visible window. This optimization builds on the
+offscreen optimization (described above) and requires it to be enabled.
+</para>
+
+<para>The lazy window creation optimization works by creating the window
+data structures in the front-end server when a client creates a window,
+but delays creation of the window on the back-end server(s). A private
+window structure in the DMX server saves the relevant window data and
+tracks changes to the window's attributes and stacking order for later
+use. The only times a window is created on a back-end server are (1)
+when it is mapped and is at least partially overlapping the back-end
+server's screen (tracked by the offscreen optimization), or (2) when the
+window becomes the parent of a previously visible window. The first
+case occurs when a window is mapped or when a visible window is copied,
+moved or resized and now overlaps the back-end server's screen. The
+second case occurs when starting a window manager after having created
+windows to which the window manager needs to add decorations.
+</para>
+
+<para>When either case occurs, a window on the back-end server is created
+using the data saved in the DMX server's window private data structure.
+The stacking order is then adjusted to correctly place the window on the
+back-end and lastly the window is mapped. From this time forward, the
+window is handled exactly as if the window had been created at the time
+of the client's request.
+</para>
+
+<para>Note that when a window is no longer visible on a back-end server's
+screen (e.g., it is moved offscreen), the window is not destroyed;
+rather, it is kept and reused later if the window once again becomes
+visible on the back-end server's screen. Originally with this
+optimization, destroying windows was implemented but was later rejected
+because it increased bandwidth when windows were opaquely moved or
+resized, which is common in many window managers.
+</para>
+
+<para>The performance tests were run on a DMX system with only two back-end
+servers. Greater performance gains will be had as the number of
+back-end servers increases.
+</para>
+
+<para>This optimization improved the following <command>x11perf</command> tests by more
+than 10%:
+<screen>
+1.10 500x500 rectangle outline
+1.12 Fill 100x100 stippled trapezoid (161x145 stipple)
+1.20 Circulate Unmapped window (50 kids)
+1.19 Circulate Unmapped window (75 kids)
+</screen>
+</para>
+</sect3>
+
+<sect3>
+<title>Subdividing Rendering Primitives</title>
+
+<para>X11 imaging requests transfer significant data between the client and
+the X server. During Phase I, the DMX server would then transfer the
+image data to each back-end server. Even with the offscreen
+optimization (above), these requests still required transferring
+significant data to each back-end server that contained a visible
+portion of the window. For example, if the client uses XPutImage() to
+copy an image to a window that overlaps the entire DMX screen, then the
+entire image is copied by the DMX server to every back-end server.
+</para>
+
+<para>To reduce the amount of data transferred between the DMX server and
+the back-end servers when XPutImage() is called, the image data is
+subdivided and only the data that will be visible on a back-end server's
+screen is sent to that back-end server. Xinerama already implements a
+subdivision algorithm for XGetImage() and no further optimization was
+needed.
+</para>
+
+<para>Other rendering primitives were analyzed, but the time required to
+subdivide these primitives was a significant proportion of the time
+required to send the entire rendering request to the back-end server, so
+this optimization was rejected for the other rendering primitives.
+</para>
+
+<para>Again, the performance tests were run on a DMX system with only two
+back-end servers. Greater performance gains will be had as the number
+of back-end servers increases.
+</para>
+
+<para>This optimization improved the following <command>x11perf</command> tests by more
+than 10%:
+<screen>
+1.12 Fill 100x100 stippled trapezoid (161x145 stipple)
+1.26 PutImage 10x10 square
+1.83 PutImage 100x100 square
+1.91 PutImage 500x500 square
+1.40 PutImage XY 10x10 square
+1.48 PutImage XY 100x100 square
+1.50 PutImage XY 500x500 square
+1.45 Circulate Unmapped window (75 kids)
+1.74 Circulate Unmapped window (100 kids)
+</screen>
+</para>
+
+<para>The following test was noted to be more than 10% slower with this
+optimization:
+<screen>
+0.88 10-pixel fill chord partial circle
+</screen>
+</para>
+</sect3>
+
+<sect3>
+<title>Summary of x11perf Data</title>
+
+<para>With all of the optimizations on, 53 <command>x11perf</command> tests are more than
+100X faster than the unoptimized Phase II deliverable, with 69 more than
+50X faster, 73 more than 10X faster, and 199 more than twice as fast.
+No tests were more than 10% slower than the unoptimized Phase II
+deliverable. (Compared with the Phase I deliverable, only Circulate
+Unmapped window (100 kids) was more than 10% slower than the Phase II
+deliverable. As noted above, this test seems to have wider variability
+than other <command>x11perf</command> tests.)
+</para>
+
+<para>The following table summarizes relative <command>x11perf</command> test changes for
+all optimizations individually and collectively. Note that some of the
+optimizations have a synergistic effect when used together.
+<screen>
+
+1: XSync() batching only
+2: Off screen optimizations only
+3: Window optimizations only
+4: Subdivprims only
+5: All optimizations
+
+ 1 2 3 4 5 Operation
+------ ---- ---- ---- ------ ---------
+ 2.14 1.85 1.00 1.00 4.13 Dot
+ 1.67 1.80 1.00 1.00 3.31 1x1 rectangle
+ 2.38 1.43 1.00 1.00 2.44 10x10 rectangle
+ 1.00 1.00 0.92 0.98 1.00 100x100 rectangle
+ 1.00 1.00 1.00 1.00 1.00 500x500 rectangle
+ 1.83 1.85 1.05 1.06 3.54 1x1 stippled rectangle (8x8 stipple)
+ 2.43 1.43 1.00 1.00 2.41 10x10 stippled rectangle (8x8 stipple)
+ 0.98 1.00 1.00 1.00 1.00 100x100 stippled rectangle (8x8 stipple)
+ 1.00 1.00 1.00 1.00 0.98 500x500 stippled rectangle (8x8 stipple)
+ 1.75 1.75 1.00 1.00 3.40 1x1 opaque stippled rectangle (8x8 stipple)
+ 2.38 1.42 1.00 1.00 2.34 10x10 opaque stippled rectangle (8x8 stipple)
+ 1.00 1.00 0.97 0.97 1.00 100x100 opaque stippled rectangle (8x8 stipple)
+ 1.00 1.00 1.00 1.00 0.99 500x500 opaque stippled rectangle (8x8 stipple)
+ 1.82 1.82 1.04 1.04 3.56 1x1 tiled rectangle (4x4 tile)
+ 2.33 1.42 1.00 1.00 2.37 10x10 tiled rectangle (4x4 tile)
+ 1.00 0.92 1.00 1.00 1.00 100x100 tiled rectangle (4x4 tile)
+ 1.00 1.00 1.00 1.00 1.00 500x500 tiled rectangle (4x4 tile)
+ 1.94 1.62 1.00 1.00 3.66 1x1 stippled rectangle (17x15 stipple)
+ 1.74 1.28 1.00 1.00 1.73 10x10 stippled rectangle (17x15 stipple)
+ 1.00 1.00 1.00 0.89 0.98 100x100 stippled rectangle (17x15 stipple)
+ 1.00 1.00 1.00 1.00 0.98 500x500 stippled rectangle (17x15 stipple)
+ 1.94 1.62 1.00 1.00 3.67 1x1 opaque stippled rectangle (17x15 stipple)
+ 1.69 1.26 1.00 1.00 1.66 10x10 opaque stippled rectangle (17x15 stipple)
+ 1.00 0.95 1.00 1.00 1.00 100x100 opaque stippled rectangle (17x15 stipple)
+ 1.00 1.00 1.00 1.00 0.97 500x500 opaque stippled rectangle (17x15 stipple)
+ 1.93 1.61 0.99 0.99 3.69 1x1 tiled rectangle (17x15 tile)
+ 1.73 1.27 1.00 1.00 1.72 10x10 tiled rectangle (17x15 tile)
+ 1.00 1.00 1.00 1.00 0.98 100x100 tiled rectangle (17x15 tile)
+ 1.00 1.00 0.97 0.97 1.00 500x500 tiled rectangle (17x15 tile)
+ 1.95 1.63 1.00 1.00 3.83 1x1 stippled rectangle (161x145 stipple)
+ 1.80 1.30 1.00 1.00 1.83 10x10 stippled rectangle (161x145 stipple)
+ 0.97 1.00 1.00 1.00 1.01 100x100 stippled rectangle (161x145 stipple)
+ 1.00 1.00 1.00 1.00 0.98 500x500 stippled rectangle (161x145 stipple)
+ 1.95 1.63 1.00 1.00 3.56 1x1 opaque stippled rectangle (161x145 stipple)
+ 1.65 1.25 1.00 1.00 1.68 10x10 opaque stippled rectangle (161x145 stipple)
+ 1.00 1.00 1.00 1.00 1.01 100x100 opaque stippled rectangle (161x145...
+ 1.00 1.00 1.00 1.00 0.97 500x500 opaque stippled rectangle (161x145...
+ 1.95 1.63 0.98 0.99 3.80 1x1 tiled rectangle (161x145 tile)
+ 1.67 1.26 1.00 1.00 1.67 10x10 tiled rectangle (161x145 tile)
+ 1.13 1.14 1.14 1.14 1.14 100x100 tiled rectangle (161x145 tile)
+ 0.88 1.00 1.00 1.00 0.99 500x500 tiled rectangle (161x145 tile)
+ 1.93 1.63 1.00 1.00 3.53 1x1 tiled rectangle (216x208 tile)
+ 1.69 1.26 1.00 1.00 1.66 10x10 tiled rectangle (216x208 tile)
+ 1.00 1.00 1.00 1.00 1.00 100x100 tiled rectangle (216x208 tile)
+ 1.00 1.00 1.00 1.00 1.00 500x500 tiled rectangle (216x208 tile)
+ 1.82 1.70 1.00 1.00 3.38 1-pixel line segment
+ 2.07 1.56 0.90 1.00 3.31 10-pixel line segment
+ 1.29 1.10 1.00 1.00 1.27 100-pixel line segment
+ 1.05 1.06 1.03 1.03 1.09 500-pixel line segment
+ 1.30 1.13 1.00 1.00 1.29 100-pixel line segment (1 kid)
+ 1.32 1.15 1.00 1.00 1.32 100-pixel line segment (2 kids)
+ 1.33 1.16 1.00 1.00 1.33 100-pixel line segment (3 kids)
+ 1.92 1.64 1.00 1.00 3.73 10-pixel dashed segment
+ 1.34 1.16 1.00 1.00 1.34 100-pixel dashed segment
+ 1.24 1.11 0.99 0.97 1.23 100-pixel double-dashed segment
+ 1.72 1.77 1.00 1.00 3.25 10-pixel horizontal line segment
+ 1.83 1.66 1.01 1.00 3.54 100-pixel horizontal line segment
+ 1.86 1.30 1.00 1.00 1.84 500-pixel horizontal line segment
+ 2.11 1.52 1.00 0.99 3.02 10-pixel vertical line segment
+ 1.21 1.10 1.00 1.00 1.20 100-pixel vertical line segment
+ 1.03 1.03 1.00 1.00 1.02 500-pixel vertical line segment
+ 4.42 1.68 1.00 1.01 4.64 10x1 wide horizontal line segment
+ 1.83 1.31 1.00 1.00 1.83 100x10 wide horizontal line segment
+ 1.07 1.00 0.96 1.00 1.07 500x50 wide horizontal line segment
+ 4.10 1.67 1.00 1.00 4.62 10x1 wide vertical line segment
+ 1.50 1.24 1.06 1.06 1.48 100x10 wide vertical line segment
+ 1.06 1.03 1.00 1.00 1.05 500x50 wide vertical line segment
+ 2.54 1.61 1.00 1.00 3.61 1-pixel line
+ 2.71 1.48 1.00 1.00 2.67 10-pixel line
+ 1.19 1.09 1.00 1.00 1.19 100-pixel line
+ 1.04 1.02 1.00 1.00 1.03 500-pixel line
+ 2.68 1.51 0.98 1.00 3.17 10-pixel dashed line
+ 1.23 1.11 0.99 0.99 1.23 100-pixel dashed line
+ 1.15 1.08 1.00 1.00 1.15 100-pixel double-dashed line
+ 2.27 1.39 1.00 1.00 2.23 10x1 wide line
+ 1.20 1.09 1.00 1.00 1.20 100x10 wide line
+ 1.04 1.02 1.00 1.00 1.04 500x50 wide line
+ 1.52 1.45 1.00 1.00 1.52 100x10 wide dashed line
+ 1.54 1.47 1.00 1.00 1.54 100x10 wide double-dashed line
+ 1.97 1.30 0.96 0.95 1.95 10x10 rectangle outline
+ 1.44 1.27 1.00 1.00 1.43 100x100 rectangle outline
+ 3.22 2.16 1.10 1.09 3.61 500x500 rectangle outline
+ 1.95 1.34 1.00 1.00 1.90 10x10 wide rectangle outline
+ 1.14 1.14 1.00 1.00 1.13 100x100 wide rectangle outline
+ 1.00 1.00 1.00 1.00 1.00 500x500 wide rectangle outline
+ 1.57 1.72 1.00 1.00 3.03 1-pixel circle
+ 1.96 1.35 1.00 1.00 1.92 10-pixel circle
+ 1.21 1.07 0.86 0.97 1.20 100-pixel circle
+ 1.08 1.04 1.00 1.00 1.08 500-pixel circle
+ 1.39 1.19 1.03 1.03 1.38 100-pixel dashed circle
+ 1.21 1.11 1.00 1.00 1.23 100-pixel double-dashed circle
+ 1.59 1.28 1.00 1.00 1.58 10-pixel wide circle
+ 1.22 1.12 0.99 1.00 1.22 100-pixel wide circle
+ 1.06 1.04 1.00 1.00 1.05 500-pixel wide circle
+ 1.87 1.84 1.00 1.00 1.85 100-pixel wide dashed circle
+ 1.90 1.93 1.01 1.01 1.90 100-pixel wide double-dashed circle
+ 2.13 1.43 1.00 1.00 2.32 10-pixel partial circle
+ 1.42 1.18 1.00 1.00 1.42 100-pixel partial circle
+ 1.92 1.85 1.01 1.01 1.89 10-pixel wide partial circle
+ 1.73 1.67 1.00 1.00 1.73 100-pixel wide partial circle
+ 1.36 1.95 1.00 1.00 2.64 1-pixel solid circle
+ 2.02 1.37 1.00 1.00 2.03 10-pixel solid circle
+ 1.19 1.09 1.00 1.00 1.19 100-pixel solid circle
+ 1.02 0.99 1.00 1.00 1.01 500-pixel solid circle
+ 1.74 1.28 1.00 0.88 1.73 10-pixel fill chord partial circle
+ 1.31 1.13 1.00 1.00 1.31 100-pixel fill chord partial circle
+ 1.67 1.31 1.03 1.03 1.72 10-pixel fill slice partial circle
+ 1.30 1.13 1.00 1.00 1.28 100-pixel fill slice partial circle
+ 2.45 1.49 1.01 1.00 2.71 10-pixel ellipse
+ 1.22 1.10 1.00 1.00 1.22 100-pixel ellipse
+ 1.09 1.04 1.00 1.00 1.09 500-pixel ellipse
+ 1.90 1.28 1.00 1.00 1.89 100-pixel dashed ellipse
+ 1.62 1.24 0.96 0.97 1.61 100-pixel double-dashed ellipse
+ 2.43 1.50 1.00 1.00 2.42 10-pixel wide ellipse
+ 1.61 1.28 1.03 1.03 1.60 100-pixel wide ellipse
+ 1.08 1.05 1.00 1.00 1.08 500-pixel wide ellipse
+ 1.93 1.88 1.00 1.00 1.88 100-pixel wide dashed ellipse
+ 1.94 1.89 1.01 1.00 1.94 100-pixel wide double-dashed ellipse
+ 2.31 1.48 1.00 1.00 2.67 10-pixel partial ellipse
+ 1.38 1.17 1.00 1.00 1.38 100-pixel partial ellipse
+ 2.00 1.85 0.98 0.97 1.98 10-pixel wide partial ellipse
+ 1.89 1.86 1.00 1.00 1.89 100-pixel wide partial ellipse
+ 3.49 1.60 1.00 1.00 3.65 10-pixel filled ellipse
+ 1.67 1.26 1.00 1.00 1.67 100-pixel filled ellipse
+ 1.06 1.04 1.00 1.00 1.06 500-pixel filled ellipse
+ 2.38 1.43 1.01 1.00 2.32 10-pixel fill chord partial ellipse
+ 2.06 1.30 1.00 1.00 2.05 100-pixel fill chord partial ellipse
+ 2.27 1.41 1.00 1.00 2.27 10-pixel fill slice partial ellipse
+ 1.98 1.33 1.00 0.97 1.97 100-pixel fill slice partial ellipse
+ 57.46 1.99 1.01 1.00 114.92 Fill 1x1 equivalent triangle
+ 56.94 1.98 1.01 1.00 73.89 Fill 10x10 equivalent triangle
+ 6.07 1.75 1.00 1.00 6.07 Fill 100x100 equivalent triangle
+ 51.12 1.98 1.00 1.00 102.81 Fill 1x1 trapezoid
+ 51.42 1.82 1.01 1.00 94.89 Fill 10x10 trapezoid
+ 6.47 1.80 1.00 1.00 6.44 Fill 100x100 trapezoid
+ 1.56 1.28 1.00 0.99 1.56 Fill 300x300 trapezoid
+ 51.27 1.97 0.96 0.97 102.54 Fill 1x1 stippled trapezoid (8x8 stipple)
+ 51.73 2.00 1.02 1.02 67.92 Fill 10x10 stippled trapezoid (8x8 stipple)
+ 5.36 1.72 1.00 1.00 5.36 Fill 100x100 stippled trapezoid (8x8 stipple)
+ 1.54 1.26 1.00 1.00 1.59 Fill 300x300 stippled trapezoid (8x8 stipple)
+ 51.41 1.94 1.01 1.00 102.82 Fill 1x1 opaque stippled trapezoid (8x8 stipple)
+ 50.71 1.95 0.99 1.00 65.44 Fill 10x10 opaque stippled trapezoid (8x8...
+ 5.33 1.73 1.00 1.00 5.36 Fill 100x100 opaque stippled trapezoid (8x8...
+ 1.58 1.25 1.00 1.00 1.58 Fill 300x300 opaque stippled trapezoid (8x8...
+ 51.56 1.96 0.99 0.90 103.68 Fill 1x1 tiled trapezoid (4x4 tile)
+ 51.59 1.99 1.01 1.01 62.25 Fill 10x10 tiled trapezoid (4x4 tile)
+ 5.38 1.72 1.00 1.00 5.38 Fill 100x100 tiled trapezoid (4x4 tile)
+ 1.54 1.25 1.00 0.99 1.58 Fill 300x300 tiled trapezoid (4x4 tile)
+ 51.70 1.98 1.01 1.01 103.98 Fill 1x1 stippled trapezoid (17x15 stipple)
+ 44.86 1.97 1.00 1.00 44.86 Fill 10x10 stippled trapezoid (17x15 stipple)
+ 2.74 1.56 1.00 1.00 2.73 Fill 100x100 stippled trapezoid (17x15 stipple)
+ 1.29 1.14 1.00 1.00 1.27 Fill 300x300 stippled trapezoid (17x15 stipple)
+ 51.41 1.96 0.96 0.95 103.39 Fill 1x1 opaque stippled trapezoid (17x15...
+ 45.14 1.96 1.01 1.00 45.14 Fill 10x10 opaque stippled trapezoid (17x15...
+ 2.68 1.56 1.00 1.00 2.68 Fill 100x100 opaque stippled trapezoid (17x15...
+ 1.26 1.10 1.00 1.00 1.28 Fill 300x300 opaque stippled trapezoid (17x15...
+ 51.13 1.97 1.00 0.99 103.39 Fill 1x1 tiled trapezoid (17x15 tile)
+ 47.58 1.96 1.00 1.00 47.86 Fill 10x10 tiled trapezoid (17x15 tile)
+ 2.74 1.56 1.00 1.00 2.74 Fill 100x100 tiled trapezoid (17x15 tile)
+ 1.29 1.14 1.00 1.00 1.28 Fill 300x300 tiled trapezoid (17x15 tile)
+ 51.13 1.97 0.99 0.97 103.39 Fill 1x1 stippled trapezoid (161x145 stipple)
+ 45.14 1.97 1.00 1.00 44.29 Fill 10x10 stippled trapezoid (161x145 stipple)
+ 3.02 1.77 1.12 1.12 3.38 Fill 100x100 stippled trapezoid (161x145 stipple)
+ 1.31 1.13 1.00 1.00 1.30 Fill 300x300 stippled trapezoid (161x145 stipple)
+ 51.27 1.97 1.00 1.00 103.10 Fill 1x1 opaque stippled trapezoid (161x145...
+ 45.01 1.97 1.00 1.00 45.01 Fill 10x10 opaque stippled trapezoid (161x145...
+ 2.67 1.56 1.00 1.00 2.69 Fill 100x100 opaque stippled trapezoid (161x145..
+ 1.29 1.13 1.00 1.01 1.27 Fill 300x300 opaque stippled trapezoid (161x145..
+ 51.41 1.96 1.00 0.99 103.39 Fill 1x1 tiled trapezoid (161x145 tile)
+ 45.01 1.96 0.98 1.00 45.01 Fill 10x10 tiled trapezoid (161x145 tile)
+ 2.62 1.36 1.00 1.00 2.69 Fill 100x100 tiled trapezoid (161x145 tile)
+ 1.27 1.13 1.00 1.00 1.22 Fill 300x300 tiled trapezoid (161x145 tile)
+ 51.13 1.98 1.00 1.00 103.39 Fill 1x1 tiled trapezoid (216x208 tile)
+ 45.14 1.97 1.01 0.99 45.14 Fill 10x10 tiled trapezoid (216x208 tile)
+ 2.62 1.55 1.00 1.00 2.71 Fill 100x100 tiled trapezoid (216x208 tile)
+ 1.28 1.13 1.00 1.00 1.20 Fill 300x300 tiled trapezoid (216x208 tile)
+ 50.71 1.95 1.00 1.00 54.70 Fill 10x10 equivalent complex polygon
+ 5.51 1.71 0.96 0.98 5.47 Fill 100x100 equivalent complex polygons
+ 8.39 1.97 1.00 1.00 16.75 Fill 10x10 64-gon (Convex)
+ 8.38 1.83 1.00 1.00 8.43 Fill 100x100 64-gon (Convex)
+ 8.50 1.96 1.00 1.00 16.64 Fill 10x10 64-gon (Complex)
+ 8.26 1.83 1.00 1.00 8.35 Fill 100x100 64-gon (Complex)
+ 14.09 1.87 1.00 1.00 14.05 Char in 80-char line (6x13)
+ 11.91 1.87 1.00 1.00 11.95 Char in 70-char line (8x13)
+ 11.16 1.85 1.01 1.00 11.10 Char in 60-char line (9x15)
+ 10.09 1.78 1.00 1.00 10.09 Char16 in 40-char line (k14)
+ 6.15 1.75 1.00 1.00 6.31 Char16 in 23-char line (k24)
+ 11.92 1.90 1.03 1.03 11.88 Char in 80-char line (TR 10)
+ 8.18 1.78 1.00 0.99 8.17 Char in 30-char line (TR 24)
+ 42.83 1.44 1.01 1.00 42.11 Char in 20/40/20 line (6x13, TR 10)
+ 27.45 1.43 1.01 1.01 27.45 Char16 in 7/14/7 line (k14, k24)
+ 12.13 1.85 1.00 1.00 12.05 Char in 80-char image line (6x13)
+ 10.00 1.84 1.00 1.00 10.00 Char in 70-char image line (8x13)
+ 9.18 1.83 1.00 1.00 9.12 Char in 60-char image line (9x15)
+ 9.66 1.82 0.98 0.95 9.66 Char16 in 40-char image line (k14)
+ 5.82 1.72 1.00 1.00 5.99 Char16 in 23-char image line (k24)
+ 8.70 1.80 1.00 1.00 8.65 Char in 80-char image line (TR 10)
+ 4.67 1.66 1.00 1.00 4.67 Char in 30-char image line (TR 24)
+ 84.43 1.47 1.00 1.00 124.18 Scroll 10x10 pixels
+ 3.73 1.50 1.00 0.98 3.73 Scroll 100x100 pixels
+ 1.00 1.00 1.00 1.00 1.00 Scroll 500x500 pixels
+ 84.43 1.51 1.00 1.00 134.02 Copy 10x10 from window to window
+ 3.62 1.51 0.98 0.98 3.62 Copy 100x100 from window to window
+ 0.89 1.00 1.00 1.00 1.00 Copy 500x500 from window to window
+ 57.06 1.99 1.00 1.00 88.64 Copy 10x10 from pixmap to window
+ 2.49 2.00 1.00 1.00 2.48 Copy 100x100 from pixmap to window
+ 1.00 0.91 1.00 1.00 0.98 Copy 500x500 from pixmap to window
+ 2.04 1.01 1.00 1.00 2.03 Copy 10x10 from window to pixmap
+ 1.05 1.00 1.00 1.00 1.05 Copy 100x100 from window to pixmap
+ 1.00 1.00 0.93 1.00 1.04 Copy 500x500 from window to pixmap
+ 58.52 1.03 1.03 1.02 57.95 Copy 10x10 from pixmap to pixmap
+ 2.40 1.00 1.00 1.00 2.45 Copy 100x100 from pixmap to pixmap
+ 1.00 1.00 1.00 1.00 1.00 Copy 500x500 from pixmap to pixmap
+ 51.57 1.92 1.00 1.00 85.75 Copy 10x10 1-bit deep plane
+ 6.37 1.75 1.01 1.01 6.37 Copy 100x100 1-bit deep plane
+ 1.26 1.11 1.00 1.00 1.24 Copy 500x500 1-bit deep plane
+ 4.23 1.63 0.98 0.97 4.38 Copy 10x10 n-bit deep plane
+ 1.04 1.02 1.00 1.00 1.04 Copy 100x100 n-bit deep plane
+ 1.00 1.00 1.00 1.00 1.00 Copy 500x500 n-bit deep plane
+ 6.45 1.98 1.00 1.26 12.80 PutImage 10x10 square
+ 1.10 1.87 1.00 1.83 2.11 PutImage 100x100 square
+ 1.02 1.93 1.00 1.91 1.91 PutImage 500x500 square
+ 4.17 1.78 1.00 1.40 7.18 PutImage XY 10x10 square
+ 1.27 1.49 0.97 1.48 2.10 PutImage XY 100x100 square
+ 1.00 1.50 1.00 1.50 1.52 PutImage XY 500x500 square
+ 1.07 1.01 1.00 1.00 1.06 GetImage 10x10 square
+ 1.01 1.00 1.00 1.00 1.01 GetImage 100x100 square
+ 1.00 1.00 1.00 1.00 1.00 GetImage 500x500 square
+ 1.56 1.00 0.99 0.97 1.56 GetImage XY 10x10 square
+ 1.02 1.00 1.00 1.00 1.02 GetImage XY 100x100 square
+ 1.00 1.00 1.00 1.00 1.00 GetImage XY 500x500 square
+ 1.00 1.00 1.01 0.98 0.95 X protocol NoOperation
+ 1.02 1.03 1.04 1.03 1.00 QueryPointer
+ 1.03 1.02 1.04 1.03 1.00 GetProperty
+100.41 1.51 1.00 1.00 198.76 Change graphics context
+ 45.81 1.00 0.99 0.97 57.10 Create and map subwindows (4 kids)
+ 78.45 1.01 1.02 1.02 63.07 Create and map subwindows (16 kids)
+ 73.91 1.01 1.00 1.00 56.37 Create and map subwindows (25 kids)
+ 73.22 1.00 1.00 1.00 49.07 Create and map subwindows (50 kids)
+ 72.36 1.01 0.99 1.00 32.14 Create and map subwindows (75 kids)
+ 70.34 1.00 1.00 1.00 30.12 Create and map subwindows (100 kids)
+ 55.00 1.00 1.00 0.99 23.75 Create and map subwindows (200 kids)
+ 55.30 1.01 1.00 1.00 141.03 Create unmapped window (4 kids)
+ 55.38 1.01 1.01 1.00 163.25 Create unmapped window (16 kids)
+ 54.75 0.96 1.00 0.99 166.95 Create unmapped window (25 kids)
+ 54.83 1.00 1.00 0.99 178.81 Create unmapped window (50 kids)
+ 55.38 1.01 1.01 1.00 181.20 Create unmapped window (75 kids)
+ 55.38 1.01 1.01 1.00 181.20 Create unmapped window (100 kids)
+ 54.87 1.01 1.01 1.00 182.05 Create unmapped window (200 kids)
+ 28.13 1.00 1.00 1.00 30.75 Map window via parent (4 kids)
+ 36.14 1.01 1.01 1.01 32.58 Map window via parent (16 kids)
+ 26.13 1.00 0.98 0.95 29.85 Map window via parent (25 kids)
+ 40.07 1.00 1.01 1.00 27.57 Map window via parent (50 kids)
+ 23.26 0.99 1.00 1.00 18.23 Map window via parent (75 kids)
+ 22.91 0.99 1.00 0.99 16.52 Map window via parent (100 kids)
+ 27.79 1.00 1.00 0.99 12.50 Map window via parent (200 kids)
+ 22.35 1.00 1.00 1.00 56.19 Unmap window via parent (4 kids)
+ 9.57 1.00 0.99 1.00 89.78 Unmap window via parent (16 kids)
+ 80.77 1.01 1.00 1.00 103.85 Unmap window via parent (25 kids)
+ 96.34 1.00 1.00 1.00 116.06 Unmap window via parent (50 kids)
+ 99.72 1.00 1.00 1.00 124.93 Unmap window via parent (75 kids)
+112.36 1.00 1.00 1.00 125.27 Unmap window via parent (100 kids)
+105.41 1.00 1.00 0.99 120.00 Unmap window via parent (200 kids)
+ 51.29 1.03 1.02 1.02 74.19 Destroy window via parent (4 kids)
+ 86.75 0.99 0.99 0.99 116.87 Destroy window via parent (16 kids)
+106.43 1.01 1.01 1.01 127.49 Destroy window via parent (25 kids)
+120.34 1.01 1.01 1.00 140.11 Destroy window via parent (50 kids)
+126.67 1.00 0.99 0.99 145.00 Destroy window via parent (75 kids)
+126.11 1.01 1.01 1.00 140.56 Destroy window via parent (100 kids)
+128.57 1.01 1.00 1.00 137.91 Destroy window via parent (200 kids)
+ 16.04 0.88 1.00 1.00 20.36 Hide/expose window via popup (4 kids)
+ 19.04 1.01 1.00 1.00 23.48 Hide/expose window via popup (16 kids)
+ 19.22 1.00 1.00 1.00 20.44 Hide/expose window via popup (25 kids)
+ 17.41 1.00 0.91 0.97 17.68 Hide/expose window via popup (50 kids)
+ 17.29 1.01 1.00 1.01 17.07 Hide/expose window via popup (75 kids)
+ 16.74 1.00 1.00 1.00 16.17 Hide/expose window via popup (100 kids)
+ 10.30 1.00 1.00 1.00 10.51 Hide/expose window via popup (200 kids)
+ 16.48 1.01 1.00 1.00 26.05 Move window (4 kids)
+ 17.01 0.95 1.00 1.00 23.97 Move window (16 kids)
+ 16.95 1.00 1.00 1.00 22.90 Move window (25 kids)
+ 16.05 1.01 1.00 1.00 21.32 Move window (50 kids)
+ 15.58 1.00 0.98 0.98 19.44 Move window (75 kids)
+ 14.98 1.02 1.03 1.03 18.17 Move window (100 kids)
+ 10.90 1.01 1.01 1.00 12.68 Move window (200 kids)
+ 49.42 1.00 1.00 1.00 198.27 Moved unmapped window (4 kids)
+ 50.72 0.97 1.00 1.00 193.66 Moved unmapped window (16 kids)
+ 50.87 1.00 0.99 1.00 195.09 Moved unmapped window (25 kids)
+ 50.72 1.00 1.00 1.00 189.34 Moved unmapped window (50 kids)
+ 50.87 1.00 1.00 1.00 191.33 Moved unmapped window (75 kids)
+ 50.87 1.00 1.00 0.90 186.71 Moved unmapped window (100 kids)
+ 50.87 1.00 1.00 1.00 179.19 Moved unmapped window (200 kids)
+ 41.04 1.00 1.00 1.00 56.61 Move window via parent (4 kids)
+ 69.81 1.00 1.00 1.00 130.82 Move window via parent (16 kids)
+ 95.81 1.00 1.00 1.00 141.92 Move window via parent (25 kids)
+ 95.98 1.00 1.00 1.00 149.43 Move window via parent (50 kids)
+ 96.59 1.01 1.01 1.00 153.98 Move window via parent (75 kids)
+ 97.19 1.00 1.00 1.00 157.30 Move window via parent (100 kids)
+ 96.67 1.00 0.99 0.96 159.44 Move window via parent (200 kids)
+ 17.75 1.01 1.00 1.00 27.61 Resize window (4 kids)
+ 17.94 1.00 1.00 0.99 25.42 Resize window (16 kids)
+ 17.92 1.01 1.00 1.00 24.47 Resize window (25 kids)
+ 17.24 0.97 1.00 1.00 24.14 Resize window (50 kids)
+ 16.81 1.00 1.00 0.99 22.75 Resize window (75 kids)
+ 16.08 1.00 1.00 1.00 21.20 Resize window (100 kids)
+ 12.92 1.00 0.99 1.00 16.26 Resize window (200 kids)
+ 52.94 1.01 1.00 1.00 327.12 Resize unmapped window (4 kids)
+ 53.60 1.01 1.01 1.01 333.71 Resize unmapped window (16 kids)
+ 52.99 1.00 1.00 1.00 337.29 Resize unmapped window (25 kids)
+ 51.98 1.00 1.00 1.00 329.38 Resize unmapped window (50 kids)
+ 53.05 0.89 1.00 1.00 322.60 Resize unmapped window (75 kids)
+ 53.05 1.00 1.00 1.00 318.08 Resize unmapped window (100 kids)
+ 53.11 1.00 1.00 0.99 306.21 Resize unmapped window (200 kids)
+ 16.76 1.00 0.96 1.00 19.46 Circulate window (4 kids)
+ 17.24 1.00 1.00 0.97 16.24 Circulate window (16 kids)
+ 16.30 1.03 1.03 1.03 15.85 Circulate window (25 kids)
+ 13.45 1.00 1.00 1.00 14.90 Circulate window (50 kids)
+ 12.91 1.00 1.00 1.00 13.06 Circulate window (75 kids)
+ 11.30 0.98 1.00 1.00 11.03 Circulate window (100 kids)
+ 7.58 1.01 1.01 0.99 7.47 Circulate window (200 kids)
+ 1.01 1.01 0.98 1.00 0.95 Circulate Unmapped window (4 kids)
+ 1.07 1.07 1.01 1.07 1.02 Circulate Unmapped window (16 kids)
+ 1.04 1.09 1.06 1.05 0.97 Circulate Unmapped window (25 kids)
+ 1.04 1.23 1.20 1.18 1.05 Circulate Unmapped window (50 kids)
+ 1.18 1.53 1.19 1.45 1.24 Circulate Unmapped window (75 kids)
+ 1.08 1.02 1.01 1.74 1.01 Circulate Unmapped window (100 kids)
+ 1.01 1.12 0.98 0.91 0.97 Circulate Unmapped window (200 kids)
+</screen>
+</para>
+</sect3>
+
+<sect3>
+<title>Profiling with OProfile</title>
+
+<para>OProfile (available from http://oprofile.sourceforge.net/) is a
+system-wide profiler for Linux systems that uses processor-level
+counters to collect sampling data. OProfile can provide information
+that is similar to that provided by <command>gprof</command>, but without the
+necessity of recompiling the program with special instrumentation (i.e.,
+OProfile can collect statistical profiling information about optimized
+programs). A test harness was developed to collect OProfile data for
+each <command>x11perf</command> test individually.
+</para>
+
+<para>Test runs were performed using the RETIRED_INSNS counter on the AMD
+Athlon and the CPU_CLK_HALTED counter on the Intel Pentium III (with a
+test configuration different from the one described above). We have
+examined OProfile output and have compared it with <command>gprof</command> output.
+This investigation has not produced results that yield performance
+increases in <command>x11perf</command> numbers.
+</para>
+
+</sect3>
+
+<!--
+<sect3>Retired Instructions
+
+<p>The initial tests using OProfile were done using the RETIRED_INSNS
+counter with DMX running on the dual-processor AMD Athlon machine - the
+same test configuration that was described above and that was used for
+other tests. The RETIRED_INSNS counter counts retired instructions and
+showed drawing, text, copying, and image tests to be dominated (&gt;
+30%) by calls to Hash(), SecurityLookupIDByClass(),
+SecurityLookupIDByType(), and StandardReadRequestFromClient(). Some of
+these tests also executed significant instructions in
+WaitForSomething().
+
+<p>In contrast, the window tests executed significant
+instructions in SecurityLookupIDByType(), Hash(),
+StandardReadRequestFromClient(), but also executed significant
+instructions in other routines, such as ConfigureWindow(). Some time
+was spent looking at Hash() function, but optimizations in this routine
+did not lead to a dramatic increase in <tt/x11perf/ performance.
+-->
+
+<!--
+<sect3>Clock Cycles
+
+<p>Retired instructions can be misleading because Intel/AMD instructions
+execute in variable amounts of time. The OProfile tests were repeated
+using the Intel CPU_CLK_HALTED counter with DMX running on the second
+back-end machine. Note that this is a different test configuration that
+the one described above. However, these tests show the amount of time
+(as measured in CPU cycles) that are spent in each routine. Because
+<tt/x11perf/ was running on the first back-end machine and because
+window optimizations were on, the load on the second back-end machine
+was not significant.
+
+<p>Using CPU_CLK_HALTED, DMX showed simple drawing
+tests spending more than 10% of their time in
+StandardReadRequestFromClient(), with significant time (&gt; 20% total)
+spent in SecurityLookupIDByClass(), WaitForSomething(), and Dispatch().
+For these tests, &lt; 5% of the time was spent in Hash(), which explains
+why optimizing the Hash() routine did not impact <tt/x11perf/ results.
+
+<p>The trapezoid, text, scrolling, copying, and image tests were
+dominated by time in ProcFillPoly(), PanoramiXFillPoly(), dmxFillPolygon(),
+SecurityLookupIDByClass(), SecurityLookupIDByType(), and
+StandardReadRequestFromClient(). Hash() time was generally above 5% but
+less than 10% of total time.
+-->
+
+<sect3>
+<title>X Test Suite</title>
+
+<para>The X Test Suite was run on the fully optimized DMX server using the
+configuration described above. The following failures were noted:
+<screen>
+XListPixmapFormats: Test 1 [1]
+XChangeWindowAttributes: Test 32 [1]
+XCreateWindow: Test 30 [1]
+XFreeColors: Test 4 [3]
+XCopyArea: Test 13, 17, 21, 25, 30 [2]
+XCopyPlane: Test 11, 15, 27, 31 [2]
+XSetFontPath: Test 4 [1]
+XChangeKeyboardControl: Test 9, 10 [1]
+
+[1] Previously documented errors expected from the Xinerama
+ implementation (see Phase I discussion).
+[2] Newly noted errors that have been verified as expected
+ behavior of the Xinerama implementation.
+[3] Newly noted error that has been verified as a Xinerama
+ implementation bug.
+</screen>
+</para>
+
+</sect3>
+
+</sect2>
+
+<!-- ============================================================ -->
+<sect2>
+<title>Phase III</title>
+
+<para>During the third phase of development, support was provided for the
+following extensions: SHAPE, RENDER, XKEYBOARD, XInput.
+</para>
+
+<sect3>
+<title>SHAPE</title>
+
+<para>The SHAPE extension is supported. Test applications (e.g., xeyes and
+oclock) and window managers that make use of the SHAPE extension will
+work as expected.
+</para>
+</sect3>
+
+<sect3>
+<title>RENDER</title>
+
+<para>The RENDER extension is supported. The version included in the DMX
+CVS tree is version 0.2, and this version is fully supported by Xdmx.
+Applications using only version 0.2 functions will work correctly;
+however, some apps that make use of functions from later versions do not
+properly check the extension's major/minor version numbers. These apps
+will fail with a Bad Implementation error when using post-version 0.2
+functions. This is expected behavior. When the DMX CVS tree is updated
+to include newer versions of RENDER, support for these newer functions
+will be added to the DMX X server.
+</para>
+</sect3>
+
+<sect3>
+<title>XKEYBOARD</title>
+
+<para>The XKEYBOARD extension is supported. If present on the back-end X
+servers, the XKEYBOARD extension will be used to obtain information
+about the type of the keyboard for initialization. Otherwise, the
+keyboard will be initialized using defaults. Note that this departs
+from older behavior: when Xdmx is compiled without XKEYBOARD support,
+the map from the back-end X server will be preserved. With XKEYBOARD
+support, the map is not preserved because better information and control
+of the keyboard is available.
+</para>
+</sect3>
+
+<sect3>
+<title>XInput</title>
+
+<para>The XInput extension is supported. Any device can be used as a core
+device and be used as an XInput extension device, with the exception of
+core devices on the back-end servers. This limitation is present
+because cursor handling on the back-end requires that the back-end
+cursor sometimes track the Xdmx core cursor -- behavior that is
+incompatible with using the back-end pointer as a non-core device.
+</para>
+
+<para>Currently, back-end extension devices are not available as Xdmx
+extension devices, but this limitation should be removed in the future.
+</para>
+
+<para>To demonstrate the XInput extension, and to provide more examples for
+low-level input device driver writers, USB device drivers have been
+written for mice (usb-mou), keyboards (usb-kbd), and
+non-mouse/non-keyboard USB devices (usb-oth). Please see the man page
+for information on Linux kernel drivers that are required for using
+these Xdmx drivers.
+</para>
+</sect3>
+
+<sect3>
+<title>DPMS</title>
+
+<para>The DPMS extension is exported but does not do anything at this time.
+</para>
+
+</sect3>
+
+<sect3>
+<title>Other Extensions</title>
+
+<para>The LBX,
+ SECURITY,
+ XC-APPGROUP, and
+ XFree86-Bigfont
+extensions do not require any special Xdmx support and have been exported.
+</para>
+
+<para>The
+ BIG-REQUESTS,
+ DEC-XTRAP,
+ DOUBLE-BUFFER,
+ Extended-Visual-Information,
+ FontCache,
+ GLX,
+ MIT-SCREEN-SAVER,
+ MIT-SHM,
+ MIT-SUNDRY-NONSTANDARD,
+ RECORD,
+ SECURITY,
+ SGI-GLX,
+ SYNC,
+ TOG-CUP,
+ X-Resource,
+ XC-MISC,
+ XFree86-DGA,
+ XFree86-DRI,
+ XFree86-Misc,
+ XFree86-VidModeExtension, and
+ XVideo
+extensions are <emphasis remap="it">not</emphasis> supported at this time, but will be evaluated
+for inclusion in future DMX releases. <emphasis remap="bf">See below for additional work
+on extensions after Phase III.</emphasis>
+</para>
+</sect3>
+</sect2>
+
+<sect2>
+<title>Phase IV</title>
+
+<sect3>
+<title>Moving to XFree86 4.3.0</title>
+
+<para>For Phase IV, the recent release of XFree86 4.3.0 (27 February 2003)
+was merged onto the dmx.sourceforge.net CVS trunk and all work is
+proceeding using this tree.
+</para>
+</sect3>
+
+<sect3>
+<title>Extensions </title>
+
+<sect4>
+<title>XC-MISC (supported)</title>
+
+<para>XC-MISC is used internally by the X library to recycle XIDs from the
+X server. This is important for long-running X server sessions. Xdmx
+supports this extension. The X Test Suite passed and failed the exact
+same tests before and after this extension was enabled.
+<!-- Tested February/March 2003 -->
+</para>
+</sect4>
+
+<sect4>
+<title>Extended-Visual-Information (supported)</title>
+
+<para>The Extended-Visual-Information extension provides a method for an X
+client to obtain detailed visual information. Xdmx supports this
+extension. It was tested using the <filename>hw/dmx/examples/evi</filename> example
+program. <emphasis remap="bf">Note that this extension is not Xinerama-aware</emphasis> -- it will
+return visual information for each screen even though Xinerama is
+causing the X server to export a single logical screen.
+<!-- Tested March 2003 -->
+</para>
+</sect4>
+
+<sect4>
+<title>RES (supported)</title>
+
+<para>The X-Resource extension provides a mechanism for a client to obtain
+detailed information about the resources used by other clients. This
+extension was tested with the <filename>hw/dmx/examples/res</filename> program. The
+X Test Suite passed and failed the exact same tests before and after
+this extension was enabled.
+<!-- Tested March 2003 -->
+</para>
+</sect4>
+
+<sect4>
+<title>BIG-REQUESTS (supported)</title>
+
+<para>This extension enables the X11 protocol to handle requests longer
+than 262140 bytes. The X Test Suite passed and failed the exact same
+tests before and after this extension was enabled.
+<!-- Tested March 2003 -->
+</para>
+</sect4>
+
+<sect4>
+<title>XSYNC (supported)</title>
+
+<para>This extension provides facilities for two different X clients to
+synchronize their requests. This extension was minimally tested with
+<command>xdpyinfo</command> and the X Test Suite passed and failed the exact same
+tests before and after this extension was enabled.
+<!-- Tested March 2003 -->
+</para>
+</sect4>
+
+<sect4>
+<title>XTEST, RECORD, DEC-XTRAP (supported) and XTestExtension1 (not supported)</title>
+
+<para>The XTEST and RECORD extension were developed by the X Consortium for
+use in the X Test Suite and are supported as a standard in the X11R6
+tree. They are also supported in Xdmx. When X Test Suite tests that
+make use of the XTEST extension are run, Xdmx passes and fails exactly
+the same tests as does a standard XFree86 X server. When the
+<literal remap="tt">rcrdtest</literal> test (a part of the X Test Suite that verifies the RECORD
+extension) is run, Xdmx passes and fails exactly the same tests as does
+a standard XFree86 X server. <!-- Tested February/March 2003 -->
+</para>
+
+<para>There are two older XTEST-like extensions: DEC-XTRAP and
+XTestExtension1. The XTestExtension1 extension was developed for use by
+the X Testing Consortium for use with a test suite that eventually
+became (part of?) the X Test Suite. Unlike XTEST, which only allows
+events to be sent to the server, the XTestExtension1 extension also
+allowed events to be recorded (similar to the RECORD extension). The
+second is the DEC-XTRAP extension that was developed by the Digital
+Equipment Corporation.
+</para>
+
+<para>The DEC-XTRAP extension is available from Xdmx and has been tested
+with the <command>xtrap*</command> tools which are distributed as standard X11R6
+clients. <!-- Tested March 2003 -->
+</para>
+
+<para>The XTestExtension1 is <emphasis>not</emphasis> supported because it does not appear
+to be used by any modern X clients (the few that support it also support
+XTEST) and because there are no good methods available for testing that
+it functions correctly (unlike XTEST and DEC-XTRAP, the code for
+XTestExtension1 is not part of the standard X server source tree, so
+additional testing is important). <!-- Tested March 2003 -->
+</para>
+
+<para>Most of these extensions are documented in the X11R6 source tree.
+Further, several original papers exist that this author was unable to
+locate -- for completeness and historical interest, citations are
+provide:
+<variablelist>
+<varlistentry>
+<term>XRECORD</term>
+<listitem>
+<para>Martha Zimet. Extending X For Recording. 8th Annual X
+Technical Conference Boston, MA January 24-26, 1994.
+</para></listitem></varlistentry>
+<varlistentry>
+<term>DEC-XTRAP</term>
+<listitem>
+<para>Dick Annicchiarico, Robert Chesler, Alan Jamison. XTrap
+Architecture. Digital Equipment Corporation, July 1991.
+</para></listitem></varlistentry>
+<varlistentry>
+<term>XTestExtension1</term>
+<listitem>
+<para>Larry Woestman. X11 Input Synthesis Extension
+Proposal. Hewlett Packard, November 1991.
+</para></listitem></varlistentry>
+</variablelist>
+</para>
+</sect4>
+
+<sect4>
+<title>MIT-MISC (not supported)</title>
+
+<para>The MIT-MISC extension is used to control a bug-compatibility flag
+that provides compatibility with xterm programs from X11R1 and X11R2.
+There does not appear to be a single client available that makes use of
+this extension and there is not way to verify that it works correctly.
+The Xdmx server does <emphasis>not</emphasis> support MIT-MISC.
+</para>
+</sect4>
+
+<sect4>
+<title>SCREENSAVER (not supported)</title>
+
+<para>This extension provides special support for the X screen saver. It
+was tested with beforelight, which appears to be the only client that
+works with it. When Xinerama was not active, <command>beforelight</command> behaved
+as expected. However, when Xinerama was active, <command>beforelight</command> did
+not behave as expected. Further, when this extension is not active,
+<command>xscreensaver</command> (a widely-used X screen saver program) did not behave
+as expected. Since this extension is not Xinerama-aware and is not
+commonly used with expected results by clients, we have left this
+extension disabled at this time.
+</para>
+</sect4>
+
+<sect4>
+<title>GLX (supported)</title>
+
+<para>The GLX extension provides OpenGL and GLX windowing support. In
+Xdmx, the extension is called glxProxy, and it is Xinerama aware. It
+works by either feeding requests forward through Xdmx to each of the
+back-end servers or handling them locally. All rendering requests are
+handled on the back-end X servers. This code was donated to the DMX
+project by SGI. For the X Test Suite results comparison, see below.
+</para>
+</sect4>
+
+<sect4>
+<title>RENDER (supported)</title>
+
+<para>The X Rendering Extension (RENDER) provides support for digital image
+composition. Geometric and text rendering are supported. RENDER is
+partially Xinerama-aware, with text and the most basic compositing
+operator; however, its higher level primitives (triangles, triangle
+strips, and triangle fans) are not yet Xinerama-aware. The RENDER
+extension is still under development, and is currently at version 0.8.
+Additional support will be required in DMX as more primitives and/or
+requests are added to the extension.
+</para>
+
+<para>There is currently no test suite for the X Rendering Extension;
+however, there has been discussion of developing a test suite as the
+extension matures. When that test suite becomes available, additional
+testing can be performed with Xdmx. The X Test Suite passed and failed
+the exact same tests before and after this extension was enabled.
+</para>
+</sect4>
+
+<sect4>
+<title>Summary</title>
+
+<!-- WARNING: this list is duplicated in the "Common X extension
+support" section -->
+<para>To summarize, the following extensions are currently supported:
+ BIG-REQUESTS,
+ DEC-XTRAP,
+ DMX,
+ DPMS,
+ Extended-Visual-Information,
+ GLX,
+ LBX,
+ RECORD,
+ RENDER,
+ SECURITY,
+ SHAPE,
+ SYNC,
+ X-Resource,
+ XC-APPGROUP,
+ XC-MISC,
+ XFree86-Bigfont,
+ XINERAMA,
+ XInputExtension,
+ XKEYBOARD, and
+ XTEST.
+</para>
+
+<para>The following extensions are <emphasis>not</emphasis> supported at this time:
+ DOUBLE-BUFFER,
+ FontCache,
+ MIT-SCREEN-SAVER,
+ MIT-SHM,
+ MIT-SUNDRY-NONSTANDARD,
+ TOG-CUP,
+ XFree86-DGA,
+ XFree86-Misc,
+ XFree86-VidModeExtension,
+ XTestExtensionExt1, and
+ XVideo.
+</para>
+</sect4>
+</sect3>
+
+<sect3>
+<title>Additional Testing with the X Test Suite</title>
+
+<sect4>
+<title>XFree86 without XTEST</title>
+
+<para>After the release of XFree86 4.3.0, we retested the XFree86 X server
+with and without using the XTEST extension. When the XTEST extension
+was <emphasis>not</emphasis> used for testing, the XFree86 4.3.0 server running on our
+usual test system with a Radeon VE card reported unexpected failures in
+the following tests:
+<literallayout>
+XListPixmapFormats: Test 1
+XChangeKeyboardControl: Tests 9, 10
+XGetDefault: Test 5
+XRebindKeysym: Test 1
+</literallayout>
+</para>
+</sect4>
+
+<sect4>
+<title>XFree86 with XTEST</title>
+
+<para>When using the XTEST extension, the XFree86 4.3.0 server reported the
+following errors:
+<literallayout>
+XListPixmapFormats: Test 1
+XChangeKeyboardControl: Tests 9, 10
+XGetDefault: Test 5
+XRebindKeysym: Test 1
+
+XAllowEvents: Tests 20, 21, 24
+XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+XGrabKey: Test 8
+XSetPointerMapping: Test 3
+XUngrabButton: Test 4
+</literallayout>
+</para>
+
+<para>While these errors may be important, they will probably be fixed
+eventually in the XFree86 source tree. We are particularly interested
+in demonstrating that the Xdmx server does not introduce additional
+failures that are not known Xinerama failures.
+</para>
+</sect4>
+
+<sect4>
+<title>Xdmx with XTEST, without Xinerama, without GLX</title>
+
+<para>Without Xinerama, but using the XTEST extension, the following errors
+were reported from Xdmx (note that these are the same as for the XFree86
+4.3.0, except that XGetDefault no longer fails):
+<literallayout>
+XListPixmapFormats: Test 1
+XChangeKeyboardControl: Tests 9, 10
+XRebindKeysym: Test 1
+
+XAllowEvents: Tests 20, 21, 24
+XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+XGrabKey: Test 8
+XSetPointerMapping: Test 3
+XUngrabButton: Test 4
+</literallayout>
+</para>
+</sect4>
+
+<sect4>
+<title>Xdmx with XTEST, with Xinerama, without GLX</title>
+
+<para>With Xinerama, using the XTEST extension, the following errors
+were reported from Xdmx:
+<literallayout>
+XListPixmapFormats: Test 1
+XChangeKeyboardControl: Tests 9, 10
+XRebindKeysym: Test 1
+
+XAllowEvents: Tests 20, 21, 24
+XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+XGrabKey: Test 8
+XSetPointerMapping: Test 3
+XUngrabButton: Test 4
+
+XCopyPlane: Tests 13, 22, 31 (well-known XTEST/Xinerama interaction issue)
+XDrawLine: Test 67
+XDrawLines: Test 91
+XDrawSegments: Test 68
+</literallayout>
+Note that the first two sets of errors are the same as for the XFree86
+4.3.0 server, and that the XCopyPlane error is a well-known error
+resulting from an XTEST/Xinerama interaction when the request crosses a
+screen boundary. The XDraw* errors are resolved when the tests are run
+individually and they do not cross a screen boundary. We will
+investigate these errors further to determine their cause.
+</para>
+</sect4>
+
+<sect4>
+<title>Xdmx with XTEST, with Xinerama, with GLX</title>
+
+<para>With GLX enabled, using the XTEST extension, the following errors
+were reported from Xdmx (these results are from early during the Phase
+IV development, but were confirmed with a late Phase IV snapshot):
+<literallayout>
+XListPixmapFormats: Test 1
+XChangeKeyboardControl: Tests 9, 10
+XRebindKeysym: Test 1
+
+XAllowEvents: Tests 20, 21, 24
+XGrabButton: Tests 5, 9-12, 14, 16, 19, 21-25
+XGrabKey: Test 8
+XSetPointerMapping: Test 3
+XUngrabButton: Test 4
+
+XClearArea: Test 8
+XCopyArea: Tests 4, 5, 11, 14, 17, 23, 25, 27, 30
+XCopyPlane: Tests 6, 7, 10, 19, 22, 31
+XDrawArcs: Tests 89, 100, 102
+XDrawLine: Test 67
+XDrawSegments: Test 68
+</literallayout>
+Note that the first two sets of errors are the same as for the XFree86
+4.3.0 server, and that the third set has different failures than when
+Xdmx does not include GLX support. Since the GLX extension adds new
+visuals to support GLX's visual configs and the X Test Suite runs tests
+over the entire set of visuals, additional rendering tests were run and
+presumably more of them crossed a screen boundary. This conclusion is
+supported by the fact that nearly all of the rendering errors reported
+are resolved when the tests are run individually and they do no cross a
+screen boundary.
+</para>
+
+<para>Further, when hardware rendering is disabled on the back-end displays,
+many of the errors in the third set are eliminated, leaving only:
+<literallayout>
+XClearArea: Test 8
+XCopyArea: Test 4, 5, 11, 14, 17, 23, 25, 27, 30
+XCopyPlane: Test 6, 7, 10, 19, 22, 31
+</literallayout>
+</para>
+</sect4>
+
+<sect4>
+<title>Conclusion</title>
+
+<para>We conclude that all of the X Test Suite errors reported for Xdmx are
+the result of errors in the back-end X server or the Xinerama
+implementation. Further, all of these errors that can be reasonably
+fixed at the Xdmx layer have been. (Where appropriate, we have
+submitted patches to the XFree86 and Xinerama upstream maintainers.)
+</para>
+</sect4>
+</sect3>
+
+<sect3>
+<title>Dynamic Reconfiguration</title>
+
+<para>During this development phase, dynamic reconfiguration support was
+added to DMX. This support allows an application to change the position
+and offset of a back-end server's screen. For example, if the
+application would like to shift a screen slightly to the left, it could
+query Xdmx for the screen's &lt;x,y&gt; position and then dynamically
+reconfigure that screen to be at position &lt;x+10,y&gt;. When a screen
+is dynamically reconfigured, input handling and a screen's root window
+dimensions are adjusted as needed. These adjustments are transparent to
+the user.
+</para>
+
+<sect4>
+<title>Dynamic reconfiguration extension</title>
+
+<para>The application interface to DMX's dynamic reconfiguration is through
+a function in the DMX extension library:
+<programlisting>
+Bool DMXReconfigureScreen(Display *dpy, int screen, int x, int y)
+</programlisting>
+where <parameter>dpy</parameter> is DMX server's display, <parameter>screen</parameter> is the number of the
+screen to be reconfigured, and <parameter>x</parameter> and <parameter>y</parameter> are the new upper,
+left-hand coordinates of the screen to be reconfigured.
+</para>
+
+<para>The coordinates are not limited other than as required by the X
+protocol, which limits all coordinates to a signed 16 bit number. In
+addition, all coordinates within a screen must also be legal values.
+Therefore, setting a screen's upper, left-hand coordinates such that the
+right or bottom edges of the screen is greater than 32,767 is illegal.
+</para>
+</sect4>
+
+<sect4>
+<title>Bounding box</title>
+
+<para>When the Xdmx server is started, a bounding box is calculated from
+the screens' layout given either on the command line or in the
+configuration file. This bounding box is currently fixed for the
+lifetime of the Xdmx server.
+</para>
+
+<para>While it is possible to move a screen outside of the bounding box, it
+is currently not possible to change the dimensions of the bounding box.
+For example, it is possible to specify coordinates of &lt;-100,-100&gt;
+for the upper, left-hand corner of the bounding box, which was
+previously at coordinates &lt;0,0&gt;. As expected, the screen is moved
+down and to the right; however, since the bounding box is fixed, the
+left side and upper portions of the screen exposed by the
+reconfiguration are no longer accessible on that screen. Those
+inaccessible regions are filled with black.
+</para>
+
+<para>This fixed bounding box limitation will be addressed in a future
+development phase.
+</para>
+</sect4>
+
+<sect4>
+<title>Sample applications</title>
+
+<para>An example of where this extension is useful is in setting up a video
+wall. It is not always possible to get everything perfectly aligned,
+and sometimes the positions are changed (e.g., someone might bump into a
+projector). Instead of physically moving projectors or monitors, it is
+now possible to adjust the positions of the back-end server's screens
+using the dynamic reconfiguration support in DMX.
+</para>
+
+<para>Other applications, such as automatic setup and calibration tools,
+can make use of dynamic reconfiguration to correct for projector
+alignment problems, as long as the projectors are still arranged
+rectilinearly. Horizontal and vertical keystone correction could be
+applied to projectors to correct for non-rectilinear alignment problems;
+however, this must be done external to Xdmx.
+</para>
+
+<para>A sample test program is included in the DMX server's examples
+directory to demonstrate the interface and how an application might use
+dynamic reconfiguration. See <filename>dmxreconfig.c</filename> for details.
+</para>
+</sect4>
+
+<sect4>
+<title>Additional notes</title>
+
+<para>In the original development plan, Phase IV was primarily devoted to
+adding OpenGL support to DMX; however, SGI became interested in the DMX
+project and developed code to support OpenGL/GLX. This code was later
+donated to the DMX project and integrated into the DMX code base, which
+freed the DMX developers to concentrate on dynamic reconfiguration (as
+described above).
+</para>
+</sect4>
+</sect3>
+
+<sect3>
+<title>Doxygen documentation</title>
+
+<para>Doxygen is an open-source (GPL) documentation system for generating
+browseable documentation from stylized comments in the source code. We
+have placed all of the Xdmx server and DMX protocol source code files
+under Doxygen so that comprehensive documentation for the Xdmx source
+code is available in an easily browseable format.
+</para>
+</sect3>
+
+<sect3>
+<title>Valgrind</title>
+
+<para>Valgrind, an open-source (GPL) memory debugger for Linux, was used to
+search for memory management errors. Several memory leaks were detected
+and repaired. The following errors were not addressed:
+<orderedlist>
+ <listitem><para>
+ When the X11 transport layer sends a reply to the client, only
+ those fields that are required by the protocol are filled in --
+ unused fields are left as uninitialized memory and are therefore
+ noted by valgrind. These instances are not errors and were not
+ repaired.
+ </para></listitem>
+ <listitem><para>
+ At each server generation, glxInitVisuals allocates memory that
+ is never freed. The amount of memory lost each generation
+ approximately equal to 128 bytes for each back-end visual.
+ Because the code involved is automatically generated, this bug
+ has not been fixed and will be referred to SGI.
+ </para></listitem>
+ <listitem><para>
+ At each server generation, dmxRealizeFont calls XLoadQueryFont,
+ which allocates a font structure that is not freed.
+ dmxUnrealizeFont can free the font structure for the first
+ screen, but cannot free it for the other screens since they are
+ already closed by the time dmxUnrealizeFont could free them.
+ The amount of memory lost each generation is approximately equal
+ to 80 bytes per font per back-end. When this bug is fixed in
+ the the X server's device-independent (dix) code, DMX will be
+ able to properly free the memory allocated by XLoadQueryFont.
+ </para></listitem>
+</orderedlist>
+</para>
+</sect3>
+
+<sect3>
+<title>RATS</title>
+
+<para>RATS (Rough Auditing Tool for Security) is an open-source (GPL)
+security analysis tool that scans source code for common
+security-related programming errors (e.g., buffer overflows and TOCTOU
+races). RATS was used to audit all of the code in the hw/dmx directory
+and all "High" notations were checked manually. The code was either
+re-written to eliminate the warning, or a comment containing "RATS" was
+inserted on the line to indicate that a human had checked the code.
+Unrepaired warnings are as follows:
+<orderedlist>
+ <listitem><para>
+ Fixed-size buffers are used in many areas, but code has been
+ added to protect against buffer overflows (e.g., XmuSnprint).
+ The only instances that have not yet been fixed are in
+ config/xdmxconfig.c (which is not part of the Xdmx server) and
+ input/usb-common.c.
+ </para></listitem>
+ <listitem><para>
+ vprintf and vfprintf are used in the logging routines. In
+ general, all uses of these functions (e.g., dmxLog) provide a
+ constant format string from a trusted source, so the use is
+ relatively benign.
+ </para></listitem>
+ <listitem><para>
+ glxProxy/glxscreens.c uses getenv and strcat. The use of these
+ functions is safe and will remain safe as long as
+ ExtensionsString is longer then GLXServerExtensions (ensuring
+ this may not be ovious to the casual programmer, but this is in
+ automatically generated code, so we hope that the generator
+ enforces this constraint).
+ </para></listitem>
+</orderedlist>
+
+</para>
+
+</sect3>
+
+</sect2>
+
+</sect1>
+
+</appendix>
+
+ </article>
+
+ <!-- Local Variables: -->
+ <!-- fill-column: 72 -->
+ <!-- End: -->
diff --git a/hw/dmx/doc/doxygen.conf b/hw/dmx/doc/doxygen.conf
new file mode 100644
index 0000000..a9a4228
--- /dev/null
+++ b/hw/dmx/doc/doxygen.conf
@@ -0,0 +1,1053 @@
+# Doxyfile 1.3.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "Distributed Multihead X"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = "dmx-1-2-20040604 and later"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ./.. \
+ ./../input \
+ ./../config
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = ./../config/parser.c \
+ ./../config/parser.h \
+ ./../config/scanner.c
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = YES
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS = atKeynames.h \
+ Canvas*.*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = ./doxygen.head
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = ./doxygen.foot
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET = ./doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output dir.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED = SHAPE \
+ RENDER \
+ XKB \
+ XINPUT
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similiar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/hw/dmx/doc/doxygen.conf.in b/hw/dmx/doc/doxygen.conf.in
new file mode 100644
index 0000000..f886a43
--- /dev/null
+++ b/hw/dmx/doc/doxygen.conf.in
@@ -0,0 +1,1053 @@
+# Doxyfile 1.3.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = "Distributed Multihead X"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = "dmx-1-2-20040604 and later"
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
+# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
+# (Japanese with English messages), Korean, Norwegian, Polish, Portuguese,
+# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
+# members of a class in the documentation of that class as if those members were
+# ordinary class members. Constructors, destructors and assignment operators of
+# the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. It is allowed to use relative paths in the argument list.
+
+STRIP_FROM_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explict @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# reimplements.
+
+INHERIT_DOCS = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
+# only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = YES
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text.
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = @srcdir@/.. \
+ @srcdir@/../input \
+ @srcdir@/../config
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
+# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc
+
+FILE_PATTERNS =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = @srcdir@/../config/parser.c \
+ @srcdir@/../config/parser.h \
+ @srcdir@/../config/scanner.c
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
+# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+
+EXCLUDE_SYMLINKS = YES
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+
+EXCLUDE_PATTERNS = atKeynames.h \
+ Canvas*.*
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+
+INPUT_FILTER =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER = @srcdir@/doxygen.head
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = @srcdir@/doxygen.foot
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet
+
+HTML_STYLESHEET = @srcdir@/doxygen.css
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output dir.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimised for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assigments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_PREDEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed.
+
+PREDEFINED = SHAPE \
+ RENDER \
+ XKB \
+ XINPUT
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse the
+# parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or
+# super classes. Setting the tag to NO turns the diagrams off. Note that this
+# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
+# recommended to install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similiar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = gif
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found on the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes that
+# lay further from the root node will be omitted. Note that setting this option to
+# 1 or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that a graph may be further truncated if the graph's image dimensions are
+# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT).
+# If 0 is used for the depth value (the default), the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::addtions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/hw/dmx/doc/doxygen.css b/hw/dmx/doc/doxygen.css
new file mode 100644
index 0000000..841f709
--- /dev/null
+++ b/hw/dmx/doc/doxygen.css
@@ -0,0 +1,49 @@
+H1 { text-align: center; }
+CAPTION { font-weight: bold }
+A.qindex {}
+A.qindexRef {}
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #f2f2ff; font-weight: bold; }
+TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
+BODY { background: white }
+TD.indexkey {
+ background-color: #eeeeff;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+TD.indexvalue {
+ background-color: #eeeeff;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+FONT.keyword { color: #008000 }
+FONT.keywordtype { color: #604020 }
+FONT.keywordflow { color: #e08000 }
+FONT.comment { color: #800000 }
+FONT.preprocessor { color: #806020 }
+FONT.stringliteral { color: #002080 }
+FONT.charliteral { color: #008080 }
diff --git a/hw/dmx/doc/doxygen.foot b/hw/dmx/doc/doxygen.foot
new file mode 100644
index 0000000..3aca117
--- /dev/null
+++ b/hw/dmx/doc/doxygen.foot
@@ -0,0 +1,12 @@
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/doxygen.head b/hw/dmx/doc/doxygen.head
new file mode 100644
index 0000000..89bda8f
--- /dev/null
+++ b/hw/dmx/doc/doxygen.head
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
diff --git a/hw/dmx/doc/html/ChkNotMaskEv_8c.html b/hw/dmx/doc/html/ChkNotMaskEv_8c.html
new file mode 100644
index 0000000..85463f1
--- /dev/null
+++ b/hw/dmx/doc/html/ChkNotMaskEv_8c.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('ChkNotMaskEv_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>ChkNotMaskEv.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;dmx.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="ChkNotMaskEv_8h_source.html">ChkNotMaskEv.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ChkNotMaskEv_8c.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent</a> (Display *dpy, long mask, XEvent *event)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ChkNotMaskEv_8c.html#a653c12c824c0297b32b16e69fdc6b1a5">_Xevent_to_mask</a> []</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides a <a class="el" href="ChkNotMaskEv_8h.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent</a> function that is derived from the standard Xlib XCheckMaskEvent function. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a492aa70992c986ae525318a29678c4bb"></a><!-- doxytag: member="ChkNotMaskEv.c::XCheckNotMaskEvent" ref="a492aa70992c986ae525318a29678c4bb" args="(Display *dpy, long mask, XEvent *event)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool XCheckNotMaskEvent </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">long&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Check existing events in queue to find if any match. If so, return. If not, flush buffer and see if any more events are readable. If one matches, return. If all else fails, tell the user no events found. </p>
+
+<p>References <a class="el" href="ChkNotMaskEv_8c.html#a653c12c824c0297b32b16e69fdc6b1a5">_Xevent_to_mask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxBackendTestEvents()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a653c12c824c0297b32b16e69fdc6b1a5"></a><!-- doxytag: member="ChkNotMaskEv.c::_Xevent_to_mask" ref="a653c12c824c0297b32b16e69fdc6b1a5" args="[]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">long const <a class="el" href="ChkNotMaskEv_8c.html#a653c12c824c0297b32b16e69fdc6b1a5">_Xevent_to_mask</a>[]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="ChkNotMaskEv_8h.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="ChkNotMaskEv_8c.html">ChkNotMaskEv.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/ChkNotMaskEv_8h.html b/hw/dmx/doc/html/ChkNotMaskEv_8h.html
new file mode 100644
index 0000000..977fa5b
--- /dev/null
+++ b/hw/dmx/doc/html/ChkNotMaskEv_8h.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('ChkNotMaskEv_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>ChkNotMaskEv.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="ChkNotMaskEv_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ChkNotMaskEv_8h.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent</a> (Display *dpy, long mask, XEvent *event)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for <a class="el" href="ChkNotMaskEv_8h.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent</a> function. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="ChkNotMaskEv_8c.html">ChkNotMaskEv.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a492aa70992c986ae525318a29678c4bb"></a><!-- doxytag: member="ChkNotMaskEv.h::XCheckNotMaskEvent" ref="a492aa70992c986ae525318a29678c4bb" args="(Display *dpy, long mask, XEvent *event)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool XCheckNotMaskEvent </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">long&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Check existing events in queue to find if any match. If so, return. If not, flush buffer and see if any more events are readable. If one matches, return. If all else fails, tell the user no events found. </p>
+
+<p>References <a class="el" href="ChkNotMaskEv_8c.html#a653c12c824c0297b32b16e69fdc6b1a5">_Xevent_to_mask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxBackendTestEvents()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="ChkNotMaskEv_8h.html">ChkNotMaskEv.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/ChkNotMaskEv_8h_source.html b/hw/dmx/doc/html/ChkNotMaskEv_8h_source.html
new file mode 100644
index 0000000..2ee0c3e
--- /dev/null
+++ b/hw/dmx/doc/html/ChkNotMaskEv_8h_source.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('ChkNotMaskEv_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>ChkNotMaskEv.h</h1> </div>
+</div>
+<div class="contents">
+<a href="ChkNotMaskEv_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _CHKNOTMASKEV_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _CHKNOTMASKEV_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> Bool <a class="code" href="ChkNotMaskEv_8c.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent</a> (Display *dpy, <span class="keywordtype">long</span> mask, XEvent *event);
+<a name="l00040"></a>00040 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="ChkNotMaskEv_8h.html">ChkNotMaskEv.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/annotated.html b/hw/dmx/doc/html/annotated.html
new file mode 100644
index 0000000..1e56de1
--- /dev/null
+++ b/hw/dmx/doc/html/annotated.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('annotated.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>Data Structures</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><table>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxArg.html">_dmxArg</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="structstack.html">stack</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/bc_s.png b/hw/dmx/doc/html/bc_s.png
new file mode 100644
index 0000000..e401862
--- /dev/null
+++ b/hw/dmx/doc/html/bc_s.png
Binary files differ
diff --git a/hw/dmx/doc/html/classes.html b/hw/dmx/doc/html/classes.html
new file mode 100644
index 0000000..b779af1
--- /dev/null
+++ b/hw/dmx/doc/html/classes.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('classes.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>Data Structure Index</h1> </div>
+</div>
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter__">_</a></div>
+<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
+<tr><td><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;D&#160;&#160;</div></td></tr></table>
+</td><td><a class="el" href="structstack.html">stack</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a>&#160;&#160;&#160;</td><td><a name="letter__"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;_&#160;&#160;</div></td></tr></table>
+</td><td><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxArg.html">_dmxArg</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a>&#160;&#160;&#160;</td></tr><tr><td><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a>&#160;&#160;&#160;</td><td><a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;&#160;&#160;</td></tr><tr><td><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;S&#160;&#160;</div></td></tr></table>
+</td><td><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a>&#160;&#160;&#160;</td></tr></table><div class="qindex"><a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter__">_</a></div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/closed.png b/hw/dmx/doc/html/closed.png
new file mode 100644
index 0000000..b7d4bd9
--- /dev/null
+++ b/hw/dmx/doc/html/closed.png
Binary files differ
diff --git a/hw/dmx/doc/html/dmx-config_8h.html b/hw/dmx/doc/html/dmx-config_8h.html
new file mode 100644
index 0000000..a9450a0
--- /dev/null
+++ b/hw/dmx/doc/html/dmx-config_8h.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx-config_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> </div>
+ <div class="headertitle">
+<h1>dmx-config.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;dix-config.h&gt;</code><br/>
+</div>
+<p><a href="dmx-config_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx-config_8h.html#ad1ec3b5086644b176e48fbdb72b39adc">DMX_VENDOR_RELEASE</a>(major, minor, year, month, day)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx-config_8h.html#aca03501ac22663ba1d6dcff24b2dd30f">VENDOR_RELEASE</a>&#160;&#160;&#160;DMX_VENDOR_RELEASE(1,2,2007,4,24)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx-config_8h.html#a48a30090778ac60d0fdd8648ae0cac57">VENDOR_STRING</a>&#160;&#160;&#160;&quot;DMX Project&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx-config_8h.html#aa054c2ad75b0e796e5aca99f3cc58c04">DMXEXT</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide configuration define's and undef's to build Xdmx in X.Org's modular source tree. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad1ec3b5086644b176e48fbdb72b39adc"></a><!-- doxytag: member="dmx&#45;config.h::DMX_VENDOR_RELEASE" ref="ad1ec3b5086644b176e48fbdb72b39adc" args="(major, minor, year, month, day)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_VENDOR_RELEASE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">major, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">minor, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">year, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">month, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">day&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">((major) * 100000000) + \
+ ((minor) * 1000000) + \
+ ((year-2000) * 10000) + \
+ ((month) * 100) + \
+ ((day) * 1)
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="aa054c2ad75b0e796e5aca99f3cc58c04"></a><!-- doxytag: member="dmx&#45;config.h::DMXEXT" ref="aa054c2ad75b0e796e5aca99f3cc58c04" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXEXT</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aca03501ac22663ba1d6dcff24b2dd30f"></a><!-- doxytag: member="dmx&#45;config.h::VENDOR_RELEASE" ref="aca03501ac22663ba1d6dcff24b2dd30f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define VENDOR_RELEASE&#160;&#160;&#160;DMX_VENDOR_RELEASE(1,2,2007,4,24)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48a30090778ac60d0fdd8648ae0cac57"></a><!-- doxytag: member="dmx&#45;config.h::VENDOR_STRING" ref="a48a30090778ac60d0fdd8648ae0cac57" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define VENDOR_STRING&#160;&#160;&#160;&quot;DMX Project&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx-config_8h.html">dmx-config.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx-config_8h_source.html b/hw/dmx/doc/html/dmx-config_8h_source.html
new file mode 100644
index 0000000..5a6cebf
--- /dev/null
+++ b/hw/dmx/doc/html/dmx-config_8h_source.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx-config_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmx-config.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmx-config_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2005 Red Hat Inc., Raleigh, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00039"></a>00039 <span class="preprocessor">#ifndef DMX_CONFIG_H</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define DMX_CONFIG_H</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;dix-config.h&gt;</span>
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044 <span class="comment">/*</span>
+<a name="l00045"></a>00045 <span class="comment"> * Note 1: This is a signed int that is printed as a decimal number.</span>
+<a name="l00046"></a>00046 <span class="comment"> * Since we want to make it human-interpretable, the fields are</span>
+<a name="l00047"></a>00047 <span class="comment"> * defined as:</span>
+<a name="l00048"></a>00048 <span class="comment"> * 2147483648</span>
+<a name="l00049"></a>00049 <span class="comment"> * AAbbyymmdd</span>
+<a name="l00050"></a>00050 <span class="comment"> * AA: major version 01-20</span>
+<a name="l00051"></a>00051 <span class="comment"> * bb: minor version 00-99</span>
+<a name="l00052"></a>00052 <span class="comment"> * yy: year 00-99 [See Note 2]</span>
+<a name="l00053"></a>00053 <span class="comment"> * mm: month 01-12</span>
+<a name="l00054"></a>00054 <span class="comment"> * dd: day 01-31</span>
+<a name="l00055"></a>00055 <span class="comment"> *</span>
+<a name="l00056"></a>00056 <span class="comment"> * Note 2: The default epoch for the year is 2000.</span>
+<a name="l00057"></a>00057 <span class="comment"> * To change the default epoch, change the DMX_VENDOR_RELEASE</span>
+<a name="l00058"></a>00058 <span class="comment"> * macro below, bumb the minor version number, and change</span>
+<a name="l00059"></a>00059 <span class="comment"> * xdpyinfo to key off the major/minor version to determine the</span>
+<a name="l00060"></a>00060 <span class="comment"> * new epoch. Remember to do this on January 1, 2100 and every</span>
+<a name="l00061"></a>00061 <span class="comment"> * 100 years thereafter.</span>
+<a name="l00062"></a>00062 <span class="comment"> */</span>
+<a name="l00063"></a><a class="code" href="dmx-config_8h.html#ad1ec3b5086644b176e48fbdb72b39adc">00063</a> <span class="preprocessor">#define DMX_VENDOR_RELEASE(major,minor,year,month,day) \</span>
+<a name="l00064"></a>00064 <span class="preprocessor"> ((major) * 100000000) + \</span>
+<a name="l00065"></a>00065 <span class="preprocessor"> ((minor) * 1000000) + \</span>
+<a name="l00066"></a>00066 <span class="preprocessor"> ((year-2000) * 10000) + \</span>
+<a name="l00067"></a>00067 <span class="preprocessor"> ((month) * 100) + \</span>
+<a name="l00068"></a>00068 <span class="preprocessor"> ((day) * 1)</span>
+<a name="l00069"></a><a class="code" href="dmx-config_8h.html#aca03501ac22663ba1d6dcff24b2dd30f">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define VENDOR_RELEASE DMX_VENDOR_RELEASE(1,2,2007,4,24)</span>
+<a name="l00070"></a><a class="code" href="dmx-config_8h.html#a48a30090778ac60d0fdd8648ae0cac57">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define VENDOR_STRING &quot;DMX Project&quot;</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a>00072 <span class="comment">/* Enable the DMX extension */</span>
+<a name="l00073"></a><a class="code" href="dmx-config_8h.html#aa054c2ad75b0e796e5aca99f3cc58c04">00073</a> <span class="preprocessor">#define DMXEXT</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span>
+<a name="l00075"></a>00075 <span class="preprocessor">#endif </span><span class="comment">/* DMX_CONFIG_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx-config_8h.html">dmx-config.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx_8c.html b/hw/dmx/doc/html/dmx_8c.html
new file mode 100644
index 0000000..256fffd
--- /dev/null
+++ b/hw/dmx/doc/html/dmx_8c.html
@@ -0,0 +1,1147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmx.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;X11/X.h&gt;</code><br/>
+<code>#include &lt;X11/Xproto.h&gt;</code><br/>
+<code>#include &quot;misc.h&quot;</code><br/>
+<code>#include &quot;os.h&quot;</code><br/>
+<code>#include &quot;dixstruct.h&quot;</code><br/>
+<code>#include &quot;extnsionst.h&quot;</code><br/>
+<code>#include &quot;opaque.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&quot;</code><br/>
+<code>#include &lt;X11/extensions/dmxproto.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/dmx.h&gt;</code><br/>
+<code>#include &quot;protocol-versions.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#adc46810045a2d02d8bbf9a0ae9a85dbb">DMXExtensionInit</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a9760de3bc5bce0c3fcb7eda8afdafcb7">_DMXXineramaActive</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute</a> (int bit, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attr, CARD32 value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a632a882d7c7db081ae7a4c6b1a7578de">dmxFetchScreenAttributes</a> (unsigned int mask, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attr, CARD32 *value_list)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmxSetDesktopAttribute</a> (int bit, <a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a> attr, CARD32 value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a7f4bc58ef9f987c6667b2aca63577252">dmxFetchDesktopAttributes</a> (unsigned int mask, <a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a> attr, CARD32 *value_list)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmxSetInputAttribute</a> (int bit, <a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a> attr, CARD32 value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#acf83414bba3036835bc2f489c3243f31">dmxFetchInputAttributes</a> (unsigned int mask, <a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a> attr, CARD32 *value_list)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a4e75f7427a3c89b10c98c0fcbde1d736">ProcDMXQueryVersion</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">ProcDMXSync</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">ProcDMXGetScreenCount</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">ProcDMXRemoveScreen</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate</a> (ClientPtr client, Window window, CARD32 *screens, CARD32 *windows, xRectangle *<a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, xRectangle *vis)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ad4763f72eeccf61b16b1e3c3141e3dd3">dmxMaxNumScreens</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">ProcDMXGetInputCount</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">ProcDMXRemoveInput</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a40d9e691d399f0ac5d79b70de13cb725">SProcDMXQueryVersion</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a9cf92503721755b9945d9ae242203e4f">SProcDMXSync</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ac6ee42ca6657daec84d10aaac5e07ac2">SProcDMXForceWindowCreation</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ab3ba38ff5f0a57f0f01313e6b0894eea">SProcDMXGetScreenCount</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#aaf773356a5c4ea879a7ae2c414955a4e">SProcDMXGetScreenAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ab0857e8373d5f2824e40b99399e53a52">SProcDMXChangeScreensAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ab1dd1e3ff17ee8ea90bf41e15366edfd">SProcDMXAddScreen</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a71bba4cfda826375e2b491a24fbea193">SProcDMXRemoveScreen</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#aa1e51336c38f55cfd52955ea633e6595">SProcDMXGetWindowAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a1e068cbd512e5db1582004f3374247dc">SProcDMXGetDesktopAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a6c6656e72d8e4ecf7879e1b5981f4ba7">SProcDMXChangeDesktopAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#af7394899aba8296b835babef42773422">SProcDMXGetInputCount</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ae9d3545f7127fd2762839e66a1dbf623">SProcDMXGetInputAttributes</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ab430383da03ac7476c5c59fd52c25d07">SProcDMXAddInput</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#ae2f98f4b6a0e8fed67460294b6b6978d">SProcDMXRemoveInput</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch</a> (ClientPtr client)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8c.html#a358d781b37da0527044c0cc8213097d2">DMXCode</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file implements the server-side part of the DMX protocol. A vector of fucntions is provided at extension initialization time, so most all of the useful functions in this file are declared static and do not appear in the doxygen documentation.</p>
+<p>Much of the low-level work is done by functions in <em><a class="el" href="dmxextension_8c.html">dmxextension.c</a></em> </p>
+<p>Please see the Client-to-Server DMX Extension to the X Protocol document for details about the protocol. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a9760de3bc5bce0c3fcb7eda8afdafcb7"></a><!-- doxytag: member="dmx.c::_DMXXineramaActive" ref="a9760de3bc5bce0c3fcb7eda8afdafcb7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int _DMXXineramaActive </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>, and <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adc46810045a2d02d8bbf9a0ae9a85dbb"></a><!-- doxytag: member="dmx.c::DMXExtensionInit" ref="adc46810045a2d02d8bbf9a0ae9a85dbb" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void DMXExtensionInit </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the extension. </p>
+
+<p>References <a class="el" href="dmx_8c.html#a358d781b37da0527044c0cc8213097d2">DMXCode</a>, <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f4bc58ef9f987c6667b2aca63577252"></a><!-- doxytag: member="dmx.c::dmxFetchDesktopAttributes" ref="a7f4bc58ef9f987c6667b2aca63577252" args="(unsigned int mask, DMXDesktopAttributesPtr attr, CARD32 *value_list)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxFetchDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32 *&#160;</td>
+ <td class="paramname"><em>value_list</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmxSetDesktopAttribute()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acf83414bba3036835bc2f489c3243f31"></a><!-- doxytag: member="dmx.c::dmxFetchInputAttributes" ref="acf83414bba3036835bc2f489c3243f31" args="(unsigned int mask, DMXInputAttributesPtr attr, CARD32 *value_list)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxFetchInputAttributes </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32 *&#160;</td>
+ <td class="paramname"><em>value_list</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmxSetInputAttribute()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a632a882d7c7db081ae7a4c6b1a7578de"></a><!-- doxytag: member="dmx.c::dmxFetchScreenAttributes" ref="a632a882d7c7db081ae7a4c6b1a7578de" args="(unsigned int mask, DMXScreenAttributesPtr attr, CARD32 *value_list)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxFetchScreenAttributes </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32 *&#160;</td>
+ <td class="paramname"><em>value_list</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>, and <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad4763f72eeccf61b16b1e3c3141e3dd3"></a><!-- doxytag: member="dmx.c::dmxMaxNumScreens" ref="ad4763f72eeccf61b16b1e3c3141e3dd3" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxMaxNumScreens </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a686f18ccb493fefc4403401991da115a"></a><!-- doxytag: member="dmx.c::dmxPopulate" ref="a686f18ccb493fefc4403401991da115a" args="(ClientPtr client, Window window, CARD32 *screens, CARD32 *windows, xRectangle *pos, xRectangle *vis)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxPopulate </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Window&#160;</td>
+ <td class="paramname"><em>window</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32 *&#160;</td>
+ <td class="paramname"><em>screens</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32 *&#160;</td>
+ <td class="paramname"><em>windows</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>pos</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>vis</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, <a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">DMXWindowAttributesRec::pos</a>, <a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">DMXWindowAttributesRec::screen</a>, <a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">DMXWindowAttributesRec::vis</a>, and <a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">DMXWindowAttributesRec::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac34d34dfe1419f4b97f13d9cdf103655"></a><!-- doxytag: member="dmx.c::dmxSetDesktopAttribute" ref="ac34d34dfe1419f4b97f13d9cdf103655" args="(int bit, DMXDesktopAttributesPtr attr, CARD32 value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSetDesktopAttribute </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>bit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec::height</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec::shiftX</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec::shiftY</a>, and <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec::width</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a7f4bc58ef9f987c6667b2aca63577252">dmxFetchDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa23a71da433ddced8a37f0b1ba60c5ee"></a><!-- doxytag: member="dmx.c::dmxSetInputAttribute" ref="aa23a71da433ddced8a37f0b1ba60c5ee" args="(int bit, DMXInputAttributesPtr attr, CARD32 value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSetInputAttribute </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>bit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a>, <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a>, and <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#acf83414bba3036835bc2f489c3243f31">dmxFetchInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc844295b520b197203eca198a08b988"></a><!-- doxytag: member="dmx.c::dmxSetScreenAttribute" ref="afc844295b520b197203eca198a08b988" args="(int bit, DMXScreenAttributesPtr attr, CARD32 value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSetScreenAttribute </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>bit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec::rootWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec::rootWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec::rootWindowXoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec::rootWindowXorigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec::rootWindowYoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec::rootWindowYorigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec::screenWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec::screenWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec::screenWindowXoffset</a>, and <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec::screenWindowYoffset</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a632a882d7c7db081ae7a4c6b1a7578de">dmxFetchScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7e8fccaf7cddc1caba42f0c1307be9a2"></a><!-- doxytag: member="dmx.c::ProcDMXAddInput" ref="a7e8fccaf7cddc1caba42f0c1307be9a2" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXAddInput </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a6b0b38eb49c6be097a59dbcdd6dacb51">dmxAddInput()</a>, <a class="el" href="dmx_8c.html#acf83414bba3036835bc2f489c3243f31">dmxFetchInputAttributes()</a>, and <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#ab430383da03ac7476c5c59fd52c25d07">SProcDMXAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a129280663f586289ed08218c63775688"></a><!-- doxytag: member="dmx.c::ProcDMXAddScreen" ref="a129280663f586289ed08218c63775688" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXAddScreen </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a>, <a class="el" href="dmxextension_8c.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmx_8c.html#a632a882d7c7db081ae7a4c6b1a7578de">dmxFetchScreenAttributes()</a>, and <a class="el" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#ab1dd1e3ff17ee8ea90bf41e15366edfd">SProcDMXAddScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a021e70d07efcd1a832476c5b225e6cd7"></a><!-- doxytag: member="dmx.c::ProcDMXChangeDesktopAttributes" ref="a021e70d07efcd1a832476c5b225e6cd7" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXChangeDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a9760de3bc5bce0c3fcb7eda8afdafcb7">_DMXXineramaActive()</a>, <a class="el" href="dmxextension_8h.html#a0aa0eb777a77d62cd3070c642ae0b0aa">dmxConfigureDesktop()</a>, <a class="el" href="dmx_8c.html#a7f4bc58ef9f987c6667b2aca63577252">dmxFetchDesktopAttributes()</a>, and <a class="el" href="dmxextension_8c.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#a6c6656e72d8e4ecf7879e1b5981f4ba7">SProcDMXChangeDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab3846af767ac6d0a706e7e1bfdf44e80"></a><!-- doxytag: member="dmx.c::ProcDMXChangeScreensAttributes" ref="ab3846af767ac6d0a706e7e1bfdf44e80" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXChangeScreensAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a9760de3bc5bce0c3fcb7eda8afdafcb7">_DMXXineramaActive()</a>, <a class="el" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxConfigureScreenWindows()</a>, <a class="el" href="dmx_8c.html#a632a882d7c7db081ae7a4c6b1a7578de">dmxFetchScreenAttributes()</a>, and <a class="el" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a72bbaba90154096af6b485e4e393298c"></a><!-- doxytag: member="dmx.c::ProcDMXDispatch" ref="a72bbaba90154096af6b485e4e393298c" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXDispatch </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput()</a>, <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>, <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes()</a>, <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation()</a>, <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>, <a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">ProcDMXGetInputCount()</a>, <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">ProcDMXGetScreenCount()</a>, <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>, <a class="el" href="dmx_8c.html#a4e75f7427a3c89b10c98c0fcbde1d736">ProcDMXQueryVersion()</a>, <a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">ProcDMXRemoveInput()</a>, <a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">ProcDMXRemoveScreen()</a>, and <a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">ProcDMXSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#adc46810045a2d02d8bbf9a0ae9a85dbb">DMXExtensionInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8fe8ab1c536a67c59078b1aeebcac575"></a><!-- doxytag: member="dmx.c::ProcDMXForceWindowCreation" ref="a8fe8ab1c536a67c59078b1aeebcac575" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXForceWindowCreation </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs()</a>, and <a class="el" href="dmxextension_8c.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#ac6ee42ca6657daec84d10aaac5e07ac2">SProcDMXForceWindowCreation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aabe6419a28240a533ea3407a85025e9b"></a><!-- doxytag: member="dmx.c::ProcDMXGetDesktopAttributes" ref="aabe6419a28240a533ea3407a85025e9b" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXGetDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec::height</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec::shiftX</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec::shiftY</a>, and <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec::width</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#a1e068cbd512e5db1582004f3374247dc">SProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="accc76dc52a070ec95d7330357645d175"></a><!-- doxytag: member="dmx.c::ProcDMXGetInputAttributes" ref="accc76dc52a070ec95d7330357645d175" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXGetInputAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">DMXInputAttributesRec::detached</a>, <a class="el" href="dmxextension_8c.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a>, <a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">DMXInputAttributesRec::isCore</a>, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a>, <a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">DMXInputAttributesRec::physicalId</a>, <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a>, and <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#ae9d3545f7127fd2762839e66a1dbf623">SProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ec2738f7ae01995d771a88cfae7203b"></a><!-- doxytag: member="dmx.c::ProcDMXGetInputCount" ref="a6ec2738f7ae01995d771a88cfae7203b" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXGetInputCount </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#af7394899aba8296b835babef42773422">SProcDMXGetInputCount()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a235f9df8583e23d75be024d4e9f77a87"></a><!-- doxytag: member="dmx.c::ProcDMXGetScreenAttributes" ref="a235f9df8583e23d75be024d4e9f77a87" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXGetScreenAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a>, <a class="el" href="dmxextension_8c.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens()</a>, <a class="el" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">DMXScreenAttributesRec::logicalScreen</a>, <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec::rootWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec::rootWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec::rootWindowXoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec::rootWindowXorigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec::rootWindowYoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec::rootWindowYorigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec::screenWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec::screenWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec::screenWindowXoffset</a>, and <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec::screenWindowYoffset</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, <a class="el" href="dmx_8c.html#ab0857e8373d5f2824e40b99399e53a52">SProcDMXChangeScreensAttributes()</a>, and <a class="el" href="dmx_8c.html#aaf773356a5c4ea879a7ae2c414955a4e">SProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8af993133b301bc15bd1773d4877aab2"></a><!-- doxytag: member="dmx.c::ProcDMXGetScreenCount" ref="a8af993133b301bc15bd1773d4877aab2" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXGetScreenCount </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#ab3ba38ff5f0a57f0f01313e6b0894eea">SProcDMXGetScreenCount()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a53d2083350694f2f57b8eda81fbe5388"></a><!-- doxytag: member="dmx.c::ProcDMXGetWindowAttributes" ref="a53d2083350694f2f57b8eda81fbe5388" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXGetWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs()</a>, <a class="el" href="dmx_8c.html#ad4763f72eeccf61b16b1e3c3141e3dd3">dmxMaxNumScreens()</a>, <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>, and <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#aa1e51336c38f55cfd52955ea633e6595">SProcDMXGetWindowAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e75f7427a3c89b10c98c0fcbde1d736"></a><!-- doxytag: member="dmx.c::ProcDMXQueryVersion" ref="a4e75f7427a3c89b10c98c0fcbde1d736" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXQueryVersion </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#a40d9e691d399f0ac5d79b70de13cb725">SProcDMXQueryVersion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a903af5587586cb2c047d44e2304c008f"></a><!-- doxytag: member="dmx.c::ProcDMXRemoveInput" ref="a903af5587586cb2c047d44e2304c008f" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXRemoveInput </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a6125541332383040aa07fa1ef310d38d">dmxRemoveInput()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#ae2f98f4b6a0e8fed67460294b6b6978d">SProcDMXRemoveInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2271d588de5ed20d6924f04ce699342f"></a><!-- doxytag: member="dmx.c::ProcDMXRemoveScreen" ref="a2271d588de5ed20d6924f04ce699342f" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXRemoveScreen </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#a71bba4cfda826375e2b491a24fbea193">SProcDMXRemoveScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="add80dfbbe612e58c424f04f668e1de9e"></a><!-- doxytag: member="dmx.c::ProcDMXSync" ref="add80dfbbe612e58c424f04f668e1de9e" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ProcDMXSync </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">ProcDMXDispatch()</a>, and <a class="el" href="dmx_8c.html#a9cf92503721755b9945d9ae242203e4f">SProcDMXSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab430383da03ac7476c5c59fd52c25d07"></a><!-- doxytag: member="dmx.c::SProcDMXAddInput" ref="ab430383da03ac7476c5c59fd52c25d07" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXAddInput </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab1dd1e3ff17ee8ea90bf41e15366edfd"></a><!-- doxytag: member="dmx.c::SProcDMXAddScreen" ref="ab1dd1e3ff17ee8ea90bf41e15366edfd" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXAddScreen </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c6656e72d8e4ecf7879e1b5981f4ba7"></a><!-- doxytag: member="dmx.c::SProcDMXChangeDesktopAttributes" ref="a6c6656e72d8e4ecf7879e1b5981f4ba7" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXChangeDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab0857e8373d5f2824e40b99399e53a52"></a><!-- doxytag: member="dmx.c::SProcDMXChangeScreensAttributes" ref="ab0857e8373d5f2824e40b99399e53a52" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXChangeScreensAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc36d15cef602b7f993df1d80b934983"></a><!-- doxytag: member="dmx.c::SProcDMXDispatch" ref="afc36d15cef602b7f993df1d80b934983" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXDispatch </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#ab430383da03ac7476c5c59fd52c25d07">SProcDMXAddInput()</a>, <a class="el" href="dmx_8c.html#ab1dd1e3ff17ee8ea90bf41e15366edfd">SProcDMXAddScreen()</a>, <a class="el" href="dmx_8c.html#a6c6656e72d8e4ecf7879e1b5981f4ba7">SProcDMXChangeDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ab0857e8373d5f2824e40b99399e53a52">SProcDMXChangeScreensAttributes()</a>, <a class="el" href="dmx_8c.html#ac6ee42ca6657daec84d10aaac5e07ac2">SProcDMXForceWindowCreation()</a>, <a class="el" href="dmx_8c.html#a1e068cbd512e5db1582004f3374247dc">SProcDMXGetDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ae9d3545f7127fd2762839e66a1dbf623">SProcDMXGetInputAttributes()</a>, <a class="el" href="dmx_8c.html#af7394899aba8296b835babef42773422">SProcDMXGetInputCount()</a>, <a class="el" href="dmx_8c.html#aaf773356a5c4ea879a7ae2c414955a4e">SProcDMXGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#ab3ba38ff5f0a57f0f01313e6b0894eea">SProcDMXGetScreenCount()</a>, <a class="el" href="dmx_8c.html#aa1e51336c38f55cfd52955ea633e6595">SProcDMXGetWindowAttributes()</a>, <a class="el" href="dmx_8c.html#a40d9e691d399f0ac5d79b70de13cb725">SProcDMXQueryVersion()</a>, <a class="el" href="dmx_8c.html#ae2f98f4b6a0e8fed67460294b6b6978d">SProcDMXRemoveInput()</a>, <a class="el" href="dmx_8c.html#a71bba4cfda826375e2b491a24fbea193">SProcDMXRemoveScreen()</a>, and <a class="el" href="dmx_8c.html#a9cf92503721755b9945d9ae242203e4f">SProcDMXSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#adc46810045a2d02d8bbf9a0ae9a85dbb">DMXExtensionInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac6ee42ca6657daec84d10aaac5e07ac2"></a><!-- doxytag: member="dmx.c::SProcDMXForceWindowCreation" ref="ac6ee42ca6657daec84d10aaac5e07ac2" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXForceWindowCreation </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e068cbd512e5db1582004f3374247dc"></a><!-- doxytag: member="dmx.c::SProcDMXGetDesktopAttributes" ref="a1e068cbd512e5db1582004f3374247dc" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXGetDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae9d3545f7127fd2762839e66a1dbf623"></a><!-- doxytag: member="dmx.c::SProcDMXGetInputAttributes" ref="ae9d3545f7127fd2762839e66a1dbf623" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXGetInputAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af7394899aba8296b835babef42773422"></a><!-- doxytag: member="dmx.c::SProcDMXGetInputCount" ref="af7394899aba8296b835babef42773422" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXGetInputCount </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">ProcDMXGetInputCount()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf773356a5c4ea879a7ae2c414955a4e"></a><!-- doxytag: member="dmx.c::SProcDMXGetScreenAttributes" ref="aaf773356a5c4ea879a7ae2c414955a4e" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXGetScreenAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab3ba38ff5f0a57f0f01313e6b0894eea"></a><!-- doxytag: member="dmx.c::SProcDMXGetScreenCount" ref="ab3ba38ff5f0a57f0f01313e6b0894eea" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXGetScreenCount </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">ProcDMXGetScreenCount()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa1e51336c38f55cfd52955ea633e6595"></a><!-- doxytag: member="dmx.c::SProcDMXGetWindowAttributes" ref="aa1e51336c38f55cfd52955ea633e6595" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXGetWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a40d9e691d399f0ac5d79b70de13cb725"></a><!-- doxytag: member="dmx.c::SProcDMXQueryVersion" ref="a40d9e691d399f0ac5d79b70de13cb725" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXQueryVersion </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a4e75f7427a3c89b10c98c0fcbde1d736">ProcDMXQueryVersion()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae2f98f4b6a0e8fed67460294b6b6978d"></a><!-- doxytag: member="dmx.c::SProcDMXRemoveInput" ref="ae2f98f4b6a0e8fed67460294b6b6978d" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXRemoveInput </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">ProcDMXRemoveInput()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71bba4cfda826375e2b491a24fbea193"></a><!-- doxytag: member="dmx.c::SProcDMXRemoveScreen" ref="a71bba4cfda826375e2b491a24fbea193" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXRemoveScreen </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">ProcDMXRemoveScreen()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9cf92503721755b9945d9ae242203e4f"></a><!-- doxytag: member="dmx.c::SProcDMXSync" ref="a9cf92503721755b9945d9ae242203e4f" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int SProcDMXSync </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">ProcDMXSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">SProcDMXDispatch()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a358d781b37da0527044c0cc8213097d2"></a><!-- doxytag: member="dmx.c::DMXCode" ref="a358d781b37da0527044c0cc8213097d2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="dmx_8c.html#a358d781b37da0527044c0cc8213097d2">DMXCode</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmx_8c.html#adc46810045a2d02d8bbf9a0ae9a85dbb">DMXExtensionInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx_8c.html">dmx.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx_8h.html b/hw/dmx/doc/html/dmx_8h.html
new file mode 100644
index 0000000..9447fc3
--- /dev/null
+++ b/hw/dmx/doc/html/dmx_8h.html
@@ -0,0 +1,723 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmx.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;gcstruct.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxclient_8h_source.html">dmxclient.h</a>&quot;</code><br/>
+<code>#include &quot;globals.h&quot;</code><br/>
+<code>#include &quot;scrnintstr.h&quot;</code><br/>
+<code>#include &quot;picturestr.h&quot;</code><br/>
+</div>
+<p><a href="dmx_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>(_entry, _newfunc, _saved, _actual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>(_entry, _saved, _actual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#aca566caa216b43a032891484384dfca8">dmxGCPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a7f019f89eaada79f813c4f969ef4ab00">dmxWinPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a58cdac45cf32cd2a4246d891717af12a">dmxPixPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">dmxScreenPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a47c216bb108efa441d7009a7da18d759">dmxColormapPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#ae1d817ef5faef4a4328e7b6e20329eeb">dmxPictPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a1ff8700f83ebcf9aab7903e6686dd140">dmxGlyphSetPrivateKey</a>&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a>)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a175903acd588f450ac6325e17355f8ca">DMXInputInfo</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#aac7b710f9533f3b984574f1403488673">DMXStatInfo</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a093c967353474b26640284f89d78e204">DMXScreenInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">PositionType</a> { <br/>
+&#160;&#160;<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44">PosNone</a> = -1,
+<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">PosAbsolute</a> = 0,
+<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">PosRightOf</a>,
+<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f">PosLeftOf</a>,
+<br/>
+&#160;&#160;<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414">PosAbove</a>,
+<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">PosBelow</a>,
+<a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc">PosRelative</a>
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XErrorEvent&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxLastErrorEvent</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxErrorOccurred</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx_8h.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Main header file included by all other DMX-related files. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a94c3604e80b511877468dea0d8da7051"></a><!-- doxytag: member="dmx.h::DMX_UNWRAP" ref="a94c3604e80b511877468dea0d8da7051" args="(_entry, _saved, _actual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_UNWRAP</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_entry, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_saved, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_actual&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ (_actual)-&gt;_entry = (_saved)-&gt;_entry; \
+} <span class="keywordflow">while</span> (0)
+</pre></div><p>Unwrap screen or GC function pointer </p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a67000d9b6ab4428d002523c0ef981ed0"></a><!-- doxytag: member="dmx.h::DMX_WRAP" ref="a67000d9b6ab4428d002523c0ef981ed0" args="(_entry, _newfunc, _saved, _actual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WRAP</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_entry, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_newfunc, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_saved, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_actual&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ (_saved)-&gt;_entry = (_actual)-&gt;_entry; \
+ (_actual)-&gt;_entry = (_newfunc); \
+} <span class="keywordflow">while</span> (0)
+</pre></div><p>Wrap screen or GC function pointer </p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a47c216bb108efa441d7009a7da18d759"></a><!-- doxytag: member="dmx.h::dmxColormapPrivateKey" ref="a47c216bb108efa441d7009a7da18d759" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxColormapPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Colormaps </p>
+
+</div>
+</div>
+<a class="anchor" id="aca566caa216b43a032891484384dfca8"></a><!-- doxytag: member="dmx.h::dmxGCPrivateKey" ref="aca566caa216b43a032891484384dfca8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxGCPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for GCs </p>
+
+</div>
+</div>
+<a class="anchor" id="a1ff8700f83ebcf9aab7903e6686dd140"></a><!-- doxytag: member="dmx.h::dmxGlyphSetPrivateKey" ref="a1ff8700f83ebcf9aab7903e6686dd140" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxGlyphSetPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for GlyphSets </p>
+
+</div>
+</div>
+<a class="anchor" id="ae1d817ef5faef4a4328e7b6e20329eeb"></a><!-- doxytag: member="dmx.h::dmxPictPrivateKey" ref="ae1d817ef5faef4a4328e7b6e20329eeb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxPictPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Picts </p>
+
+</div>
+</div>
+<a class="anchor" id="a58cdac45cf32cd2a4246d891717af12a"></a><!-- doxytag: member="dmx.h::dmxPixPrivateKey" ref="a58cdac45cf32cd2a4246d891717af12a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxPixPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Pixmaps </p>
+
+</div>
+</div>
+<a class="anchor" id="a956f38a520a532afb837d5ec089cf29f"></a><!-- doxytag: member="dmx.h::dmxScreenPrivateKey" ref="a956f38a520a532afb837d5ec089cf29f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxScreenPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Screens </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>, and <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f019f89eaada79f813c4f969ef4ab00"></a><!-- doxytag: member="dmx.h::dmxWinPrivateKey" ref="a7f019f89eaada79f813c4f969ef4ab00" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define dmxWinPrivateKey&#160;&#160;&#160;(&amp;<a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Windows </p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a175903acd588f450ac6325e17355f8ca"></a><!-- doxytag: member="dmx.h::DMXInputInfo" ref="a175903acd588f450ac6325e17355f8ca" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> <a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Provide the typedef globally, but keep the contents opaque outside of the input routines. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html">dmxinput.h</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a093c967353474b26640284f89d78e204"></a><!-- doxytag: member="dmx.h::DMXScreenInfo" ref="a093c967353474b26640284f89d78e204" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Global structure containing information about each backend screen. </p>
+
+</div>
+</div>
+<a class="anchor" id="aac7b710f9533f3b984574f1403488673"></a><!-- doxytag: member="dmx.h::DMXStatInfo" ref="aac7b710f9533f3b984574f1403488673" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a> <a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Provide the typedef globally, but keep the contents opaque outside of the XSync statistic routines. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxstat_8c.html">dmxstat.c</a> </dd></dl>
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="aa80fe4e9a559009407475c9587214b48"></a><!-- doxytag: member="dmx.h::PositionType" ref="aa80fe4e9a559009407475c9587214b48" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">PositionType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44"></a><!-- doxytag: member="PosNone" ref="aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44" args="" -->PosNone</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351"></a><!-- doxytag: member="PosAbsolute" ref="aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351" args="" -->PosAbsolute</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae"></a><!-- doxytag: member="PosRightOf" ref="aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae" args="" -->PosRightOf</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f"></a><!-- doxytag: member="PosLeftOf" ref="aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f" args="" -->PosLeftOf</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414"></a><!-- doxytag: member="PosAbove" ref="aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414" args="" -->PosAbove</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e"></a><!-- doxytag: member="PosBelow" ref="aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e" args="" -->PosBelow</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc"></a><!-- doxytag: member="PosRelative" ref="aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc" args="" -->PosRelative</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a8d53c22ed93cbef2684016d3c7638671"></a><!-- doxytag: member="dmx.h::dmxAddRemoveScreens" ref="a8d53c22ed93cbef2684016d3c7638671" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if add and remove screens support is enabled </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af033a68c176abdaf96f094922d15d359"></a><!-- doxytag: member="dmx.h::dmxColormapPrivateKeyRec" ref="af033a68c176abdaf96f094922d15d359" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad2d0e8e1a260d9fdb7ea3a980d5fce8b"></a><!-- doxytag: member="dmx.h::dmxDepth" ref="ad2d0e8e1a260d9fdb7ea3a980d5fce8b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinit_8c.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Requested depth if non-zero </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9a817996c23e8669c5d9a8dc25e8cb51"></a><!-- doxytag: member="dmx.h::dmxErrorOccurred" ref="a9a817996c23e8669c5d9a8dc25e8cb51" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxErrorOccurred</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if an error occurred </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a10581b0cb51e730e26cbc08913a76c5f"></a><!-- doxytag: member="dmx.h::dmxFontPath" ref="a10581b0cb51e730e26cbc08913a76c5f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxinit_8c.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>NULL if no font path is set on the command line; otherwise, a string of comma separated paths built from the command line specified font paths </p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, and <a class="el" href="dmxinit_8c.html#a18cb12b28844e363b3f43b3b3582d214">dmxSetDefaultFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e2a5b2ae34073156aef6b406552657f"></a><!-- doxytag: member="dmx.h::dmxFontPrivateIndex" ref="a4e2a5b2ae34073156aef6b406552657f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxscrinit_8c.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Fonts </p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9aef85f2d27fb4a444c0a24ff953db57"></a><!-- doxytag: member="dmx.h::dmxGCPrivateKeyRec" ref="a9aef85f2d27fb4a444c0a24ff953db57" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a82e1e514bdfabd9d2d898a5938018b06"></a><!-- doxytag: member="dmx.h::dmxGlyphSetPrivateKeyRec" ref="a82e1e514bdfabd9d2d898a5938018b06" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2eb1403caea1e0c8ac3cb9d1edc8d3c6"></a><!-- doxytag: member="dmx.h::dmxIgnoreBadFontPaths" ref="a2eb1403caea1e0c8ac3cb9d1edc8d3c6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if bad font paths should be ignored during server init </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf5b80f46b3ba1e46d7f1f12cfb158f"></a><!-- doxytag: member="dmx.h::dmxLastErrorEvent" ref="aacf5b80f46b3ba1e46d7f1f12cfb158f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XErrorEvent <a class="el" href="dmxinit_8c.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxLastErrorEvent</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Last error that occurred </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af266e8dde07901ede60eaa822b3e945a"></a><!-- doxytag: member="dmx.h::dmxLazyWindowCreation" ref="af266e8dde07901ede60eaa822b3e945a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if using the lazy window creation optimization </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5a881109fe1e32c74cda4a280b09a7c4"></a><!-- doxytag: member="dmx.h::dmxNumScreens" ref="a5a881109fe1e32c74cda4a280b09a7c4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of dmxScreens </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">AbortDDX()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxcommon_8h.html#a907580b7be71d9be0b771d32210f3cad">dmxFindPointerScreen()</a>, <a class="el" href="dmxextension_8h.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmxcursor_8c.html#aaf8a9878f12b6653247fc27d960beccf">dmxSLCreate()</a>, <a class="el" href="dmxcursor_8c.html#ab4dcb11cad339e72d843356841ffd203">dmxSLFindNext()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8987e6ecde1821c659e8fe22336fd20"></a><!-- doxytag: member="dmx.h::dmxOffScreenOpt" ref="aa8987e6ecde1821c659e8fe22336fd20" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if using off screen optimizations </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abf05e9930ee1c563f28664a2e425eabe"></a><!-- doxytag: member="dmx.h::dmxPictPrivateKeyRec" ref="abf05e9930ee1c563f28664a2e425eabe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af773380733836d74aa67be0d75614fe4"></a><!-- doxytag: member="dmx.h::dmxPixPrivateKeyRec" ref="af773380733836d74aa67be0d75614fe4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a28f509d7976acb88156303dd4231b463"></a><!-- doxytag: member="dmx.h::dmxScreenPrivateKeyRec" ref="a28f509d7976acb88156303dd4231b463" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e242a6818df05e547a4776919e3827f"></a><!-- doxytag: member="dmx.h::dmxScreens" ref="a3e242a6818df05e547a4776919e3827f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of outputs </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen()</a>, <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>, <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>, <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a97d09d0d46e9e7df451072def499e4fe"></a><!-- doxytag: member="dmx.h::dmxShadowFB" ref="a97d09d0d46e9e7df451072def499e4fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinit_8c.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if using shadow frame-buffer (deprecated) </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8207510b34c9871015d1e9378c31c568"></a><!-- doxytag: member="dmx.h::dmxSubdividePrimitives" ref="a8207510b34c9871015d1e9378c31c568" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if using the primitive subdivision optimization </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab5b999218612af4136983694943737aa"></a><!-- doxytag: member="dmx.h::dmxUseXKB" ref="ab5b999218612af4136983694943737aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if the XKB extension should be used with the backend servers </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acb038e21fd8e5d160e62e63b339f27af"></a><!-- doxytag: member="dmx.h::dmxWinPrivateKeyRec" ref="acb038e21fd8e5d160e62e63b339f27af" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx_8h.html">dmx.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx_8h_source.html b/hw/dmx/doc/html/dmx_8h_source.html
new file mode 100644
index 0000000..fce63ef
--- /dev/null
+++ b/hw/dmx/doc/html/dmx_8h_source.html
@@ -0,0 +1,360 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmx.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmx_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> * David H. Dawes &lt;dawes@xfree86.org&gt;</span>
+<a name="l00032"></a>00032 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035
+<a name="l00050"></a>00050 <span class="preprocessor">#ifndef DMX_H</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#define DMX_H</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a>00053 <span class="preprocessor">#if HAVE_DMX_CONFIG_H</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#include &lt;<a class="code" href="dmx-config_8h.html">dmx-config.h</a>&gt;</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>
+<a name="l00057"></a>00057 <span class="preprocessor">#include &quot;gcstruct.h&quot;</span>
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="comment">/* Handle client-side include files in one place. */</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include &quot;<a class="code" href="dmxclient_8h.html">dmxclient.h</a>&quot;</span>
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="preprocessor">#include &quot;globals.h&quot;</span>
+<a name="l00063"></a>00063 <span class="preprocessor">#include &quot;scrnintstr.h&quot;</span>
+<a name="l00064"></a>00064
+<a name="l00065"></a>00065 <span class="preprocessor">#include &quot;picturestr.h&quot;</span>
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="preprocessor">#ifdef GLXEXT</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#include &lt;GL/glx.h&gt;</span>
+<a name="l00069"></a>00069 <span class="preprocessor">#include &lt;GL/glxint.h&gt;</span>
+<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">00072</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00073"></a>00073 <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44">PosNone</a> = -1,
+<a name="l00074"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44">00074</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">PosAbsolute</a> = 0,
+<a name="l00075"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">00075</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">PosRightOf</a>,
+<a name="l00076"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">00076</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f">PosLeftOf</a>,
+<a name="l00077"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f">00077</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414">PosAbove</a>,
+<a name="l00078"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414">00078</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">PosBelow</a>,
+<a name="l00079"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">00079</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc">PosRelative</a>
+<a name="l00080"></a><a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc">00080</a> } <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">PositionType</a>;
+<a name="l00081"></a>00081
+<a name="l00084"></a><a class="code" href="dmx_8h.html#a175903acd588f450ac6325e17355f8ca">00084</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a>;
+<a name="l00085"></a>00085
+<a name="l00088"></a><a class="code" href="dmx_8h.html#aac7b710f9533f3b984574f1403488673">00088</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXStatInfo.html">_DMXStatInfo</a> <a class="code" href="struct__DMXStatInfo.html">DMXStatInfo</a>;
+<a name="l00089"></a>00089
+<a name="l00091"></a><a class="code" href="struct__DMXScreenInfo.html">00091</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> {
+<a name="l00092"></a><a class="code" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">00092</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">name</a>;
+<a name="l00093"></a><a class="code" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">00093</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">index</a>;
+<a name="l00095"></a>00095 <span class="comment">/*---------- Back-end X server information ----------*/</span>
+<a name="l00096"></a>00096
+<a name="l00097"></a><a class="code" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">00097</a> Display *<a class="code" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">beDisplay</a>;
+<a name="l00098"></a><a class="code" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">00098</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">beWidth</a>;
+<a name="l00099"></a><a class="code" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">00099</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">beHeight</a>;
+<a name="l00100"></a><a class="code" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">00100</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">beDepth</a>;
+<a name="l00101"></a><a class="code" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">00101</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">beBPP</a>;
+<a name="l00102"></a><a class="code" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">00102</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">beXDPI</a>;
+<a name="l00103"></a><a class="code" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">00103</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">beYDPI</a>;
+<a name="l00105"></a><a class="code" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">00105</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">beNumDepths</a>;
+<a name="l00106"></a><a class="code" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">00106</a> <span class="keywordtype">int</span> *<a class="code" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">beDepths</a>;
+<a name="l00108"></a><a class="code" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">00108</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">beNumPixmapFormats</a>;
+<a name="l00109"></a><a class="code" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">00109</a> XPixmapFormatValues *<a class="code" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">bePixmapFormats</a>;
+<a name="l00111"></a><a class="code" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">00111</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">beNumVisuals</a>;
+<a name="l00112"></a><a class="code" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">00112</a> XVisualInfo *<a class="code" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">beVisuals</a>;
+<a name="l00113"></a><a class="code" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">00113</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">beDefVisualIndex</a>;
+<a name="l00115"></a><a class="code" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">00115</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">beNumDefColormaps</a>;
+<a name="l00116"></a><a class="code" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">00116</a> Colormap *<a class="code" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">beDefColormaps</a>;
+<a name="l00118"></a><a class="code" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">00118</a> Pixel <a class="code" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">beBlackPixel</a>;
+<a name="l00119"></a><a class="code" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">00119</a> Pixel <a class="code" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">beWhitePixel</a>;
+<a name="l00121"></a>00121 <span class="comment">/*---------- Screen window information ----------*/</span>
+<a name="l00122"></a>00122
+<a name="l00123"></a><a class="code" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">00123</a> Window <a class="code" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">scrnWin</a>;
+<a name="l00124"></a><a class="code" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">00124</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">scrnX</a>;
+<a name="l00125"></a><a class="code" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">00125</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">scrnY</a>;
+<a name="l00126"></a><a class="code" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">00126</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">scrnWidth</a>;
+<a name="l00127"></a><a class="code" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">00127</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">scrnHeight</a>;
+<a name="l00128"></a><a class="code" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">00128</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">scrnXSign</a>;
+<a name="l00129"></a><a class="code" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">00129</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">scrnYSign</a>;
+<a name="l00132"></a><a class="code" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">00132</a> Drawable <a class="code" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">scrnDefDrawables</a>[MAXFORMATS];
+<a name="l00133"></a>00133
+<a name="l00134"></a><a class="code" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">00134</a> <span class="keyword">struct </span><a class="code" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *<a class="code" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">next</a>;
+<a name="l00135"></a><a class="code" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">00135</a> <span class="keyword">struct </span><a class="code" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *<a class="code" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">over</a>;
+<a name="l00137"></a>00137 <span class="comment">/*---------- Root window information ----------*/</span>
+<a name="l00138"></a>00138
+<a name="l00139"></a><a class="code" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">00139</a> Window <a class="code" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">rootWin</a>;
+<a name="l00140"></a><a class="code" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">00140</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">rootX</a>;
+<a name="l00141"></a><a class="code" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">00141</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">rootY</a>;
+<a name="l00142"></a><a class="code" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">00142</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">rootWidth</a>;
+<a name="l00143"></a><a class="code" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">00143</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">rootHeight</a>;
+<a name="l00145"></a><a class="code" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">00145</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">rootXOrigin</a>;
+<a name="l00146"></a><a class="code" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">00146</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">rootYOrigin</a>;
+<a name="l00148"></a>00148 <span class="comment">/*---------- Shadow framebuffer information ----------*/</span>
+<a name="l00149"></a>00149
+<a name="l00150"></a><a class="code" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">00150</a> <span class="keywordtype">void</span> *<a class="code" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">shadow</a>;
+<a name="l00151"></a><a class="code" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">00151</a> XlibGC <a class="code" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">shadowGC</a>;
+<a name="l00152"></a><a class="code" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">00152</a> XImage *<a class="code" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">shadowFBImage</a>;
+<a name="l00154"></a>00154 <span class="comment">/*---------- Other related information ----------*/</span>
+<a name="l00155"></a>00155
+<a name="l00156"></a><a class="code" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">00156</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">shared</a>;
+<a name="l00158"></a><a class="code" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">00158</a> Bool <a class="code" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">WMRunningOnBE</a>;
+<a name="l00159"></a>00159
+<a name="l00160"></a><a class="code" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">00160</a> Cursor <a class="code" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">noCursor</a>;
+<a name="l00161"></a><a class="code" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">00161</a> Cursor <a class="code" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">curCursor</a>;
+<a name="l00162"></a>00162 <span class="comment">/* Support for cursors on overlapped</span>
+<a name="l00163"></a>00163 <span class="comment"> * backend displays. */</span>
+<a name="l00164"></a><a class="code" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">00164</a> CursorPtr <a class="code" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">cursor</a>;
+<a name="l00165"></a><a class="code" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">00165</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">cursorVisible</a>;
+<a name="l00166"></a><a class="code" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">00166</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">cursorNotShared</a>; <span class="comment">/* for overlapping screens on a backend */</span>
+<a name="l00167"></a>00167
+<a name="l00168"></a><a class="code" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">00168</a> <a class="code" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">PositionType</a> <a class="code" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">where</a>;
+<a name="l00169"></a><a class="code" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">00169</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">whereX</a>;
+<a name="l00170"></a><a class="code" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">00170</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">whereY</a>;
+<a name="l00171"></a><a class="code" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">00171</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">whereRefScreen</a>;
+<a name="l00173"></a><a class="code" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">00173</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">savedTimeout</a>;
+<a name="l00174"></a><a class="code" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">00174</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">dpmsCapable</a>;
+<a name="l00175"></a><a class="code" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">00175</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">dpmsEnabled</a>;
+<a name="l00176"></a><a class="code" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">00176</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">dpmsStandby</a>;
+<a name="l00177"></a><a class="code" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">00177</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">dpmsSuspend</a>;
+<a name="l00178"></a><a class="code" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">00178</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">dpmsOff</a>;
+<a name="l00180"></a><a class="code" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">00180</a> <a class="code" href="struct__DMXStatInfo.html">DMXStatInfo</a> *<a class="code" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">stat</a>;
+<a name="l00181"></a><a class="code" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">00181</a> Bool <a class="code" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">needsSync</a>;
+<a name="l00183"></a>00183 <span class="preprocessor">#ifdef GLXEXT</span>
+<a name="l00184"></a>00184 <span class="preprocessor"></span>
+<a name="l00185"></a>00185 <span class="keywordtype">int</span> numGlxVisuals;
+<a name="l00186"></a>00186 __GLXvisualConfig *glxVisuals;
+<a name="l00187"></a>00187 <span class="keywordtype">int</span> glxMajorOpcode;
+<a name="l00188"></a>00188 <span class="keywordtype">int</span> glxErrorBase;
+<a name="l00189"></a>00189
+<a name="l00191"></a>00191 __GLXFBConfig *fbconfigs;
+<a name="l00192"></a>00192 <span class="keywordtype">int</span> numFBConfigs;
+<a name="l00193"></a>00193 <span class="preprocessor">#endif</span>
+<a name="l00194"></a>00194 <span class="preprocessor"></span>
+<a name="l00197"></a><a class="code" href="struct__DMXScreenInfo.html#a94a4815bc20535c8946876d2113b109e">00197</a> CloseScreenProcPtr <a class="code" href="struct__DMXScreenInfo.html#a94a4815bc20535c8946876d2113b109e">CloseScreen</a>;
+<a name="l00198"></a><a class="code" href="struct__DMXScreenInfo.html#a357f02026fd7a4d50e682c87554b15a7">00198</a> SaveScreenProcPtr <a class="code" href="struct__DMXScreenInfo.html#a357f02026fd7a4d50e682c87554b15a7">SaveScreen</a>;
+<a name="l00199"></a>00199
+<a name="l00200"></a><a class="code" href="struct__DMXScreenInfo.html#a0608031d93f0f78df41e66fc8e8107cf">00200</a> CreateGCProcPtr <a class="code" href="struct__DMXScreenInfo.html#a0608031d93f0f78df41e66fc8e8107cf">CreateGC</a>;
+<a name="l00201"></a>00201
+<a name="l00202"></a><a class="code" href="struct__DMXScreenInfo.html#a19123a8915a37e821ef46bc63f646d8d">00202</a> CreateWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a19123a8915a37e821ef46bc63f646d8d">CreateWindow</a>;
+<a name="l00203"></a><a class="code" href="struct__DMXScreenInfo.html#a0d204177b5df7dab4a89741439728a56">00203</a> DestroyWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a0d204177b5df7dab4a89741439728a56">DestroyWindow</a>;
+<a name="l00204"></a><a class="code" href="struct__DMXScreenInfo.html#afad6bda7c2505a7fedabdf055f7838c5">00204</a> PositionWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#afad6bda7c2505a7fedabdf055f7838c5">PositionWindow</a>;
+<a name="l00205"></a><a class="code" href="struct__DMXScreenInfo.html#a35d0114e24f9eeff1f5649bcb0b00d71">00205</a> ChangeWindowAttributesProcPtr <a class="code" href="struct__DMXScreenInfo.html#a35d0114e24f9eeff1f5649bcb0b00d71">ChangeWindowAttributes</a>;
+<a name="l00206"></a><a class="code" href="struct__DMXScreenInfo.html#a2b3ed1977ce205b1bb518393e1b434f6">00206</a> RealizeWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a2b3ed1977ce205b1bb518393e1b434f6">RealizeWindow</a>;
+<a name="l00207"></a><a class="code" href="struct__DMXScreenInfo.html#a7b72d30e072b0f1a5f1e89ae9c1155f0">00207</a> UnrealizeWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a7b72d30e072b0f1a5f1e89ae9c1155f0">UnrealizeWindow</a>;
+<a name="l00208"></a><a class="code" href="struct__DMXScreenInfo.html#a8c16eedf083215c4076fcd8851cf6bc2">00208</a> RestackWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a8c16eedf083215c4076fcd8851cf6bc2">RestackWindow</a>;
+<a name="l00209"></a><a class="code" href="struct__DMXScreenInfo.html#a526c7fea5a2a39d325eab3fd4efb503d">00209</a> WindowExposuresProcPtr <a class="code" href="struct__DMXScreenInfo.html#a526c7fea5a2a39d325eab3fd4efb503d">WindowExposures</a>;
+<a name="l00210"></a><a class="code" href="struct__DMXScreenInfo.html#a8f1472064bae45d6b59bee2580a185aa">00210</a> CopyWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a8f1472064bae45d6b59bee2580a185aa">CopyWindow</a>;
+<a name="l00211"></a>00211
+<a name="l00212"></a><a class="code" href="struct__DMXScreenInfo.html#a949c2799e41ad4f4384cc862df4022fd">00212</a> ResizeWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a949c2799e41ad4f4384cc862df4022fd">ResizeWindow</a>;
+<a name="l00213"></a><a class="code" href="struct__DMXScreenInfo.html#a71362d4473da8793f624eaa6a9ac61af">00213</a> ReparentWindowProcPtr <a class="code" href="struct__DMXScreenInfo.html#a71362d4473da8793f624eaa6a9ac61af">ReparentWindow</a>;
+<a name="l00214"></a>00214
+<a name="l00215"></a><a class="code" href="struct__DMXScreenInfo.html#a134b8b97ce93ef4601c972d0fb760e93">00215</a> ChangeBorderWidthProcPtr <a class="code" href="struct__DMXScreenInfo.html#a134b8b97ce93ef4601c972d0fb760e93">ChangeBorderWidth</a>;
+<a name="l00216"></a>00216
+<a name="l00217"></a><a class="code" href="struct__DMXScreenInfo.html#ad622affb2a1524a15f9bad149fa88f30">00217</a> GetImageProcPtr <a class="code" href="struct__DMXScreenInfo.html#ad622affb2a1524a15f9bad149fa88f30">GetImage</a>;
+<a name="l00218"></a><a class="code" href="struct__DMXScreenInfo.html#ad399c770af1784544ede0253593b3700">00218</a> GetSpansProcPtr <a class="code" href="struct__DMXScreenInfo.html#ad399c770af1784544ede0253593b3700">GetSpans</a>;
+<a name="l00219"></a>00219
+<a name="l00220"></a><a class="code" href="struct__DMXScreenInfo.html#a88d8c787b8e05b4d69fa3d91f6456542">00220</a> CreatePixmapProcPtr <a class="code" href="struct__DMXScreenInfo.html#a88d8c787b8e05b4d69fa3d91f6456542">CreatePixmap</a>;
+<a name="l00221"></a><a class="code" href="struct__DMXScreenInfo.html#adafeb1337d14d4f650098f3bd06214db">00221</a> DestroyPixmapProcPtr <a class="code" href="struct__DMXScreenInfo.html#adafeb1337d14d4f650098f3bd06214db">DestroyPixmap</a>;
+<a name="l00222"></a><a class="code" href="struct__DMXScreenInfo.html#a1d29c3ada0aab8fbcd88c5ceaa48cf2d">00222</a> BitmapToRegionProcPtr <a class="code" href="struct__DMXScreenInfo.html#a1d29c3ada0aab8fbcd88c5ceaa48cf2d">BitmapToRegion</a>;
+<a name="l00223"></a>00223
+<a name="l00224"></a><a class="code" href="struct__DMXScreenInfo.html#a22e93c0020eab3f889c54093ad32348e">00224</a> RealizeFontProcPtr <a class="code" href="struct__DMXScreenInfo.html#a22e93c0020eab3f889c54093ad32348e">RealizeFont</a>;
+<a name="l00225"></a><a class="code" href="struct__DMXScreenInfo.html#af46646c951db10afab56244b5345a6d8">00225</a> UnrealizeFontProcPtr <a class="code" href="struct__DMXScreenInfo.html#af46646c951db10afab56244b5345a6d8">UnrealizeFont</a>;
+<a name="l00226"></a>00226
+<a name="l00227"></a><a class="code" href="struct__DMXScreenInfo.html#a082a4bae927eb9bbbd87cebdfd4d9dfc">00227</a> CreateColormapProcPtr <a class="code" href="struct__DMXScreenInfo.html#a082a4bae927eb9bbbd87cebdfd4d9dfc">CreateColormap</a>;
+<a name="l00228"></a><a class="code" href="struct__DMXScreenInfo.html#a0a407c422f268db1da74672d572102bb">00228</a> DestroyColormapProcPtr <a class="code" href="struct__DMXScreenInfo.html#a0a407c422f268db1da74672d572102bb">DestroyColormap</a>;
+<a name="l00229"></a><a class="code" href="struct__DMXScreenInfo.html#ab5a18ace3bb18cbcc9e127f51c494006">00229</a> InstallColormapProcPtr <a class="code" href="struct__DMXScreenInfo.html#ab5a18ace3bb18cbcc9e127f51c494006">InstallColormap</a>;
+<a name="l00230"></a><a class="code" href="struct__DMXScreenInfo.html#addce695c56fcc40e89b5c5add6a09205">00230</a> StoreColorsProcPtr <a class="code" href="struct__DMXScreenInfo.html#addce695c56fcc40e89b5c5add6a09205">StoreColors</a>;
+<a name="l00231"></a>00231
+<a name="l00232"></a><a class="code" href="struct__DMXScreenInfo.html#ad4273ba541b4d7e50c967c42d80733bb">00232</a> SetShapeProcPtr <a class="code" href="struct__DMXScreenInfo.html#ad4273ba541b4d7e50c967c42d80733bb">SetShape</a>;
+<a name="l00233"></a>00233
+<a name="l00234"></a><a class="code" href="struct__DMXScreenInfo.html#adf17f1a03e6a5a127b02aaa9005d8089">00234</a> CreatePictureProcPtr <a class="code" href="struct__DMXScreenInfo.html#adf17f1a03e6a5a127b02aaa9005d8089">CreatePicture</a>;
+<a name="l00235"></a><a class="code" href="struct__DMXScreenInfo.html#a31909a1072cd78345457bd6b0c81ac1c">00235</a> DestroyPictureProcPtr <a class="code" href="struct__DMXScreenInfo.html#a31909a1072cd78345457bd6b0c81ac1c">DestroyPicture</a>;
+<a name="l00236"></a><a class="code" href="struct__DMXScreenInfo.html#a62a21ad708a96cb1653e8d572895b1de">00236</a> ChangePictureClipProcPtr <a class="code" href="struct__DMXScreenInfo.html#a62a21ad708a96cb1653e8d572895b1de">ChangePictureClip</a>;
+<a name="l00237"></a><a class="code" href="struct__DMXScreenInfo.html#ab643ec0c295421859733b8f654ff8ce7">00237</a> DestroyPictureClipProcPtr <a class="code" href="struct__DMXScreenInfo.html#ab643ec0c295421859733b8f654ff8ce7">DestroyPictureClip</a>;
+<a name="l00238"></a>00238
+<a name="l00239"></a><a class="code" href="struct__DMXScreenInfo.html#a933b5c32ef1671dae5acc1e96b7f34e3">00239</a> ChangePictureProcPtr <a class="code" href="struct__DMXScreenInfo.html#a933b5c32ef1671dae5acc1e96b7f34e3">ChangePicture</a>;
+<a name="l00240"></a><a class="code" href="struct__DMXScreenInfo.html#a627ae18aeaa92da0923ab49803470c71">00240</a> ValidatePictureProcPtr <a class="code" href="struct__DMXScreenInfo.html#a627ae18aeaa92da0923ab49803470c71">ValidatePicture</a>;
+<a name="l00241"></a>00241
+<a name="l00242"></a><a class="code" href="struct__DMXScreenInfo.html#a5e70f79e08b658092d83d266686c9a67">00242</a> CompositeProcPtr <a class="code" href="struct__DMXScreenInfo.html#a5e70f79e08b658092d83d266686c9a67">Composite</a>;
+<a name="l00243"></a><a class="code" href="struct__DMXScreenInfo.html#ab2bf09e1d055cad3ecfb1b00ddadc89e">00243</a> GlyphsProcPtr <a class="code" href="struct__DMXScreenInfo.html#ab2bf09e1d055cad3ecfb1b00ddadc89e">Glyphs</a>;
+<a name="l00244"></a><a class="code" href="struct__DMXScreenInfo.html#a2b5509668e39153253b7d7d945dddecb">00244</a> CompositeRectsProcPtr <a class="code" href="struct__DMXScreenInfo.html#a2b5509668e39153253b7d7d945dddecb">CompositeRects</a>;
+<a name="l00245"></a>00245
+<a name="l00246"></a><a class="code" href="struct__DMXScreenInfo.html#adaae790d6f5dd1dec98e57e2e669e3fd">00246</a> InitIndexedProcPtr <a class="code" href="struct__DMXScreenInfo.html#adaae790d6f5dd1dec98e57e2e669e3fd">InitIndexed</a>;
+<a name="l00247"></a><a class="code" href="struct__DMXScreenInfo.html#a99c75513907782d2679bd9e2ed327621">00247</a> CloseIndexedProcPtr <a class="code" href="struct__DMXScreenInfo.html#a99c75513907782d2679bd9e2ed327621">CloseIndexed</a>;
+<a name="l00248"></a><a class="code" href="struct__DMXScreenInfo.html#afa11a2993fe14ec90db2de382cdeb25c">00248</a> UpdateIndexedProcPtr <a class="code" href="struct__DMXScreenInfo.html#afa11a2993fe14ec90db2de382cdeb25c">UpdateIndexed</a>;
+<a name="l00249"></a>00249
+<a name="l00250"></a><a class="code" href="struct__DMXScreenInfo.html#a4008b17ac4eb89816a8c2d3ce2e14421">00250</a> TrapezoidsProcPtr <a class="code" href="struct__DMXScreenInfo.html#a4008b17ac4eb89816a8c2d3ce2e14421">Trapezoids</a>;
+<a name="l00251"></a><a class="code" href="struct__DMXScreenInfo.html#af37150652184c4865700576504ec9df9">00251</a> TrianglesProcPtr <a class="code" href="struct__DMXScreenInfo.html#af37150652184c4865700576504ec9df9">Triangles</a>;
+<a name="l00252"></a><a class="code" href="struct__DMXScreenInfo.html#a5918dec3813c47c24f52f076f1b05dc4">00252</a> TriStripProcPtr <a class="code" href="struct__DMXScreenInfo.html#a5918dec3813c47c24f52f076f1b05dc4">TriStrip</a>;
+<a name="l00253"></a><a class="code" href="struct__DMXScreenInfo.html#a0829ea4299b5afcb1d2f2894334fed69">00253</a> TriFanProcPtr <a class="code" href="struct__DMXScreenInfo.html#a0829ea4299b5afcb1d2f2894334fed69">TriFan</a>;
+<a name="l00254"></a>00254 } <a class="code" href="dmx_8h.html#a093c967353474b26640284f89d78e204">DMXScreenInfo</a>;
+<a name="l00255"></a>00255
+<a name="l00256"></a>00256 <span class="comment">/* Global variables available to all Xserver/hw/dmx routines. */</span>
+<a name="l00257"></a>00257 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>;
+<a name="l00258"></a>00258 <span class="keyword">extern</span> <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *<a class="code" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>;
+<a name="l00259"></a>00259 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>;
+<a name="l00262"></a>00262 <span class="keyword">extern</span> XErrorEvent <a class="code" href="dmx_8h.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxLastErrorEvent</a>;
+<a name="l00264"></a>00264 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxErrorOccurred</a>;
+<a name="l00266"></a>00266 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a>;
+<a name="l00269"></a>00269 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a>;
+<a name="l00272"></a>00272 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a>;
+<a name="l00275"></a>00275 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a>;
+<a name="l00279"></a>00279 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a>;
+<a name="l00281"></a>00281 <span class="preprocessor">#ifdef GLXEXT</span>
+<a name="l00282"></a>00282 <span class="preprocessor"></span><span class="keyword">extern</span> Bool <a class="code" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxGLXProxy</a>;
+<a name="l00284"></a>00284 <span class="keyword">extern</span> Bool dmxGLXSwapGroupSupport;
+<a name="l00288"></a>00288 <span class="keyword">extern</span> Bool dmxGLXSyncSwap;
+<a name="l00292"></a>00292 <span class="keyword">extern</span> Bool dmxGLXFinishSwap;
+<a name="l00297"></a>00297 <span class="preprocessor">#endif</span>
+<a name="l00298"></a>00298 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a>;
+<a name="l00307"></a>00307 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a>;
+<a name="l00311"></a>00311 <span class="keyword">extern</span> Bool <a class="code" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>;
+<a name="l00316"></a><a class="code" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">00316</a> <span class="preprocessor">#define DMX_WRAP(_entry, _newfunc, _saved, _actual) \</span>
+<a name="l00317"></a>00317 <span class="preprocessor">do { \</span>
+<a name="l00318"></a>00318 <span class="preprocessor"> (_saved)-&gt;_entry = (_actual)-&gt;_entry; \</span>
+<a name="l00319"></a>00319 <span class="preprocessor"> (_actual)-&gt;_entry = (_newfunc); \</span>
+<a name="l00320"></a>00320 <span class="preprocessor">} while (0)</span>
+<a name="l00321"></a>00321 <span class="preprocessor"></span>
+<a name="l00323"></a><a class="code" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">00323</a> <span class="preprocessor">#define DMX_UNWRAP(_entry, _saved, _actual) \</span>
+<a name="l00324"></a>00324 <span class="preprocessor">do { \</span>
+<a name="l00325"></a>00325 <span class="preprocessor"> (_actual)-&gt;_entry = (_saved)-&gt;_entry; \</span>
+<a name="l00326"></a>00326 <span class="preprocessor">} while (0)</span>
+<a name="l00327"></a>00327 <span class="preprocessor"></span>
+<a name="l00328"></a>00328 <span class="comment">/* Define the MAXSCREENSALLOC/FREE macros, when MAXSCREENS patch has not</span>
+<a name="l00329"></a>00329 <span class="comment"> * been applied to sources. */</span>
+<a name="l00330"></a>00330 <span class="preprocessor">#ifdef MAXSCREENS</span>
+<a name="l00331"></a>00331 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREEN_MAKECONSTSTR1(x) #x</span>
+<a name="l00332"></a>00332 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREEN_MAKECONSTSTR2(x) MAXSCREEN_MAKECONSTSTR1(x)</span>
+<a name="l00333"></a>00333 <span class="preprocessor"></span>
+<a name="l00334"></a>00334 <span class="preprocessor">#define MAXSCREEN_FAILED_TXT &quot;Failed at [&quot; \</span>
+<a name="l00335"></a>00335 <span class="preprocessor"> MAXSCREEN_MAKECONSTSTR2(__LINE__) &quot;:&quot; __FILE__ &quot;] to allocate object: &quot;</span>
+<a name="l00336"></a>00336 <span class="preprocessor"></span>
+<a name="l00337"></a>00337 <span class="preprocessor">#define _MAXSCREENSALLOCF(o,size,fatal) \</span>
+<a name="l00338"></a>00338 <span class="preprocessor"> do { \</span>
+<a name="l00339"></a>00339 <span class="preprocessor"> if (!o) { \</span>
+<a name="l00340"></a>00340 <span class="preprocessor"> o = calloc((size), sizeof(*(o))); \</span>
+<a name="l00341"></a>00341 <span class="preprocessor"> if (!o &amp;&amp; fatal) FatalError(MAXSCREEN_FAILED_TXT #o); \</span>
+<a name="l00342"></a>00342 <span class="preprocessor"> } \</span>
+<a name="l00343"></a>00343 <span class="preprocessor"> } while (0)</span>
+<a name="l00344"></a>00344 <span class="preprocessor"></span><span class="preprocessor">#define _MAXSCREENSALLOCR(o,size,retval) \</span>
+<a name="l00345"></a>00345 <span class="preprocessor"> do { \</span>
+<a name="l00346"></a>00346 <span class="preprocessor"> if (!o) { \</span>
+<a name="l00347"></a>00347 <span class="preprocessor"> o = calloc((size), sizeof(*(o))); \</span>
+<a name="l00348"></a>00348 <span class="preprocessor"> if (!o) return retval; \</span>
+<a name="l00349"></a>00349 <span class="preprocessor"> } \</span>
+<a name="l00350"></a>00350 <span class="preprocessor"> } while (0)</span>
+<a name="l00351"></a>00351 <span class="preprocessor"></span>
+<a name="l00352"></a>00352 <span class="preprocessor">#define MAXSCREENSFREE(o) \</span>
+<a name="l00353"></a>00353 <span class="preprocessor"> do { \</span>
+<a name="l00354"></a>00354 <span class="preprocessor"> free(o); \</span>
+<a name="l00355"></a>00355 <span class="preprocessor"> o = NULL; \</span>
+<a name="l00356"></a>00356 <span class="preprocessor"> } while (0)</span>
+<a name="l00357"></a>00357 <span class="preprocessor"></span>
+<a name="l00358"></a>00358 <span class="preprocessor">#define MAXSCREENSALLOC(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 0)</span>
+<a name="l00359"></a>00359 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREENSALLOC_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS, 1)</span>
+<a name="l00360"></a>00360 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREENSALLOC_RETURN(o,r) _MAXSCREENSALLOCR(o,MAXSCREENS, (r))</span>
+<a name="l00361"></a>00361 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREENSALLOCPLUSONE(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,0)</span>
+<a name="l00362"></a>00362 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREENSALLOCPLUSONE_FATAL(o) _MAXSCREENSALLOCF(o,MAXSCREENS+1,1)</span>
+<a name="l00363"></a>00363 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREENSCALLOC(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),0)</span>
+<a name="l00364"></a>00364 <span class="preprocessor"></span><span class="preprocessor">#define MAXSCREENSCALLOC_FATAL(o,m) _MAXSCREENSALLOCF(o,MAXSCREENS*(m),1)</span>
+<a name="l00365"></a>00365 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00366"></a>00366 <span class="preprocessor"></span>
+<a name="l00367"></a>00367 <span class="keyword">extern</span> DevPrivateKeyRec <a class="code" href="dmx_8h.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a>;
+<a name="l00368"></a><a class="code" href="dmx_8h.html#aca566caa216b43a032891484384dfca8">00368</a> <span class="preprocessor">#define dmxGCPrivateKey (&amp;dmxGCPrivateKeyRec) </span>
+<a name="l00370"></a>00370 <span class="preprocessor">extern DevPrivateKeyRec dmxWinPrivateKeyRec;</span>
+<a name="l00371"></a><a class="code" href="dmx_8h.html#a7f019f89eaada79f813c4f969ef4ab00">00371</a> <span class="preprocessor"></span><span class="preprocessor">#define dmxWinPrivateKey (&amp;dmxWinPrivateKeyRec) </span>
+<a name="l00373"></a>00373 <span class="preprocessor">extern DevPrivateKeyRec dmxPixPrivateKeyRec;</span>
+<a name="l00374"></a><a class="code" href="dmx_8h.html#a58cdac45cf32cd2a4246d891717af12a">00374</a> <span class="preprocessor"></span><span class="preprocessor">#define dmxPixPrivateKey (&amp;dmxPixPrivateKeyRec) </span>
+<a name="l00376"></a>00376 <span class="preprocessor">extern int dmxFontPrivateIndex; </span>
+<a name="l00378"></a>00378 <span class="preprocessor">extern DevPrivateKeyRec dmxScreenPrivateKeyRec;</span>
+<a name="l00379"></a><a class="code" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">00379</a> <span class="preprocessor"></span><span class="preprocessor">#define dmxScreenPrivateKey (&amp;dmxScreenPrivateKeyRec) </span>
+<a name="l00381"></a>00381 <span class="preprocessor">extern DevPrivateKeyRec dmxColormapPrivateKeyRec;</span>
+<a name="l00382"></a><a class="code" href="dmx_8h.html#a47c216bb108efa441d7009a7da18d759">00382</a> <span class="preprocessor"></span><span class="preprocessor">#define dmxColormapPrivateKey (&amp;dmxColormapPrivateKeyRec) </span>
+<a name="l00384"></a>00384 <span class="preprocessor">extern DevPrivateKeyRec dmxPictPrivateKeyRec;</span>
+<a name="l00385"></a><a class="code" href="dmx_8h.html#ae1d817ef5faef4a4328e7b6e20329eeb">00385</a> <span class="preprocessor"></span><span class="preprocessor">#define dmxPictPrivateKey (&amp;dmxPictPrivateKeyRec) </span>
+<a name="l00387"></a>00387 <span class="preprocessor">extern DevPrivateKeyRec dmxGlyphSetPrivateKeyRec;</span>
+<a name="l00388"></a><a class="code" href="dmx_8h.html#a1ff8700f83ebcf9aab7903e6686dd140">00388</a> <span class="preprocessor"></span><span class="preprocessor">#define dmxGlyphSetPrivateKey (&amp;dmxGlyphSetPrivateKeyRec) </span>
+<a name="l00390"></a>00390 <span class="preprocessor">#endif </span><span class="comment">/* DMX_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx_8h.html">dmx.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx__glxvisuals_8c.html b/hw/dmx/doc/html/dmx__glxvisuals_8c.html
new file mode 100644
index 0000000..4299022
--- /dev/null
+++ b/hw/dmx/doc/html/dmx__glxvisuals_8c.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx__glxvisuals_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmx_glxvisuals.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &lt;GL/glx.h&gt;</code><br/>
+<code>#include &lt;GL/glxproto.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/Xext.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/extutil.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="dmx__glxvisuals_8h_source.html">dmx_glxvisuals.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">__GLXvisualConfig *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx__glxvisuals_8c.html#abe57e7081e90397658ffe52225891023">GetGLXVisualConfigs</a> (Display *dpy, int screen, int *nconfigs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">__GLXFBConfig *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx__glxvisuals_8c.html#a0ec26db964e7f051b0c53fa80f0ca64f">GetGLXFBConfigs</a> (Display *dpy, int glxMajorOpcode, int *nconfigs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">__GLXvisualConfig *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx__glxvisuals_8c.html#a8c817583455230eb81b38c9fcdf3d363">GetGLXVisualConfigsFromFBConfigs</a> (__GLXFBConfig *fbconfigs, int nfbconfigs, XVisualInfo *visuals, int nvisuals, __GLXvisualConfig *glxConfigs, int nGlxConfigs, int *nconfigs)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0ec26db964e7f051b0c53fa80f0ca64f"></a><!-- doxytag: member="dmx_glxvisuals.c::GetGLXFBConfigs" ref="a0ec26db964e7f051b0c53fa80f0ca64f" args="(Display *dpy, int glxMajorOpcode, int *nconfigs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">__GLXFBConfig* GetGLXFBConfigs </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>glxMajorOpcode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nconfigs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe57e7081e90397658ffe52225891023"></a><!-- doxytag: member="dmx_glxvisuals.c::GetGLXVisualConfigs" ref="abe57e7081e90397658ffe52225891023" args="(Display *dpy, int screen, int *nconfigs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">__GLXvisualConfig* GetGLXVisualConfigs </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>screen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nconfigs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c817583455230eb81b38c9fcdf3d363"></a><!-- doxytag: member="dmx_glxvisuals.c::GetGLXVisualConfigsFromFBConfigs" ref="a8c817583455230eb81b38c9fcdf3d363" args="(__GLXFBConfig *fbconfigs, int nfbconfigs, XVisualInfo *visuals, int nvisuals, __GLXvisualConfig *glxConfigs, int nGlxConfigs, int *nconfigs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">__GLXvisualConfig* GetGLXVisualConfigsFromFBConfigs </td>
+ <td>(</td>
+ <td class="paramtype">__GLXFBConfig *&#160;</td>
+ <td class="paramname"><em>fbconfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nfbconfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XVisualInfo *&#160;</td>
+ <td class="paramname"><em>visuals</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nvisuals</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">__GLXvisualConfig *&#160;</td>
+ <td class="paramname"><em>glxConfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nGlxConfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nconfigs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx__glxvisuals_8c.html">dmx_glxvisuals.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx__glxvisuals_8h.html b/hw/dmx/doc/html/dmx__glxvisuals_8h.html
new file mode 100644
index 0000000..7312e78
--- /dev/null
+++ b/hw/dmx/doc/html/dmx__glxvisuals_8h.html
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx__glxvisuals_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmx_glxvisuals.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;GL/glxint.h&gt;</code><br/>
+</div>
+<p><a href="dmx__glxvisuals_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">__GLXvisualConfig *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx__glxvisuals_8h.html#abe57e7081e90397658ffe52225891023">GetGLXVisualConfigs</a> (Display *dpy, int screen, int *nconfigs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">__GLXFBConfig *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx__glxvisuals_8h.html#a0ec26db964e7f051b0c53fa80f0ca64f">GetGLXFBConfigs</a> (Display *dpy, int glxMajorOpcode, int *nconfigs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">__GLXvisualConfig *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmx__glxvisuals_8h.html#a8c817583455230eb81b38c9fcdf3d363">GetGLXVisualConfigsFromFBConfigs</a> (__GLXFBConfig *fbconfigs, int nfbconfigs, XVisualInfo *visuals, int nvisuals, __GLXvisualConfig *glxConfigs, int nGlxConfigs, int *nconfigs)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0ec26db964e7f051b0c53fa80f0ca64f"></a><!-- doxytag: member="dmx_glxvisuals.h::GetGLXFBConfigs" ref="a0ec26db964e7f051b0c53fa80f0ca64f" args="(Display *dpy, int glxMajorOpcode, int *nconfigs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">__GLXFBConfig* GetGLXFBConfigs </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>glxMajorOpcode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nconfigs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe57e7081e90397658ffe52225891023"></a><!-- doxytag: member="dmx_glxvisuals.h::GetGLXVisualConfigs" ref="abe57e7081e90397658ffe52225891023" args="(Display *dpy, int screen, int *nconfigs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">__GLXvisualConfig* GetGLXVisualConfigs </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>screen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nconfigs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c817583455230eb81b38c9fcdf3d363"></a><!-- doxytag: member="dmx_glxvisuals.h::GetGLXVisualConfigsFromFBConfigs" ref="a8c817583455230eb81b38c9fcdf3d363" args="(__GLXFBConfig *fbconfigs, int nfbconfigs, XVisualInfo *visuals, int nvisuals, __GLXvisualConfig *glxConfigs, int nGlxConfigs, int *nconfigs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">__GLXvisualConfig* GetGLXVisualConfigsFromFBConfigs </td>
+ <td>(</td>
+ <td class="paramtype">__GLXFBConfig *&#160;</td>
+ <td class="paramname"><em>fbconfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nfbconfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XVisualInfo *&#160;</td>
+ <td class="paramname"><em>visuals</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nvisuals</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">__GLXvisualConfig *&#160;</td>
+ <td class="paramname"><em>glxConfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nGlxConfigs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nconfigs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx__glxvisuals_8h.html">dmx_glxvisuals.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmx__glxvisuals_8h_source.html b/hw/dmx/doc/html/dmx__glxvisuals_8h_source.html
new file mode 100644
index 0000000..0b9e57e
--- /dev/null
+++ b/hw/dmx/doc/html/dmx__glxvisuals_8h_source.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmx__glxvisuals_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmx_glxvisuals.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmx__glxvisuals_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)</span>
+<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining a</span>
+<a name="l00006"></a>00006 <span class="comment"> * copy of this software and associated documentation files (the &quot;Software&quot;),</span>
+<a name="l00007"></a>00007 <span class="comment"> * to deal in the Software without restriction, including without limitation</span>
+<a name="l00008"></a>00008 <span class="comment"> * the rights to use, copy, modify, merge, publish, distribute, sublicense,</span>
+<a name="l00009"></a>00009 <span class="comment"> * and/or sell copies of the Software, and to permit persons to whom the</span>
+<a name="l00010"></a>00010 <span class="comment"> * Software is furnished to do so, subject to the following conditions:</span>
+<a name="l00011"></a>00011 <span class="comment"> *</span>
+<a name="l00012"></a>00012 <span class="comment"> * The above copyright notice including the dates of first publication and</span>
+<a name="l00013"></a>00013 <span class="comment"> * either this permission notice or a reference to</span>
+<a name="l00014"></a>00014 <span class="comment"> * http://oss.sgi.com/projects/FreeB/</span>
+<a name="l00015"></a>00015 <span class="comment"> * shall be included in all copies or substantial portions of the Software.</span>
+<a name="l00016"></a>00016 <span class="comment"> *</span>
+<a name="l00017"></a>00017 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS</span>
+<a name="l00018"></a>00018 <span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span>
+<a name="l00019"></a>00019 <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL</span>
+<a name="l00020"></a>00020 <span class="comment"> * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,</span>
+<a name="l00021"></a>00021 <span class="comment"> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF</span>
+<a name="l00022"></a>00022 <span class="comment"> * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00023"></a>00023 <span class="comment"> * SOFTWARE.</span>
+<a name="l00024"></a>00024 <span class="comment"> *</span>
+<a name="l00025"></a>00025 <span class="comment"> * Except as contained in this notice, the name of Silicon Graphics, Inc.</span>
+<a name="l00026"></a>00026 <span class="comment"> * shall not be used in advertising or otherwise to promote the sale, use or</span>
+<a name="l00027"></a>00027 <span class="comment"> * other dealings in this Software without prior written authorization from</span>
+<a name="l00028"></a>00028 <span class="comment"> * Silicon Graphics, Inc.</span>
+<a name="l00029"></a>00029 <span class="comment"> */</span>
+<a name="l00030"></a>00030
+<a name="l00031"></a>00031 <span class="preprocessor">#ifndef _GLXVISUALS_H</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="preprocessor">#define _GLXVISUALS_H</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;GL/glxint.h&gt;</span>
+<a name="l00035"></a>00035
+<a name="l00037"></a><a class="code" href="structdmxGlxVisualPrivate.html">00037</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00038"></a><a class="code" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">00038</a> <span class="keywordtype">int</span> <a class="code" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">x_visual_depth</a>;
+<a name="l00039"></a><a class="code" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">00039</a> <span class="keywordtype">int</span> <a class="code" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">x_visual_class</a>;
+<a name="l00040"></a>00040 } <a class="code" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a>;
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 __GLXvisualConfig *<a class="code" href="dmx__glxvisuals_8c.html#abe57e7081e90397658ffe52225891023">GetGLXVisualConfigs</a>(Display *dpy,
+<a name="l00043"></a>00043 <span class="keywordtype">int</span> screen,
+<a name="l00044"></a>00044 <span class="keywordtype">int</span> *nconfigs);
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046 __GLXFBConfig *<a class="code" href="dmx__glxvisuals_8c.html#a0ec26db964e7f051b0c53fa80f0ca64f">GetGLXFBConfigs</a>(Display *dpy,
+<a name="l00047"></a>00047 <span class="keywordtype">int</span> glxMajorOpcode,
+<a name="l00048"></a>00048 <span class="keywordtype">int</span> *nconfigs);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 __GLXvisualConfig *<a class="code" href="dmx__glxvisuals_8c.html#a8c817583455230eb81b38c9fcdf3d363">GetGLXVisualConfigsFromFBConfigs</a>(__GLXFBConfig *fbconfigs,
+<a name="l00051"></a>00051 <span class="keywordtype">int</span> nfbconfigs,
+<a name="l00052"></a>00052 XVisualInfo *visuals,
+<a name="l00053"></a>00053 <span class="keywordtype">int</span> nvisuals,
+<a name="l00054"></a>00054 __GLXvisualConfig
+<a name="l00055"></a>00055 *glxConfigs,
+<a name="l00056"></a>00056 <span class="keywordtype">int</span> nGlxConfigs,
+<a name="l00057"></a>00057 <span class="keywordtype">int</span> *nconfigs);
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmx__glxvisuals_8h.html">dmx_glxvisuals.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxarg_8c.html b/hw/dmx/doc/html/dmxarg_8c.html
new file mode 100644
index 0000000..c2a4ada
--- /dev/null
+++ b/hw/dmx/doc/html/dmxarg_8c.html
@@ -0,0 +1,251 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxarg_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxarg.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;dmx.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxarg_8h_source.html">dmxarg.h</a>&quot;</code><br/>
+<code>#include &lt;stdio.h&gt;</code><br/>
+<code>#include &lt;string.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxArg.html">_dmxArg</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#a6da7af093c10727644c84f2c0de19dae">DMX_ARG_TEST</a>&#160;&#160;&#160;0</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, const char *string)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, int item)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8c.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse</a> (const char *string)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Generic comma-delimited argument processing. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a6da7af093c10727644c84f2c0de19dae"></a><!-- doxytag: member="dmxarg.c::DMX_ARG_TEST" ref="a6da7af093c10727644c84f2c0de19dae" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_ARG_TEST&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6d41e61a00975e123ed72a269d653d23"></a><!-- doxytag: member="dmxarg.c::dmxArgAdd" ref="a6d41e61a00975e123ed72a269d653d23" args="(dmxArg a, const char *string)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxArgAdd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Add the <em>string</em> as the next argument in the <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg::argm</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94e36fd228f49fb0a77c34709cbd3a69"></a><!-- doxytag: member="dmxarg.c::dmxArgC" ref="a94e36fd228f49fb0a77c34709cbd3a69" args="(dmxArg a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxArgC </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the number of arguments in the <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af4ecb9595303a7fcac5eae840766b6fb"></a><!-- doxytag: member="dmxarg.c::dmxArgCreate" ref="af4ecb9595303a7fcac5eae840766b6fb" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgCreate </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create an (externally opaque) <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg::argm</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6b362f314787cc0e0fd7ca55b53a5cc"></a><!-- doxytag: member="dmxarg.c::dmxArgFree" ref="aa6b362f314787cc0e0fd7ca55b53a5cc" args="(dmxArg a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxArgFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the specified <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d872851e86ae8063cd13e85ed203d09"></a><!-- doxytag: member="dmxarg.c::dmxArgParse" ref="a7d872851e86ae8063cd13e85ed203d09" args="(const char *string)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgParse </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Parse a string into arguments delimited by commas. Return a new <em>dmxArg</em> object containing the arguments. </p>
+
+<p>References <a class="el" href="dmxarg_8c.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd()</a>, and <a class="el" href="dmxarg_8c.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7de14f607c61ecac05f9c45d002e36ab"></a><!-- doxytag: member="dmxarg.c::dmxArgV" ref="a7de14f607c61ecac05f9c45d002e36ab" args="(dmxArg a, int item)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxArgV </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>item</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the argument number <em>item</em> in the <em>dmxArg</em> object. Arguments are 0 based. NULL will be returned for values less than 0 or equal to or greater than the number of arguments in the object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxarg_8c.html">dmxarg.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxarg_8h.html b/hw/dmx/doc/html/dmxarg_8h.html
new file mode 100644
index 0000000..7c378aa
--- /dev/null
+++ b/hw/dmx/doc/html/dmxarg_8h.html
@@ -0,0 +1,246 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxarg_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxarg.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxarg_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxArg.html">_dmxArg</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#a7f310ec1f9d20311533a2a142a0b92b8">dmxArg</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, const char *string)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a, int item)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC</a> (<a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse</a> (const char *string)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to argument handling functions. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxarg_8c.html">dmxarg.c</a> </dd></dl>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a7f310ec1f9d20311533a2a142a0b92b8"></a><!-- doxytag: member="dmxarg.h::dmxArg" ref="a7f310ec1f9d20311533a2a142a0b92b8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxArg.html">_dmxArg</a>* <a class="el" href="struct__dmxArg.html">dmxArg</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6d41e61a00975e123ed72a269d653d23"></a><!-- doxytag: member="dmxarg.h::dmxArgAdd" ref="a6d41e61a00975e123ed72a269d653d23" args="(dmxArg a, const char *string)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxArgAdd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Add the <em>string</em> as the next argument in the <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg::argm</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94e36fd228f49fb0a77c34709cbd3a69"></a><!-- doxytag: member="dmxarg.h::dmxArgC" ref="a94e36fd228f49fb0a77c34709cbd3a69" args="(dmxArg a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxArgC </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the number of arguments in the <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af4ecb9595303a7fcac5eae840766b6fb"></a><!-- doxytag: member="dmxarg.h::dmxArgCreate" ref="af4ecb9595303a7fcac5eae840766b6fb" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgCreate </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create an (externally opaque) <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg::argm</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6b362f314787cc0e0fd7ca55b53a5cc"></a><!-- doxytag: member="dmxarg.h::dmxArgFree" ref="aa6b362f314787cc0e0fd7ca55b53a5cc" args="(dmxArg a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxArgFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the specified <em>dmxArg</em> object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d872851e86ae8063cd13e85ed203d09"></a><!-- doxytag: member="dmxarg.h::dmxArgParse" ref="a7d872851e86ae8063cd13e85ed203d09" args="(const char *string)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__dmxArg.html">dmxArg</a> dmxArgParse </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Parse a string into arguments delimited by commas. Return a new <em>dmxArg</em> object containing the arguments. </p>
+
+<p>References <a class="el" href="dmxarg_8c.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd()</a>, and <a class="el" href="dmxarg_8c.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7de14f607c61ecac05f9c45d002e36ab"></a><!-- doxytag: member="dmxarg.h::dmxArgV" ref="a7de14f607c61ecac05f9c45d002e36ab" args="(dmxArg a, int item)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxArgV </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>item</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the argument number <em>item</em> in the <em>dmxArg</em> object. Arguments are 0 based. NULL will be returned for values less than 0 or equal to or greater than the number of arguments in the object. </p>
+
+<p>References <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a>, and <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxarg_8h.html">dmxarg.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxarg_8h_source.html b/hw/dmx/doc/html/dmxarg_8h_source.html
new file mode 100644
index 0000000..0b2a354
--- /dev/null
+++ b/hw/dmx/doc/html/dmxarg_8h_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxarg_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxarg.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxarg_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXARG_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXARG_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="dmxarg_8h.html#a7f310ec1f9d20311533a2a142a0b92b8">00040</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxArg.html">_dmxArg</a> *<a class="code" href="dmxarg_8h.html#a7f310ec1f9d20311533a2a142a0b92b8">dmxArg</a>;
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="keyword">extern</span> dmxArg <a class="code" href="dmxarg_8c.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate</a>(<span class="keywordtype">void</span>);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxarg_8c.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree</a>(dmxArg a);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxarg_8c.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd</a>(dmxArg a, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV</a>(dmxArg a, <span class="keywordtype">int</span> item);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC</a>(dmxArg a);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> dmxArg <a class="code" href="dmxarg_8c.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>);
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxarg_8h.html">dmxarg.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxbackend_8c.html b/hw/dmx/doc/html/dmxbackend_8c.html
new file mode 100644
index 0000000..c412ad3
--- /dev/null
+++ b/hw/dmx/doc/html/dmxbackend_8c.html
@@ -0,0 +1,1294 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxbackend_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxbackend.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxbackend_8h_source.html">dmxbackend.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcommon_8h_source.html">dmxcommon.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxconsole_8h_source.html">dmxconsole.h</a>&quot;</code><br/>
+<code>#include &quot;dmxcursor.h&quot;</code><br/>
+<code>#include &quot;dmxprop.h&quot;</code><br/>
+<code>#include &quot;dmxsync.h&quot;</code><br/>
+<code>#include &quot;dmxcb.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxevents_8h_source.html">dmxevents.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="ChkNotMaskEv_8h_source.html">ChkNotMaskEv.h</a>&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;input.h&quot;</code><br/>
+<code>#include &lt;X11/keysym.h&gt;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;scrnintstr.h&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a93e9da9032ea981dd2543ec373eb964f">DMX_BACKEND_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>(f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a302a2c9f84249eee79404eb601d085ab">DMXDBG1</a>(f, a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>(f, a, b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>(f, a, b, c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>(f, a, b, c, d)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>(f, a, b, c, d, e)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>(f, a, b, c, d, e, g)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">DMXDBG7</a>(f, a, b, c, d, e, g, h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a57571aaa5d83f2f29a6bd0ad8379b4fa">DMXDBG8</a>(f, a, b, c, d, e, g, h, i)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">DMXDBG9</a>(f, a, b, c, d, e, g, h, i, j)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#acd47377dd517a5494edae5920e3ae946">dmxBackendDestroyPrivate</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a86a56e6c6d23ef0f13d1d4ee8f84a162">dmxBackendTestScreen</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, long screen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxBackendTestEvents</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a772eea70f63c028de57f6d9e5bb48fbe">dmxBackendTestMotionEvent</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxBackendGetEvent</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, XEvent *X)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int save)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a25cd9424824427d35f7e1cdb6ae0ad61">dmxBackendTestWindow</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxBackendFindWindow</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, Window win)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int screen, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen</a> (int screen, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition</a> (pointer private, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8c.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxBackendFunctions</a> (pointer private, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> function)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>These routines support taking input from devices on the backend (output) displays. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a>. </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a93e9da9032ea981dd2543ec373eb964f"></a><!-- doxytag: member="dmxbackend.c::DMX_BACKEND_DEBUG" ref="a93e9da9032ea981dd2543ec373eb964f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_BACKEND_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adf6865b0bc7ad370c94e3b8682262c13"></a><!-- doxytag: member="dmxbackend.c::DMXDBG0" ref="adf6865b0bc7ad370c94e3b8682262c13" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a302a2c9f84249eee79404eb601d085ab"></a><!-- doxytag: member="dmxbackend.c::DMXDBG1" ref="a302a2c9f84249eee79404eb601d085ab" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1056d63499cee76ebe297c19637f2b79"></a><!-- doxytag: member="dmxbackend.c::DMXDBG2" ref="a1056d63499cee76ebe297c19637f2b79" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c6714b899194081b94edb722ca1c4bc"></a><!-- doxytag: member="dmxbackend.c::DMXDBG3" ref="a6c6714b899194081b94edb722ca1c4bc" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8ffd07ee80777c394a6ff32d1021347d"></a><!-- doxytag: member="dmxbackend.c::DMXDBG4" ref="a8ffd07ee80777c394a6ff32d1021347d" args="(f, a, b, c, d)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG4</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, and <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a753eef37715b6379d7d65e34a23d2e03"></a><!-- doxytag: member="dmxbackend.c::DMXDBG5" ref="a753eef37715b6379d7d65e34a23d2e03" args="(f, a, b, c, d, e)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG5</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af703e1a00a515e2507f7d2a354429a24"></a><!-- doxytag: member="dmxbackend.c::DMXDBG6" ref="af703e1a00a515e2507f7d2a354429a24" args="(f, a, b, c, d, e, g)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG6</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab45c7f6cc47b2c786215ca0276d37d91"></a><!-- doxytag: member="dmxbackend.c::DMXDBG7" ref="ab45c7f6cc47b2c786215ca0276d37d91" args="(f, a, b, c, d, e, g, h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG7</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">h&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a57571aaa5d83f2f29a6bd0ad8379b4fa"></a><!-- doxytag: member="dmxbackend.c::DMXDBG8" ref="a57571aaa5d83f2f29a6bd0ad8379b4fa" args="(f, a, b, c, d, e, g, h, i)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG8</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">h, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">i&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8342fb3f503f3f58f0f636a908292b14"></a><!-- doxytag: member="dmxbackend.c::DMXDBG9" ref="a8342fb3f503f3f58f0f636a908292b14" args="(f, a, b, c, d, e, g, h, i, j)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG9</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">h, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">i, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">j&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="dmxbackend.c::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6e9b6f0743636b93aeb6ae71a3517abf"></a><!-- doxytag: member="dmxbackend.c::dmxBackendCollectEvents" ref="a6e9b6f0743636b93aeb6ae71a3517abf" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendCollectEvents </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get events from the X queue on the backend servers and put the events into the DMX event queue. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxBackendFindWindow()</a>, <a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxBackendGetEvent()</a>, <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>, <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxbackend_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">DMXDBG7</a>, <a class="el" href="dmxbackend_8c.html#a57571aaa5d83f2f29a6bd0ad8379b4fa">DMXDBG8</a>, <a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">DMXDBG9</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a36fc142bcd1dcb22ee46fb68dd443ebc"></a><!-- doxytag: member="dmxbackend.c::dmxBackendComputeCenter" ref="a36fc142bcd1dcb22ee46fb68dd443ebc" args="(myPrivate *priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBackendComputeCenter </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a6e729bd1a19bb488a215d22e8cdc5bdc">_myPrivate::centerX</a>, and <a class="el" href="struct__myPrivate.html#ae9759d71e19697ba4ab27cf944deab9c">_myPrivate::centerY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit()</a>, and <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2a875125c1316c123e45c7e7a9251c2e"></a><!-- doxytag: member="dmxbackend.c::dmxBackendCreatePrivate" ref="a2a875125c1316c123e45c7e7a9251c2e" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer dmxBackendCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create and return a private data structure. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acd47377dd517a5494edae5920e3ae946"></a><!-- doxytag: member="dmxbackend.c::dmxBackendDestroyPrivate" ref="acd47377dd517a5494edae5920e3ae946" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the private data structure. No checking is performed to verify that the structure was actually created by <a class="el" href="dmxbackend_8h.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad19eff278a8cb7748201a1e654c4bf32"></a><!-- doxytag: member="dmxbackend.c::dmxBackendFindOverlapping" ref="ad19eff278a8cb7748201a1e654c4bf32" args="(myPrivate *priv, int screen, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxBackendFindOverlapping </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>screen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__myPrivate.html#a2097f51728e0db5f4fdc91e7d0613bf7">_myPrivate::myScreen</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aad68f30daf82995805de813568eb0087"></a><!-- doxytag: member="dmxbackend.c::dmxBackendFindWindow" ref="aad68f30daf82995805de813568eb0087" args="(myPrivate *priv, Window win)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxBackendFindWindow </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Window&#160;</td>
+ <td class="paramname"><em>win</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxbackend_8c.html#a25cd9424824427d35f7e1cdb6ae0ad61">dmxBackendTestWindow()</a>, and <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0c9ccf0733bd3a4615815fc404e30a9c"></a><!-- doxytag: member="dmxbackend.c::dmxBackendFunctions" ref="a0c9ccf0733bd3a4615815fc404e30a9c" args="(pointer private, DMXFunctionType function)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxBackendFunctions </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Process <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> functions. The only function handled here is to acknowledge a pending server shutdown. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7744472c5c8aafb2dd63d047995aeef3"></a><!-- doxytag: member="dmxbackend.c::dmxBackendGetEvent" ref="a7744472c5c8aafb2dd63d047995aeef3" args="(myPrivate *priv, XEvent *X)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxBackendGetEvent </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>X</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxBackendTestEvents()</a>, and <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a941213c5a98d26e0f30391ee312e1436"></a><!-- doxytag: member="dmxbackend.c::dmxBackendInit" ref="a941213c5a98d26e0f30391ee312e1436" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialized the backend device described by <em>pDev</em>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, and <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a69990fbd029b2aff929c909fab8a9125"></a><!-- doxytag: member="dmxbackend.c::dmxBackendInitPrivate" ref="a69990fbd029b2aff929c909fab8a9125" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxBackendInitPrivate </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit()</a>, <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>, and <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c628b807f62aeeeb2093ad63941eff1"></a><!-- doxytag: member="dmxbackend.c::dmxBackendKbdGetInfo" ref="a1c628b807f62aeeeb2093ad63941eff1" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get information about the backend keyboard (for initialization). </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6027901ceb2a93e4fea5acf9b8cb0059"></a><!-- doxytag: member="dmxbackend.c::dmxBackendLateReInit" ref="a6027901ceb2a93e4fea5acf9b8cb0059" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendLateReInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialized the backend device described by <em>pDev</em> (after a reconfig). </p>
+
+<p>References <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxbackend_8c.html#a302a2c9f84249eee79404eb601d085ab">DMXDBG1</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, <a class="el" href="dmxevents_8c.html#a344419a01be02621ec99942c6cfd45ea">dmxInvalidateGlobalPosition()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1afb0902ffb9019c943b0c4db6315209"></a><!-- doxytag: member="dmxbackend.c::dmxBackendMouGetInfo" ref="a1afb0902ffb9019c943b0c4db6315209" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendMouGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get information about the backend pointer (for initialization). </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2cb121a910d12c89e65fe68d8acb203f"></a><!-- doxytag: member="dmxbackend.c::dmxBackendOffscreen" ref="a2cb121a910d12c89e65fe68d8acb203f" args="(int screen, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxBackendOffscreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>screen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad6238c7e9b114585583ce9b2120ff9fa"></a><!-- doxytag: member="dmxbackend.c::dmxBackendPendingMotionEvent" ref="ad6238c7e9b114585583ce9b2120ff9fa" args="(myPrivate *priv, int save)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxBackendPendingMotionEvent </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>save</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxbackend_8c.html#a772eea70f63c028de57f6d9e5bb48fbe">dmxBackendTestMotionEvent()</a>, and <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ee65e2f1b86616b7898c273d78a5853"></a><!-- doxytag: member="dmxbackend.c::dmxBackendProcessInput" ref="a4ee65e2f1b86616b7898c273d78a5853" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendProcessInput </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called after input events are processed from the DMX queue. No event processing actually takes place here, but this is a convenient place to update the pointer. </p>
+
+<p>References <a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxbackend_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a110847ce3c1d359156a025cf0dfcd734"></a><!-- doxytag: member="dmxbackend.c::dmxBackendSameDisplay" ref="a110847ce3c1d359156a025cf0dfcd734" args="(myPrivate *priv, long screen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxBackendSameDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">long&#160;</td>
+ <td class="paramname"><em>screen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxbackend_8c.html#a86a56e6c6d23ef0f13d1d4ee8f84a162">dmxBackendTestScreen()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, and <a class="el" href="struct__myPrivate.html#a2097f51728e0db5f4fdc91e7d0613bf7">_myPrivate::myScreen</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit()</a>, <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0122fce9552a793ecffc2a6f1e03b4fc"></a><!-- doxytag: member="dmxbackend.c::dmxBackendTestEvents" ref="a0122fce9552a793ecffc2a6f1e03b4fc" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxBackendTestEvents </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, and <a class="el" href="ChkNotMaskEv_8c.html#a492aa70992c986ae525318a29678c4bb">XCheckNotMaskEvent()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxBackendGetEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a772eea70f63c028de57f6d9e5bb48fbe"></a><!-- doxytag: member="dmxbackend.c::dmxBackendTestMotionEvent" ref="a772eea70f63c028de57f6d9e5bb48fbe" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxBackendTestMotionEvent </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86a56e6c6d23ef0f13d1d4ee8f84a162"></a><!-- doxytag: member="dmxbackend.c::dmxBackendTestScreen" ref="a86a56e6c6d23ef0f13d1d4ee8f84a162" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxBackendTestScreen </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25cd9424824427d35f7e1cdb6ae0ad61"></a><!-- doxytag: member="dmxbackend.c::dmxBackendTestWindow" ref="a25cd9424824427d35f7e1cdb6ae0ad61" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxBackendTestWindow </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxBackendFindWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a486d684411f79c459a1195e5c02f404c"></a><!-- doxytag: member="dmxbackend.c::dmxBackendUpdatePosition" ref="a486d684411f79c459a1195e5c02f404c" args="(pointer private, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendUpdatePosition </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called from <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a> for each motion event. <em>x</em> and <em>y</em> are global coordinants. </p>
+
+<p>References <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen()</a>, <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxconsole_8c.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxbackend_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">DMXDBG9</a>, <a class="el" href="dmxcursor_8c.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxbackend_8h.html b/hw/dmx/doc/html/dmxbackend_8h.html
new file mode 100644
index 0000000..6a52d46
--- /dev/null
+++ b/hw/dmx/doc/html/dmxbackend_8h.html
@@ -0,0 +1,356 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxbackend_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxbackend.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxbackend_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#acd47377dd517a5494edae5920e3ae946">dmxBackendDestroyPrivate</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxBackendFunctions</a> (pointer private, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> function)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition</a> (pointer private, int x, int y)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to backend input device support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </dd>
+<dd>
+<a class="el" href="dmxcommon_8c.html">dmxcommon.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6e9b6f0743636b93aeb6ae71a3517abf"></a><!-- doxytag: member="dmxbackend.h::dmxBackendCollectEvents" ref="a6e9b6f0743636b93aeb6ae71a3517abf" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendCollectEvents </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get events from the X queue on the backend servers and put the events into the DMX event queue. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxBackendFindWindow()</a>, <a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxBackendGetEvent()</a>, <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>, <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxbackend_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">DMXDBG7</a>, <a class="el" href="dmxbackend_8c.html#a57571aaa5d83f2f29a6bd0ad8379b4fa">DMXDBG8</a>, <a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">DMXDBG9</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2a875125c1316c123e45c7e7a9251c2e"></a><!-- doxytag: member="dmxbackend.h::dmxBackendCreatePrivate" ref="a2a875125c1316c123e45c7e7a9251c2e" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer dmxBackendCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create and return a private data structure. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acd47377dd517a5494edae5920e3ae946"></a><!-- doxytag: member="dmxbackend.h::dmxBackendDestroyPrivate" ref="acd47377dd517a5494edae5920e3ae946" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the private data structure. No checking is performed to verify that the structure was actually created by <a class="el" href="dmxbackend_8h.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate</a>. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0c9ccf0733bd3a4615815fc404e30a9c"></a><!-- doxytag: member="dmxbackend.h::dmxBackendFunctions" ref="a0c9ccf0733bd3a4615815fc404e30a9c" args="(pointer private, DMXFunctionType function)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxBackendFunctions </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Process <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> functions. The only function handled here is to acknowledge a pending server shutdown. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a941213c5a98d26e0f30391ee312e1436"></a><!-- doxytag: member="dmxbackend.h::dmxBackendInit" ref="a941213c5a98d26e0f30391ee312e1436" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialized the backend device described by <em>pDev</em>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, and <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c628b807f62aeeeb2093ad63941eff1"></a><!-- doxytag: member="dmxbackend.h::dmxBackendKbdGetInfo" ref="a1c628b807f62aeeeb2093ad63941eff1" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get information about the backend keyboard (for initialization). </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6027901ceb2a93e4fea5acf9b8cb0059"></a><!-- doxytag: member="dmxbackend.h::dmxBackendLateReInit" ref="a6027901ceb2a93e4fea5acf9b8cb0059" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendLateReInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialized the backend device described by <em>pDev</em> (after a reconfig). </p>
+
+<p>References <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxbackend_8c.html#a302a2c9f84249eee79404eb601d085ab">DMXDBG1</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, <a class="el" href="dmxevents_8c.html#a344419a01be02621ec99942c6cfd45ea">dmxInvalidateGlobalPosition()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1afb0902ffb9019c943b0c4db6315209"></a><!-- doxytag: member="dmxbackend.h::dmxBackendMouGetInfo" ref="a1afb0902ffb9019c943b0c4db6315209" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendMouGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get information about the backend pointer (for initialization). </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ee65e2f1b86616b7898c273d78a5853"></a><!-- doxytag: member="dmxbackend.h::dmxBackendProcessInput" ref="a4ee65e2f1b86616b7898c273d78a5853" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendProcessInput </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called after input events are processed from the DMX queue. No event processing actually takes place here, but this is a convenient place to update the pointer. </p>
+
+<p>References <a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxbackend_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a486d684411f79c459a1195e5c02f404c"></a><!-- doxytag: member="dmxbackend.h::dmxBackendUpdatePosition" ref="a486d684411f79c459a1195e5c02f404c" args="(pointer private, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBackendUpdatePosition </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called from <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a> for each motion event. <em>x</em> and <em>y</em> are global coordinants. </p>
+
+<p>References <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen()</a>, <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxconsole_8c.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxbackend_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">DMXDBG9</a>, <a class="el" href="dmxcursor_8c.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxbackend_8h.html">dmxbackend.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxbackend_8h_source.html b/hw/dmx/doc/html/dmxbackend_8h_source.html
new file mode 100644
index 0000000..1551d36
--- /dev/null
+++ b/hw/dmx/doc/html/dmxbackend_8h_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxbackend_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxbackend.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxbackend_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _DMXBACKEND_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXBACKEND_H_</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="keyword">extern</span> pointer <a class="code" href="dmxbackend_8c.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate</a>(DeviceIntPtr pDevice);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#acd47377dd517a5494edae5920e3ae946">dmxBackendDestroyPrivate</a>(pointer <span class="keyword">private</span>);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit</a>(DevicePtr pDev);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit</a>(DevicePtr pDev);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents</a>(DevicePtr pDev,
+<a name="l00048"></a>00048 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00049"></a>00049 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00050"></a>00050 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00051"></a>00051 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput</a>(pointer <span class="keyword">private</span>);
+<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxbackend_8c.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxBackendFunctions</a>(pointer <span class="keyword">private</span>, <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> function);
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition</a>(pointer <span class="keyword">private</span>, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxbackend_8h.html">dmxbackend.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcb_8c.html b/hw/dmx/doc/html/dmxcb_8c.html
new file mode 100644
index 0000000..63dc137
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcb_8c.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcb_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxcb.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcb_8h_source.html">dmxcb.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8c.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight</a> (int width, int height)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8c.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight</a> (<a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a> flag)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8c.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback</a> (void)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8c.html#a21fd58c4d3a6b5bba84476c314a6d657">connBlockScreenStart</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code queries and modifies the connection block. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a077a54c8577746426371b996c9aacefb"></a><!-- doxytag: member="dmxcb.c::dmxComputeWidthHeight" ref="a077a54c8577746426371b996c9aacefb" args="(DMXRecomputeFlag flag)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxComputeWidthHeight </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a>&#160;</td>
+ <td class="paramname"><em>flag</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Computes the global bounding box for DMX. This may be larger than the one computed by Xinerama because of the DMX configuration file. </p>
+
+<p>References <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">DMX_NO_RECOMPUTE_BOUNDING_BOX</a>, <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">DMX_RECOMPUTE_BOUNDING_BOX</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a39179d932cde34ab3c947fa017d2d78d"></a><!-- doxytag: member="dmxcb.c::dmxConnectionBlockCallback" ref="a39179d932cde34ab3c947fa017d2d78d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConnectionBlockCallback </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>A callback routine that hooks into Xinerama and provides a convenient place to print summary log information during server startup. This routine does not modify any values. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxcb_8c.html#a21fd58c4d3a6b5bba84476c314a6d657">connBlockScreenStart</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaafedb53a138b81ebb62eeff391f1115"></a><!-- doxytag: member="dmxcb.c::dmxSetWidthHeight" ref="aaafedb53a138b81ebb62eeff391f1115" args="(int width, int height)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetWidthHeight </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>We may want the wall dimensions to be different from the bounding box dimensions that Xinerama computes, so save those and update them here. </p>
+
+<p>References <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, and <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a21fd58c4d3a6b5bba84476c314a6d657"></a><!-- doxytag: member="dmxcb.c::connBlockScreenStart" ref="a21fd58c4d3a6b5bba84476c314a6d657" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxcb_8c.html#a21fd58c4d3a6b5bba84476c314a6d657">connBlockScreenStart</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c8270dd4b1ef6cd953a30cdcae548de"></a><!-- doxytag: member="dmxcb.c::dmxGlobalHeight" ref="a7c8270dd4b1ef6cd953a30cdcae548de" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxcb_8h.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, and <a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a738220b78d864fe9317683a1ff425c75"></a><!-- doxytag: member="dmxcb.c::dmxGlobalWidth" ref="a738220b78d864fe9317683a1ff425c75" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxcb_8h.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The cursor position, in global coordinates. </p>
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, and <a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcb_8c.html">dmxcb.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcb_8h.html b/hw/dmx/doc/html/dmxcb_8h.html
new file mode 100644
index 0000000..f492d7b
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcb_8h.html
@@ -0,0 +1,215 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcb_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxcb.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxcb_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a> { <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">DMX_RECOMPUTE_BOUNDING_BOX</a>,
+<a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">DMX_NO_RECOMPUTE_BOUNDING_BOX</a>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight</a> (int width, int height)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight</a> (<a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a> flag)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback</a> (void)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8h.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcb_8h.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for connection block functions. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcb_8c.html">dmxcb.c</a>. </dd></dl>
+</div><hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="ab00a2ebacc2ad1ec1b8ad02800ff63ee"></a><!-- doxytag: member="dmxcb.h::DMXRecomputeFlag" ref="ab00a2ebacc2ad1ec1b8ad02800ff63ee" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p><a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight</a> can either recompute the global bounding box or not. </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a"></a><!-- doxytag: member="DMX_RECOMPUTE_BOUNDING_BOX" ref="ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a" args="" -->DMX_RECOMPUTE_BOUNDING_BOX</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b"></a><!-- doxytag: member="DMX_NO_RECOMPUTE_BOUNDING_BOX" ref="ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b" args="" -->DMX_NO_RECOMPUTE_BOUNDING_BOX</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a077a54c8577746426371b996c9aacefb"></a><!-- doxytag: member="dmxcb.h::dmxComputeWidthHeight" ref="a077a54c8577746426371b996c9aacefb" args="(DMXRecomputeFlag flag)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxComputeWidthHeight </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a>&#160;</td>
+ <td class="paramname"><em>flag</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Computes the global bounding box for DMX. This may be larger than the one computed by Xinerama because of the DMX configuration file. </p>
+
+<p>References <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">DMX_NO_RECOMPUTE_BOUNDING_BOX</a>, <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">DMX_RECOMPUTE_BOUNDING_BOX</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a39179d932cde34ab3c947fa017d2d78d"></a><!-- doxytag: member="dmxcb.h::dmxConnectionBlockCallback" ref="a39179d932cde34ab3c947fa017d2d78d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConnectionBlockCallback </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>A callback routine that hooks into Xinerama and provides a convenient place to print summary log information during server startup. This routine does not modify any values. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxcb_8c.html#a21fd58c4d3a6b5bba84476c314a6d657">connBlockScreenStart</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaafedb53a138b81ebb62eeff391f1115"></a><!-- doxytag: member="dmxcb.h::dmxSetWidthHeight" ref="aaafedb53a138b81ebb62eeff391f1115" args="(int width, int height)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetWidthHeight </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>We may want the wall dimensions to be different from the bounding box dimensions that Xinerama computes, so save those and update them here. </p>
+
+<p>References <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, and <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a7c8270dd4b1ef6cd953a30cdcae548de"></a><!-- doxytag: member="dmxcb.h::dmxGlobalHeight" ref="a7c8270dd4b1ef6cd953a30cdcae548de" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxcb_8h.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, and <a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a738220b78d864fe9317683a1ff425c75"></a><!-- doxytag: member="dmxcb.h::dmxGlobalWidth" ref="a738220b78d864fe9317683a1ff425c75" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxcb_8h.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The cursor position, in global coordinates. </p>
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, and <a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcb_8h.html">dmxcb.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcb_8h_source.html b/hw/dmx/doc/html/dmxcb_8h_source.html
new file mode 100644
index 0000000..60e7d02
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcb_8h_source.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcb_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxcb.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxcb_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _DMXCB_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCB_H_</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="code" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>;
+<a name="l00042"></a>00042
+<a name="l00045"></a><a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">00045</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00046"></a><a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">00046</a> <a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">DMX_RECOMPUTE_BOUNDING_BOX</a>,
+<a name="l00047"></a><a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">00047</a> <a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">DMX_NO_RECOMPUTE_BOUNDING_BOX</a>
+<a name="l00048"></a>00048 } <a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a>;
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcb_8c.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight</a>(<span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcb_8c.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight</a>(<a class="code" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">DMXRecomputeFlag</a> flag);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcb_8c.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback</a>(<span class="keywordtype">void</span>);
+<a name="l00053"></a>00053 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcb_8h.html">dmxcb.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxclient_8h.html b/hw/dmx/doc/html/dmxclient_8h.html
new file mode 100644
index 0000000..128eab6
--- /dev/null
+++ b/hw/dmx/doc/html/dmxclient_8h.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxclient_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxclient.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;X11/Xlib.h&gt;</code><br/>
+<code>#include &lt;X11/Xlibint.h&gt;</code><br/>
+<code>#include &lt;X11/X.h&gt;</code><br/>
+<code>#include &lt;X11/Xmd.h&gt;</code><br/>
+<code>#include &lt;X11/Xproto.h&gt;</code><br/>
+<code>#include &lt;X11/Xutil.h&gt;</code><br/>
+<code>#include &lt;X11/Xatom.h&gt;</code><br/>
+<code>#include &lt;X11/cursorfont.h&gt;</code><br/>
+<code>#include &lt;X11/Xmu/SysUtil.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/shape.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/Xrender.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XKB.h&gt;</code><br/>
+<code>#include &quot;xkbstr.h&quot;</code><br/>
+<code>#include &lt;X11/extensions/XI.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XInput.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/Xext.h&gt;</code><br/>
+<code>#include &lt;X11/XKBlib.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XKBproto.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XIproto.h&gt;</code><br/>
+</div>
+<p><a href="dmxclient_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a17dcc767f86e6823829de8f847a5d2d4">GC</a>&#160;&#160;&#160;XlibGC</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">DeviceValuator</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">DeviceMotionNotify</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">DeviceFocusIn</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">DeviceFocusOut</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">DeviceStateNotify</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">DeviceMappingNotify</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">ChangeDeviceNotify</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file includes all client-side include files with proper wrapping. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a17dcc767f86e6823829de8f847a5d2d4"></a><!-- doxytag: member="dmxclient.h::GC" ref="a17dcc767f86e6823829de8f847a5d2d4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GC&#160;&#160;&#160;XlibGC</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a9cdf1d1f5958572f162e6c5d5c19d4a4"></a><!-- doxytag: member="dmxclient.h::ChangeDeviceNotify" ref="a9cdf1d1f5958572f162e6c5d5c19d4a4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">ChangeDeviceNotify</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a83d9bb79d3ddadf36469794bf2563482"></a><!-- doxytag: member="dmxclient.h::DeviceFocusIn" ref="a83d9bb79d3ddadf36469794bf2563482" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">DeviceFocusIn</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5da5340a54a4f158c507ee002c4b3824"></a><!-- doxytag: member="dmxclient.h::DeviceFocusOut" ref="a5da5340a54a4f158c507ee002c4b3824" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">DeviceFocusOut</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a232c73ad30bfc3116842076bd6fc1151"></a><!-- doxytag: member="dmxclient.h::DeviceMappingNotify" ref="a232c73ad30bfc3116842076bd6fc1151" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">DeviceMappingNotify</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a989f862a42e735c00e8c23a239920772"></a><!-- doxytag: member="dmxclient.h::DeviceMotionNotify" ref="a989f862a42e735c00e8c23a239920772" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">DeviceMotionNotify</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, and <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7212800e5b127f95425fb860bb2dcbdf"></a><!-- doxytag: member="dmxclient.h::DeviceStateNotify" ref="a7212800e5b127f95425fb860bb2dcbdf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">DeviceStateNotify</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7008cfdcc3748585492b12a9658278b9"></a><!-- doxytag: member="dmxclient.h::DeviceValuator" ref="a7008cfdcc3748585492b12a9658278b9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">DeviceValuator</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac1fa54a853b3edb8cbf6378dfaa962a6"></a><!-- doxytag: member="dmxclient.h::ProximityIn" ref="ac1fa54a853b3edb8cbf6378dfaa962a6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a606f455d31c949b7f57a51a0e0b5f351"></a><!-- doxytag: member="dmxclient.h::ProximityOut" ref="a606f455d31c949b7f57a51a0e0b5f351" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxclient_8h.html">dmxclient.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxclient_8h_source.html b/hw/dmx/doc/html/dmxclient_8h_source.html
new file mode 100644
index 0000000..3fe95b7
--- /dev/null
+++ b/hw/dmx/doc/html/dmxclient_8h_source.html
@@ -0,0 +1,192 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxclient_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxclient.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxclient_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 1995 X Consortium</span>
+<a name="l00003"></a>00003 <span class="comment"> * Copyright 2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00004"></a>00004 <span class="comment"> *</span>
+<a name="l00005"></a>00005 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00006"></a>00006 <span class="comment"> *</span>
+<a name="l00007"></a>00007 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00008"></a>00008 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00009"></a>00009 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00010"></a>00010 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00011"></a>00011 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00012"></a>00012 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00013"></a>00013 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00014"></a>00014 <span class="comment"> *</span>
+<a name="l00015"></a>00015 <span class="comment"> * The above copyright notice and this permission notice shall be</span>
+<a name="l00016"></a>00016 <span class="comment"> * included in all copies or substantial portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT, THE X CONSORTIUM,</span>
+<a name="l00022"></a>00022 <span class="comment"> * AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</span>
+<a name="l00023"></a>00023 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,</span>
+<a name="l00024"></a>00024 <span class="comment"> * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR</span>
+<a name="l00025"></a>00025 <span class="comment"> * OTHER DEALINGS IN THE SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> *</span>
+<a name="l00027"></a>00027 <span class="comment"> * Except as contained in this notice, the name of the X Consortium</span>
+<a name="l00028"></a>00028 <span class="comment"> * shall not be used in advertising or otherwise to promote the sale,</span>
+<a name="l00029"></a>00029 <span class="comment"> * use or other dealings in this Software without prior written</span>
+<a name="l00030"></a>00030 <span class="comment"> * authorization from the X Consortium.</span>
+<a name="l00031"></a>00031 <span class="comment"> */</span>
+<a name="l00032"></a>00032
+<a name="l00033"></a>00033 <span class="comment">/*</span>
+<a name="l00034"></a>00034 <span class="comment"> * Derived from hw/xnest/Xnest.h by Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00035"></a>00035 <span class="comment"> */</span>
+<a name="l00036"></a>00036
+<a name="l00041"></a>00041 <span class="preprocessor">#ifndef _DMXCLIENT_H_</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCLIENT_H_</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a><a class="code" href="dmxclient_8h.html#a17dcc767f86e6823829de8f847a5d2d4">00044</a> <span class="preprocessor">#define GC XlibGC</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a>00046 <span class="preprocessor">#ifdef _XSERVER64</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span><span class="preprocessor">#define DMX64</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#undef _XSERVER64</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> XID64;
+<a name="l00050"></a>00050 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Mask64;
+<a name="l00051"></a>00051 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Atom64;
+<a name="l00052"></a>00052 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> VisualID64;
+<a name="l00053"></a>00053 <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> Time64;
+<a name="l00054"></a>00054 <span class="preprocessor">#define XID XID64</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#define Mask Mask64</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define Atom Atom64</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#define VisualID VisualID64</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#define Time Time64</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span><span class="keyword">typedef</span> XID Window64;
+<a name="l00060"></a>00060 <span class="keyword">typedef</span> XID Drawable64;
+<a name="l00061"></a>00061 <span class="keyword">typedef</span> XID Font64;
+<a name="l00062"></a>00062 <span class="keyword">typedef</span> XID Pixmap64;
+<a name="l00063"></a>00063 <span class="keyword">typedef</span> XID Cursor64;
+<a name="l00064"></a>00064 <span class="keyword">typedef</span> XID Colormap64;
+<a name="l00065"></a>00065 <span class="keyword">typedef</span> XID GContext64;
+<a name="l00066"></a>00066 <span class="keyword">typedef</span> XID KeySym64;
+<a name="l00067"></a>00067 <span class="preprocessor">#define Window Window64</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span><span class="preprocessor">#define Drawable Drawable64</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#define Font Font64</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#define Pixmap Pixmap64</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span><span class="preprocessor">#define Cursor Cursor64</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#define Colormap Colormap64</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#define GContext GContext64</span>
+<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="preprocessor">#define KeySym KeySym64</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a>00077 <span class="preprocessor">#include &lt;X11/Xlib.h&gt;</span>
+<a name="l00078"></a>00078 <span class="preprocessor">#include &lt;X11/Xlibint.h&gt;</span> <span class="comment">/* For _XExtension */</span>
+<a name="l00079"></a>00079 <span class="preprocessor">#include &lt;X11/X.h&gt;</span> <span class="comment">/* from glxserver.h */</span>
+<a name="l00080"></a>00080 <span class="preprocessor">#include &lt;X11/Xmd.h&gt;</span> <span class="comment">/* from glxserver.h */</span>
+<a name="l00081"></a>00081 <span class="preprocessor">#include &lt;X11/Xproto.h&gt;</span>
+<a name="l00082"></a>00082 <span class="preprocessor">#include &lt;X11/Xutil.h&gt;</span>
+<a name="l00083"></a>00083 <span class="preprocessor">#include &lt;X11/Xatom.h&gt;</span>
+<a name="l00084"></a>00084 <span class="preprocessor">#include &lt;X11/cursorfont.h&gt;</span>
+<a name="l00085"></a>00085 <span class="preprocessor">#include &lt;X11/Xmu/SysUtil.h&gt;</span> <span class="comment">/* For XmuSnprintf */</span>
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 <span class="preprocessor">#include &lt;X11/extensions/shape.h&gt;</span>
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="preprocessor">#include &lt;X11/extensions/Xrender.h&gt;</span>
+<a name="l00090"></a>00090 <span class="preprocessor">#undef PictFormatType</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span>
+<a name="l00092"></a>00092 <span class="preprocessor">#include &lt;X11/extensions/XKB.h&gt;</span>
+<a name="l00093"></a>00093 <span class="preprocessor">#include &quot;xkbstr.h&quot;</span>
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <span class="preprocessor">#include &lt;X11/extensions/XI.h&gt;</span>
+<a name="l00096"></a>00096
+<a name="l00097"></a>00097 <span class="comment">/* Always include these, since we query them even if we don&#39;t export XINPUT. */</span>
+<a name="l00098"></a>00098 <span class="preprocessor">#include &lt;X11/extensions/XInput.h&gt;</span> <span class="comment">/* For XDevice */</span>
+<a name="l00099"></a>00099 <span class="preprocessor">#include &lt;X11/extensions/Xext.h&gt;</span>
+<a name="l00100"></a>00100
+<a name="l00101"></a>00101 <span class="preprocessor">#undef GC</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span>
+<a name="l00103"></a>00103 <span class="preprocessor">#ifdef DMX64</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span><span class="preprocessor">#define _XSERVER64</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span><span class="preprocessor">#undef XID</span>
+<a name="l00106"></a>00106 <span class="preprocessor"></span><span class="preprocessor">#undef Mask</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span><span class="preprocessor">#undef Atom</span>
+<a name="l00108"></a>00108 <span class="preprocessor"></span><span class="preprocessor">#undef VisualID</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span><span class="preprocessor">#undef Time</span>
+<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="preprocessor">#undef Window</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span><span class="preprocessor">#undef Drawable</span>
+<a name="l00112"></a>00112 <span class="preprocessor"></span><span class="preprocessor">#undef Font</span>
+<a name="l00113"></a>00113 <span class="preprocessor"></span><span class="preprocessor">#undef Pixmap</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span><span class="preprocessor">#undef Cursor</span>
+<a name="l00115"></a>00115 <span class="preprocessor"></span><span class="preprocessor">#undef Colormap</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span><span class="preprocessor">#undef GContext</span>
+<a name="l00117"></a>00117 <span class="preprocessor"></span><span class="preprocessor">#undef KeySym</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>
+<a name="l00120"></a>00120 <span class="comment">/* These are in exglobals.h, but that conflicts with xkbsrv.h */</span>
+<a name="l00121"></a>00121 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a>;
+<a name="l00122"></a>00122 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a>;
+<a name="l00123"></a>00123 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">DeviceValuator</a>;
+<a name="l00124"></a>00124 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">DeviceMotionNotify</a>;
+<a name="l00125"></a>00125 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">DeviceFocusIn</a>;
+<a name="l00126"></a>00126 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">DeviceFocusOut</a>;
+<a name="l00127"></a>00127 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">DeviceStateNotify</a>;
+<a name="l00128"></a>00128 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">DeviceMappingNotify</a>;
+<a name="l00129"></a>00129 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">ChangeDeviceNotify</a>;
+<a name="l00130"></a>00130
+<a name="l00131"></a>00131 <span class="comment">/* Some protocol gets included last, after undefines. */</span>
+<a name="l00132"></a>00132 <span class="preprocessor">#include &lt;X11/XKBlib.h&gt;</span>
+<a name="l00133"></a>00133 <span class="preprocessor">#include &lt;X11/extensions/XKBproto.h&gt;</span>
+<a name="l00134"></a>00134 <span class="preprocessor">#include &quot;xkbstr.h&quot;</span>
+<a name="l00135"></a>00135 <span class="preprocessor">#undef XPointer</span>
+<a name="l00136"></a>00136 <span class="preprocessor"></span><span class="preprocessor">#include &lt;X11/extensions/XIproto.h&gt;</span>
+<a name="l00137"></a>00137
+<a name="l00138"></a>00138 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxclient_8h.html">dmxclient.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcmap_8c.html b/hw/dmx/doc/html/dmxcmap_8c.html
new file mode 100644
index 0000000..b5929c4
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcmap_8c.html
@@ -0,0 +1,270 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcmap_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxcmap.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcmap_8h_source.html">dmxcmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxvisual_8h_source.html">dmxvisual.h</a>&quot;</code><br/>
+<code>#include &quot;micmap.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxAllocateColormapPrivates</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors</a> (ColormapPtr pColormap, int ndef, xColorItem *pdef)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8c.html#a5481a08a1030ecac42ff809a1c7d2139">dmxCreateDefColormap</a> (ScreenPtr pScreen)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Colormap support. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0ad36af95555b052bd64595a6b7d7af0"></a><!-- doxytag: member="dmxcmap.c::dmxAllocateColormapPrivates" ref="a0ad36af95555b052bd64595a6b7d7af0" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxAllocateColormapPrivates </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, and <a class="el" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">DMX_SET_COLORMAP_PRIV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6986e997430cf665904ad9149e39a50b"></a><!-- doxytag: member="dmxcmap.c::dmxBECreateColormap" ref="a6986e997430cf665904ad9149e39a50b" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBECreateColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pColormap</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, and <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a432d82d6335a8bc17292440baded360c"></a><!-- doxytag: member="dmxcmap.c::dmxBEFreeColormap" ref="a432d82d6335a8bc17292440baded360c" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pColormap</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, and <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a07f6c7d8523b669b5fa614cbe5c0e1ad"></a><!-- doxytag: member="dmxcmap.c::dmxCreateColormap" ref="a07f6c7d8523b669b5fa614cbe5c0e1ad" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create colormap on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxAllocateColormapPrivates()</a>, <a class="el" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5481a08a1030ecac42ff809a1c7d2139"></a><!-- doxytag: member="dmxcmap.c::dmxCreateDefColormap" ref="a5481a08a1030ecac42ff809a1c7d2139" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateDefColormap </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the DMX server's default colormap. </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab12dcafef41b3dc821dc1ecd220735c3"></a><!-- doxytag: member="dmxcmap.c::dmxDestroyColormap" ref="ab12dcafef41b3dc821dc1ecd220735c3" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy colormap on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">DMX_SET_COLORMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13a0bbf846ac7b3dcb41ae9bc4e64a3e"></a><!-- doxytag: member="dmxcmap.c::dmxInstallColormap" ref="a13a0bbf846ac7b3dcb41ae9bc4e64a3e" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInstallColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Install colormap on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a38bddf73cfed2aec203c62fc5be4ae97"></a><!-- doxytag: member="dmxcmap.c::dmxStoreColors" ref="a38bddf73cfed2aec203c62fc5be4ae97" args="(ColormapPtr pColormap, int ndef, xColorItem *pdef)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStoreColors </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ndef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xColorItem *&#160;</td>
+ <td class="paramname"><em>pdef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Store colors in <em>pColormap</em> on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcmap_8c.html">dmxcmap.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcmap_8h.html b/hw/dmx/doc/html/dmxcmap_8h.html
new file mode 100644
index 0000000..8bc2801
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcmap_8h.html
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcmap_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxcmap.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;colormapst.h&quot;</code><br/>
+</div>
+<p><a href="dmxcmap_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">DMX_SET_COLORMAP_PRIV</a>(_pCMap, _pCMapPriv)&#160;&#160;&#160;dixSetPrivate(&amp;(_pCMap)-&gt;devPrivates, dmxColormapPrivateKey, _pCMapPriv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>(_pCMap)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a9b220494b52f982d4dcfa437d34d628b">dmxColormapPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#aec71fbb492f3a3ce7e6b2b083a8b0978">dmxColormapPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors</a> (ColormapPtr pColormap, int ndef, xColorItem *pdef)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a5481a08a1030ecac42ff809a1c7d2139">dmxCreateDefColormap</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap</a> (ColormapPtr pColormap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap</a> (ColormapPtr pColormap)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Header file for colormap support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcmap_8c.html">dmxcmap.c</a>. </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aee4652aa0ac07182583f0cb18ed8557b"></a><!-- doxytag: member="dmxcmap.h::DMX_GET_COLORMAP_PRIV" ref="aee4652aa0ac07182583f0cb18ed8557b" args="(_pCMap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_COLORMAP_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pCMap</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">(<a class="code" href="dmxcmap_8h.html#aec71fbb492f3a3ce7e6b2b083a8b0978">dmxColormapPrivPtr</a>) \
+ dixLookupPrivate(&amp;(_pCMap)-&gt;devPrivates, <a class="code" href="dmx_8h.html#a47c216bb108efa441d7009a7da18d759">dmxColormapPrivateKey</a>)
+</pre></div><p>Get colormap private structure. </p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, and <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a713cec2a0442303cafdb59183a686d28"></a><!-- doxytag: member="dmxcmap.h::DMX_SET_COLORMAP_PRIV" ref="a713cec2a0442303cafdb59183a686d28" args="(_pCMap, _pCMapPriv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_SET_COLORMAP_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pCMap, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pCMapPriv&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dixSetPrivate(&amp;(_pCMap)-&gt;devPrivates, dmxColormapPrivateKey, _pCMapPriv)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set colormap private structure. </p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxAllocateColormapPrivates()</a>, and <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="aec71fbb492f3a3ce7e6b2b083a8b0978"></a><!-- doxytag: member="dmxcmap.h::dmxColormapPrivPtr" ref="aec71fbb492f3a3ce7e6b2b083a8b0978" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> * <a class="el" href="struct__dmxColormapPriv.html">dmxColormapPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9b220494b52f982d4dcfa437d34d628b"></a><!-- doxytag: member="dmxcmap.h::dmxColormapPrivRec" ref="a9b220494b52f982d4dcfa437d34d628b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> <a class="el" href="struct__dmxColormapPriv.html">dmxColormapPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Colormap private area. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6986e997430cf665904ad9149e39a50b"></a><!-- doxytag: member="dmxcmap.h::dmxBECreateColormap" ref="a6986e997430cf665904ad9149e39a50b" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBECreateColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pColormap</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, and <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a432d82d6335a8bc17292440baded360c"></a><!-- doxytag: member="dmxcmap.h::dmxBEFreeColormap" ref="a432d82d6335a8bc17292440baded360c" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pColormap</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, and <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a07f6c7d8523b669b5fa614cbe5c0e1ad"></a><!-- doxytag: member="dmxcmap.h::dmxCreateColormap" ref="a07f6c7d8523b669b5fa614cbe5c0e1ad" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create colormap on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxAllocateColormapPrivates()</a>, <a class="el" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5481a08a1030ecac42ff809a1c7d2139"></a><!-- doxytag: member="dmxcmap.h::dmxCreateDefColormap" ref="a5481a08a1030ecac42ff809a1c7d2139" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateDefColormap </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the DMX server's default colormap. </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab12dcafef41b3dc821dc1ecd220735c3"></a><!-- doxytag: member="dmxcmap.h::dmxDestroyColormap" ref="ab12dcafef41b3dc821dc1ecd220735c3" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy colormap on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">DMX_SET_COLORMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13a0bbf846ac7b3dcb41ae9bc4e64a3e"></a><!-- doxytag: member="dmxcmap.h::dmxInstallColormap" ref="a13a0bbf846ac7b3dcb41ae9bc4e64a3e" args="(ColormapPtr pColormap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInstallColormap </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Install colormap on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a38bddf73cfed2aec203c62fc5be4ae97"></a><!-- doxytag: member="dmxcmap.h::dmxStoreColors" ref="a38bddf73cfed2aec203c62fc5be4ae97" args="(ColormapPtr pColormap, int ndef, xColorItem *pdef)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStoreColors </td>
+ <td>(</td>
+ <td class="paramtype">ColormapPtr&#160;</td>
+ <td class="paramname"><em>pColormap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ndef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xColorItem *&#160;</td>
+ <td class="paramname"><em>pdef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Store colors in <em>pColormap</em> on back-end server associated with <em>pColormap's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcmap_8h.html">dmxcmap.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcmap_8h_source.html b/hw/dmx/doc/html/dmxcmap_8h_source.html
new file mode 100644
index 0000000..0018d51
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcmap_8h_source.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcmap_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxcmap.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxcmap_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXCMAP_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXCMAP_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;colormapst.h&quot;</span>
+<a name="l00041"></a>00041
+<a name="l00043"></a><a class="code" href="struct__dmxColormapPriv.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> {
+<a name="l00044"></a><a class="code" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">00044</a> Colormap <a class="code" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">cmap</a>;
+<a name="l00045"></a>00045 } <a class="code" href="dmxcmap_8h.html#a9b220494b52f982d4dcfa437d34d628b">dmxColormapPrivRec</a>, *<a class="code" href="dmxcmap_8h.html#aec71fbb492f3a3ce7e6b2b083a8b0978">dmxColormapPrivPtr</a>;
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap</a>(ColormapPtr pColormap);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap</a>(ColormapPtr pColormap);
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap</a>(ColormapPtr pColormap);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors</a>(ColormapPtr pColormap, <span class="keywordtype">int</span> ndef, xColorItem *pdef);
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a5481a08a1030ecac42ff809a1c7d2139">dmxCreateDefColormap</a>(ScreenPtr pScreen);
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap</a>(ColormapPtr pColormap);
+<a name="l00056"></a>00056 <span class="keyword">extern</span> Bool <a class="code" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap</a>(ColormapPtr pColormap);
+<a name="l00057"></a>00057
+<a name="l00059"></a><a class="code" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">00059</a> <span class="preprocessor">#define DMX_SET_COLORMAP_PRIV(_pCMap, _pCMapPriv) \</span>
+<a name="l00060"></a>00060 <span class="preprocessor"> dixSetPrivate(&amp;(_pCMap)-&gt;devPrivates, dmxColormapPrivateKey, _pCMapPriv)</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span>
+<a name="l00063"></a><a class="code" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">00063</a> <span class="preprocessor">#define DMX_GET_COLORMAP_PRIV(_pCMap) (dmxColormapPrivPtr) \</span>
+<a name="l00064"></a>00064 <span class="preprocessor"> dixLookupPrivate(&amp;(_pCMap)-&gt;devPrivates, dmxColormapPrivateKey)</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="preprocessor">#endif </span><span class="comment">/* DMXCMAP_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcmap_8h.html">dmxcmap.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcommon_8c.html b/hw/dmx/doc/html/dmxcommon_8c.html
new file mode 100644
index 0000000..90d551f
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcommon_8c.html
@@ -0,0 +1,908 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcommon_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxcommon.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcommon_8h_source.html">dmxcommon.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxconsole_8h_source.html">dmxconsole.h</a>&quot;</code><br/>
+<code>#include &quot;dmxprop.h&quot;</code><br/>
+<code>#include &quot;dmxsync.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxmap_8h_source.html">dmxmap.h</a>&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;input.h&quot;</code><br/>
+<code>#include &lt;X11/keysym.h&gt;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;scrnintstr.h&quot;</code><br/>
+<code>#include &lt;unistd.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#ac478cb19dda771f00d3b753001a51e09">DMX_STATE_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>(f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a14111ac8f43949172b152e50dc720aba">NAME</a>(x)&#160;&#160;&#160;priv-&gt;xkb-&gt;names-&gt;x ? XGetAtomName(priv-&gt;<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>,priv-&gt;xkb-&gt;names-&gt;x) : NULL</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#ad9bd99dabcb14e9efe85df040d63c4b3">ADD</a>(type)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a5fe4b4fef83f0ca1aba8cabf76ebccf2">dmxCommonKbdSetAR</a> (Display *<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, unsigned char *old, unsigned char *new)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a77cfda7cbd3e83a0869b26b782d2b6d4">dmxCommonKbdSetLeds</a> (Display *<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, unsigned long new)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl</a> (Display *<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, KeybdCtrl *old, KeybdCtrl *new)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a71374978838ea5232f72055f152a894e">dmxCommonMouSetCtrl</a> (Display *<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, PtrCtrl *old, PtrCtrl *new)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#aa069076ebf89f8b89668cffafb731cfe">dmxCommonKbdBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxCommonOthOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap</a> (DevicePtr pDev, unsigned char *<a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, int *nButtons)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a82d9ce21ede8d533adde28ce8dbabdf7">dmxCommonAddEnabledDevice</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#adb5e0faaefc43851e4ebcd01bd9c10ec">dmxCommonRemoveEnabledDevice</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a907580b7be71d9be0b771d32210f3cad">dmxFindPointerScreen</a> (int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState</a> (pointer private)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file implements common routines used by the backend and console input devices. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ad9bd99dabcb14e9efe85df040d63c4b3"></a><!-- doxytag: member="dmxcommon.c::ADD" ref="ad9bd99dabcb14e9efe85df040d63c4b3" args="(type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ADD</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">type</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">if</span> (count &lt; <a class="code" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">DMX_MAX_XINPUT_EVENT_TYPES</a>) { \
+ type(priv-&gt;xi, event_type[count], event_list[count]); \
+ <span class="keywordflow">if</span> (event_type[count]) { \
+ <a class="code" href="dmxmap_8c.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a>(dmxLocal, event_type[count], XI_##type); \
+ ++count; \
+ } \
+ } <span class="keywordflow">else</span> { \
+ <a class="code" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog</a>(<a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <span class="stringliteral">&quot;More than %d event types for %s\n&quot;</span>, \
+ <a class="code" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">DMX_MAX_XINPUT_EVENT_TYPES</a>, dmxInput-&gt;name); \
+ }
+</pre></div>
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac478cb19dda771f00d3b753001a51e09"></a><!-- doxytag: member="dmxcommon.c::DMX_STATE_DEBUG" ref="ac478cb19dda771f00d3b753001a51e09" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_STATE_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adf6865b0bc7ad370c94e3b8682262c13"></a><!-- doxytag: member="dmxcommon.c::DMXDBG0" ref="adf6865b0bc7ad370c94e3b8682262c13" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, and <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a14111ac8f43949172b152e50dc720aba"></a><!-- doxytag: member="dmxcommon.c::NAME" ref="a14111ac8f43949172b152e50dc720aba" args="(x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NAME</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">x</td><td>)</td>
+ <td>&#160;&#160;&#160;priv-&gt;xkb-&gt;names-&gt;x ? XGetAtomName(priv-&gt;<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>,priv-&gt;xkb-&gt;names-&gt;x) : NULL</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="dmxcommon.c::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Each device has a private area that is visible only from inside the driver code. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a82d9ce21ede8d533adde28ce8dbabdf7"></a><!-- doxytag: member="dmxcommon.c::dmxCommonAddEnabledDevice" ref="a82d9ce21ede8d533adde28ce8dbabdf7" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxCommonAddEnabledDevice </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0e7301a2783357ff391172acab00d48a"></a><!-- doxytag: member="dmxcommon.c::dmxCommonCopyPrivate" ref="a0e7301a2783357ff391172acab00d48a" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer dmxCommonCopyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns a pointer to the private area for the device that comes just prior to <em>pDevice</em> in the current <em>dmxInput</em> device list. This is used as the private area for the current device in some situations (e.g., when a keyboard and mouse form a pair that should share the same private area). If the requested private area cannot be located, then NULL is returned. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa069076ebf89f8b89668cffafb731cfe"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdBell" ref="aa069076ebf89f8b89668cffafb731cfe" args="(DevicePtr pDev, int percent, int volume, int pitch, int duration)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdBell </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>volume</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>duration</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sound they keyboard bell. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a399f0ec4a6e5d0bcd3d07f24b2a6ac9e"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdCtrl" ref="a399f0ec4a6e5d0bcd3d07f24b2a6ac9e" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update the keyboard control. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86b1c983a556770efdd1a19e8be44534"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdGetInfo" ref="a86b1c983a556770efdd1a19e8be44534" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill in the XKEYBOARD parts of the <em>info</em> structure for the specified <em>pDev</em>. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">_DMXLocalInitInfo::freenames</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="dmxcommon_8c.html#a14111ac8f43949172b152e50dc720aba">NAME</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a83410e3987567bd35fd146b193a21ed9"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdGetMap" ref="a83410e3987567bd35fd146b193a21ed9" args="(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySymsPtr&#160;</td>
+ <td class="paramname"><em>pKeySyms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD8 *&#160;</td>
+ <td class="paramname"><em>pModMap</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the keyboard mapping. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ddcdd8a91205b9b0e23022f246190a0"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdOff" ref="a9ddcdd8a91205b9b0e23022f246190a0" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">DMX_KEYBOARD_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a60cd36c3430ead2858986fe5f93165c1"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdOn" ref="a60cd36c3430ead2858986fe5f93165c1" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCommonKbdOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">DMX_KEYBOARD_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5fe4b4fef83f0ca1aba8cabf76ebccf2"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdSetAR" ref="a5fe4b4fef83f0ca1aba8cabf76ebccf2" args="(Display *display, unsigned char *old, unsigned char *new)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCommonKbdSetAR </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>display</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>old</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>new</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a029097ed04b236c945e3715910250680"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdSetCtrl" ref="a029097ed04b236c945e3715910250680" args="(Display *display, KeybdCtrl *old, KeybdCtrl *new)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCommonKbdSetCtrl </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>display</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>old</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>new</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcommon_8c.html#a5fe4b4fef83f0ca1aba8cabf76ebccf2">dmxCommonKbdSetAR()</a>, and <a class="el" href="dmxcommon_8c.html#a77cfda7cbd3e83a0869b26b782d2b6d4">dmxCommonKbdSetLeds()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl()</a>, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, and <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a77cfda7cbd3e83a0869b26b782d2b6d4"></a><!-- doxytag: member="dmxcommon.c::dmxCommonKbdSetLeds" ref="a77cfda7cbd3e83a0869b26b782d2b6d4" args="(Display *display, unsigned long new)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCommonKbdSetLeds </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>display</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>new</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11aa027975061ee6f3e684ee66f0f18c"></a><!-- doxytag: member="dmxcommon.c::dmxCommonMouCtrl" ref="a11aa027975061ee6f3e684ee66f0f18c" args="(DevicePtr pDev, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonMouCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update the mouse control. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a71374978838ea5232f72055f152a894e">dmxCommonMouSetCtrl()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ce209ad340f84644115a165eadfa540"></a><!-- doxytag: member="dmxcommon.c::dmxCommonMouGetMap" ref="a9ce209ad340f84644115a165eadfa540" args="(DevicePtr pDev, unsigned char *map, int *nButtons)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonMouGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>map</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nButtons</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Obtain the mouse button mapping. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">DMX_MAX_BUTTONS</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acfeaccbc1f2f5be028b3ee8c0f31da89"></a><!-- doxytag: member="dmxcommon.c::dmxCommonMouOff" ref="acfeaccbc1f2f5be028b3ee8c0f31da89" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonMouOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">DMX_POINTER_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#adb5e0faaefc43851e4ebcd01bd9c10ec">dmxCommonRemoveEnabledDevice()</a>, <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ba0ee4f9f09bc9089d480d1f5467cd8"></a><!-- doxytag: member="dmxcommon.c::dmxCommonMouOn" ref="a8ba0ee4f9f09bc9089d480d1f5467cd8" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCommonMouOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">DMX_POINTER_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#a82d9ce21ede8d533adde28ce8dbabdf7">dmxCommonAddEnabledDevice()</a>, <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71374978838ea5232f72055f152a894e"></a><!-- doxytag: member="dmxcommon.c::dmxCommonMouSetCtrl" ref="a71374978838ea5232f72055f152a894e" args="(Display *display, PtrCtrl *old, PtrCtrl *new)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCommonMouSetCtrl </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>display</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>old</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>new</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a67f944a345e0ba88ac996056914d191c"></a><!-- doxytag: member="dmxcommon.c::dmxCommonOthGetInfo" ref="a67f944a345e0ba88ac996056914d191c" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonOthGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxInputExtensionErrorHandler()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo::numAbsAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">_DMXLocalInitInfo::proximityClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a45f87ba7a0b02587dd2d1b4cdd3480c6"></a><!-- doxytag: member="dmxcommon.c::dmxCommonOthOff" ref="a45f87ba7a0b02587dd2d1b4cdd3480c6" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonOthOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4b8e72433e206d48e6fb471e933800ad"></a><!-- doxytag: member="dmxcommon.c::dmxCommonOthOn" ref="a4b8e72433e206d48e6fb471e933800ad" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCommonOthOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#ad9bd99dabcb14e9efe85df040d63c4b3">ADD</a>, <a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">ChangeDeviceNotify</a>, <a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">DeviceFocusIn</a>, <a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">DeviceFocusOut</a>, <a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">DeviceMappingNotify</a>, <a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">DeviceMotionNotify</a>, <a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">DeviceStateNotify</a>, <a class="el" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">DMX_MAX_XINPUT_EVENT_TYPES</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a>, and <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adb5e0faaefc43851e4ebcd01bd9c10ec"></a><!-- doxytag: member="dmxcommon.c::dmxCommonRemoveEnabledDevice" ref="adb5e0faaefc43851e4ebcd01bd9c10ec" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxCommonRemoveEnabledDevice </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aca953b7500d93577441828156674c64e"></a><!-- doxytag: member="dmxcommon.c::dmxCommonRestoreState" ref="aca953b7500d93577441828156674c64e" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonRestoreState </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine restores all the information saved by <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState</a>. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>, <a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff()</a>, and <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a14295660e17d34955693cef6654d7bb6"></a><!-- doxytag: member="dmxcommon.c::dmxCommonSaveState" ref="a14295660e17d34955693cef6654d7bb6" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonSaveState </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine saves and resets some important state for the backend and console device drivers:</p>
+<ul>
+<li>the modifier map is saved and set to 0 (so DMX controls the LEDs)</li>
+<li>the key click, bell, led, and repeat masks are saved and set to the values that DMX claims to be using</li>
+</ul>
+<p>This routine and <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState</a> are used when the pointer enters and leaves the console window, or when the backend window is active or not active (for a full-screen window, this only happens at server startup and server shutdown). </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>, <a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn()</a>, and <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6e3adb2e48d7cc7a098c542c693d66d0"></a><!-- doxytag: member="dmxcommon.c::dmxCommonXSelect" ref="a6e3adb2e48d7cc7a098c542c693d66d0" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxCommonXSelect </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff()</a>, and <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a907580b7be71d9be0b771d32210f3cad"></a><!-- doxytag: member="dmxcommon.c::dmxFindPointerScreen" ref="a907580b7be71d9be0b771d32210f3cad" args="(int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxFindPointerScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Given the global coordinates <em>x</em> and <em>y</em>, determine the screen with the lowest number on which those coordinates lie. If they are not on any screen, return -1. The number returned is an index into <em>dmxScreenInfo</em> and is between -1 and <em>dmxNumScreens</em> - 1, inclusive. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcommon_8h.html b/hw/dmx/doc/html/dmxcommon_8h.html
new file mode 100644
index 0000000..1a1b223
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcommon_8h.html
@@ -0,0 +1,791 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcommon_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxcommon.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxcommon_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#ac501f773a244037a88da37c0dc48ac66">DMX_COMMON_OTHER</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#ac4c9fac008144d96c6bd6313b5e158d2">DMX_COMMON_XKB</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a6f802c6dc60aba1cbf8c1246cb5a4be4">DMX_COMMON_PRIVATE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>&#160;&#160;&#160;<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv = private</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>&#160;&#160;&#160;<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput = &amp;<a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>[priv-&gt;dmxLocal-&gt;inputIdx]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a7067dd8545db11300dc1ee7f461b346d">GETDMXINPUTFROMPDEVICE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>&#160;&#160;&#160;<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal = pDev-&gt;devicePrivate</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">GETDMXINPUTFROMPDEV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">DMX_KEYBOARD_EVENT_MASK</a>&#160;&#160;&#160;(KeyPressMask | KeyReleaseMask | KeymapStateMask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">DMX_POINTER_EVENT_MASK</a>&#160;&#160;&#160;(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#aa069076ebf89f8b89668cffafb731cfe">dmxCommonKbdBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap</a> (DevicePtr pDev, unsigned char *<a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, int *nButtons)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a907580b7be71d9be0b771d32210f3cad">dmxFindPointerScreen</a> (int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxCommonOthOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState</a> (pointer private)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to functions used by backend and console input devices. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a> </dd>
+<dd>
+<a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </dd>
+<dd>
+<a class="el" href="dmxconsole_8c.html">dmxconsole.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ac501f773a244037a88da37c0dc48ac66"></a><!-- doxytag: member="dmxcommon.h::DMX_COMMON_OTHER" ref="ac501f773a244037a88da37c0dc48ac66" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_COMMON_OTHER</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">Display *<a class="code" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>; \
+ Window window; \
+ <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *be; \
+ <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal; \
+ <span class="keywordtype">int</span> initPointerX; \
+ <span class="keywordtype">int</span> initPointerY; \
+ <span class="keywordtype">long</span> eventMask; \
+ KeybdCtrl kctrl; \
+ PtrCtrl mctrl; \
+ <span class="keywordtype">int</span> kctrlset; \
+ <span class="keywordtype">int</span> mctrlset; \
+ KeybdCtrl savedKctrl; \
+ XModifierKeymap *savedModMap; \
+ <span class="keywordtype">int</span> stateSaved
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a6f802c6dc60aba1cbf8c1246cb5a4be4"></a><!-- doxytag: member="dmxcommon.h::DMX_COMMON_PRIVATE" ref="a6f802c6dc60aba1cbf8c1246cb5a4be4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_COMMON_PRIVATE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="dmxcommon_8h.html#ac4c9fac008144d96c6bd6313b5e158d2">DMX_COMMON_XKB</a>; \
+ XDevice *xi
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="ac4c9fac008144d96c6bd6313b5e158d2"></a><!-- doxytag: member="dmxcommon.h::DMX_COMMON_XKB" ref="ac4c9fac008144d96c6bd6313b5e158d2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_COMMON_XKB</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="dmxcommon_8h.html#ac501f773a244037a88da37c0dc48ac66">DMX_COMMON_OTHER</a>; \
+ XkbDescPtr xkb; \
+ XkbIndicatorRec savedIndicators
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a8ed45b47d9c28c37195b3d10df2319a1"></a><!-- doxytag: member="dmxcommon.h::DMX_KEYBOARD_EVENT_MASK" ref="a8ed45b47d9c28c37195b3d10df2319a1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_KEYBOARD_EVENT_MASK&#160;&#160;&#160;(KeyPressMask | KeyReleaseMask | KeymapStateMask)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff()</a>, and <a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab5b14e925716fa97237594ee0b07d01"></a><!-- doxytag: member="dmxcommon.h::DMX_POINTER_EVENT_MASK" ref="aab5b14e925716fa97237594ee0b07d01" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_POINTER_EVENT_MASK&#160;&#160;&#160;(ButtonPressMask | ButtonReleaseMask | PointerMotionMask)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff()</a>, and <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad100a619cb405b9f315abf1019622dd7"></a><!-- doxytag: member="dmxcommon.h::GETDMXINPUTFROMPDEV" ref="ad100a619cb405b9f315abf1019622dd7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETDMXINPUTFROMPDEV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>; \
+ <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput = &amp;<a class="code" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>[dmxLocal-&gt;inputIdx]
+</pre></div>
+<p>Referenced by <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, and <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7067dd8545db11300dc1ee7f461b346d"></a><!-- doxytag: member="dmxcommon.h::GETDMXINPUTFROMPDEVICE" ref="a7067dd8545db11300dc1ee7f461b346d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETDMXINPUTFROMPDEVICE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>; \
+ <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput = &amp;<a class="code" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>[dmxLocal-&gt;inputIdx]
+</pre></div>
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2f522c463d79a458d27ac9e1f6b2e30f"></a><!-- doxytag: member="dmxcommon.h::GETDMXINPUTFROMPRIV" ref="a2f522c463d79a458d27ac9e1f6b2e30f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETDMXINPUTFROMPRIV&#160;&#160;&#160;<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput = &amp;<a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>[priv-&gt;dmxLocal-&gt;inputIdx]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, and <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a22db91e32f104411c68049e16a93067b"></a><!-- doxytag: member="dmxcommon.h::GETDMXLOCALFROMPDEV" ref="a22db91e32f104411c68049e16a93067b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETDMXLOCALFROMPDEV&#160;&#160;&#160;<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal = pDev-&gt;devicePrivate</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion()</a>, and <a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">enqueueMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae60813d58a79b6dae5b98321fd7e1866"></a><!-- doxytag: member="dmxcommon.h::GETDMXLOCALFROMPDEVICE" ref="ae60813d58a79b6dae5b98321fd7e1866" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETDMXLOCALFROMPDEVICE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">DevicePtr pDev = &amp;pDevice-&gt;public; \
+ <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal = pDev-&gt;devicePrivate
+</pre></div>
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate()</a>, <a class="el" href="dmxconsole_8h.html#a44f5875f978cc85c2190eacef51debac">dmxConsoleCreatePrivate()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxmotion_8h.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxPointerGetMotionEvents()</a>, and <a class="el" href="dmxmotion_8h.html#abe71ba14a07f4077ca2658f81426f4c6">dmxPointerPutMotionEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a215427f6c6c570d64e1039239484563f"></a><!-- doxytag: member="dmxcommon.h::GETONLYPRIVFROMPRIVATE" ref="a215427f6c6c570d64e1039239484563f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETONLYPRIVFROMPRIVATE&#160;&#160;&#160;<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv = private</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, <a class="el" href="dmxconsole_8h.html#ac5fba2223efdab61863b6458a90c189a">dmxConsoleUpdateInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a162b4980b050465ca21228eb41f207a2"></a><!-- doxytag: member="dmxcommon.h::GETPRIVFROMPDEV" ref="a162b4980b050465ca21228eb41f207a2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIVFROMPDEV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>; \
+ <a class="code" href="struct__myPrivate.html">myPrivate</a> *priv = dmxLocal-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>, <a class="el" href="dmxcommon_8h.html#aa069076ebf89f8b89668cffafb731cfe">dmxCommonKbdBell()</a>, <a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap()</a>, <a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff()</a>, <a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn()</a>, <a class="el" href="dmxcommon_8h.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl()</a>, <a class="el" href="dmxcommon_8h.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap()</a>, <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxCommonOthOff()</a>, <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae04675e973690cab79ef643f298cb375"></a><!-- doxytag: member="dmxcommon.h::GETPRIVFROMPRIVATE" ref="ae04675e973690cab79ef643f298cb375" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIVFROMPRIVATE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>; \
+ <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput = &amp;<a class="code" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>[priv-&gt;dmxLocal-&gt;inputIdx]
+</pre></div>
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, and <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0e7301a2783357ff391172acab00d48a"></a><!-- doxytag: member="dmxcommon.h::dmxCommonCopyPrivate" ref="a0e7301a2783357ff391172acab00d48a" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer dmxCommonCopyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns a pointer to the private area for the device that comes just prior to <em>pDevice</em> in the current <em>dmxInput</em> device list. This is used as the private area for the current device in some situations (e.g., when a keyboard and mouse form a pair that should share the same private area). If the requested private area cannot be located, then NULL is returned. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa069076ebf89f8b89668cffafb731cfe"></a><!-- doxytag: member="dmxcommon.h::dmxCommonKbdBell" ref="aa069076ebf89f8b89668cffafb731cfe" args="(DevicePtr pDev, int percent, int volume, int pitch, int duration)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdBell </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>volume</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>duration</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sound they keyboard bell. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a399f0ec4a6e5d0bcd3d07f24b2a6ac9e"></a><!-- doxytag: member="dmxcommon.h::dmxCommonKbdCtrl" ref="a399f0ec4a6e5d0bcd3d07f24b2a6ac9e" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update the keyboard control. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86b1c983a556770efdd1a19e8be44534"></a><!-- doxytag: member="dmxcommon.h::dmxCommonKbdGetInfo" ref="a86b1c983a556770efdd1a19e8be44534" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill in the XKEYBOARD parts of the <em>info</em> structure for the specified <em>pDev</em>. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">_DMXLocalInitInfo::freenames</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="dmxcommon_8c.html#a14111ac8f43949172b152e50dc720aba">NAME</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a83410e3987567bd35fd146b193a21ed9"></a><!-- doxytag: member="dmxcommon.h::dmxCommonKbdGetMap" ref="a83410e3987567bd35fd146b193a21ed9" args="(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySymsPtr&#160;</td>
+ <td class="paramname"><em>pKeySyms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD8 *&#160;</td>
+ <td class="paramname"><em>pModMap</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the keyboard mapping. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ddcdd8a91205b9b0e23022f246190a0"></a><!-- doxytag: member="dmxcommon.h::dmxCommonKbdOff" ref="a9ddcdd8a91205b9b0e23022f246190a0" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonKbdOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">DMX_KEYBOARD_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a60cd36c3430ead2858986fe5f93165c1"></a><!-- doxytag: member="dmxcommon.h::dmxCommonKbdOn" ref="a60cd36c3430ead2858986fe5f93165c1" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCommonKbdOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">DMX_KEYBOARD_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11aa027975061ee6f3e684ee66f0f18c"></a><!-- doxytag: member="dmxcommon.h::dmxCommonMouCtrl" ref="a11aa027975061ee6f3e684ee66f0f18c" args="(DevicePtr pDev, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonMouCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update the mouse control. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a71374978838ea5232f72055f152a894e">dmxCommonMouSetCtrl()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ce209ad340f84644115a165eadfa540"></a><!-- doxytag: member="dmxcommon.h::dmxCommonMouGetMap" ref="a9ce209ad340f84644115a165eadfa540" args="(DevicePtr pDev, unsigned char *map, int *nButtons)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonMouGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>map</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nButtons</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Obtain the mouse button mapping. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">DMX_MAX_BUTTONS</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acfeaccbc1f2f5be028b3ee8c0f31da89"></a><!-- doxytag: member="dmxcommon.h::dmxCommonMouOff" ref="acfeaccbc1f2f5be028b3ee8c0f31da89" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonMouOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">DMX_POINTER_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#adb5e0faaefc43851e4ebcd01bd9c10ec">dmxCommonRemoveEnabledDevice()</a>, <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ba0ee4f9f09bc9089d480d1f5467cd8"></a><!-- doxytag: member="dmxcommon.h::dmxCommonMouOn" ref="a8ba0ee4f9f09bc9089d480d1f5467cd8" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCommonMouOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">DMX_POINTER_EVENT_MASK</a>, <a class="el" href="dmxcommon_8c.html#a82d9ce21ede8d533adde28ce8dbabdf7">dmxCommonAddEnabledDevice()</a>, <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a67f944a345e0ba88ac996056914d191c"></a><!-- doxytag: member="dmxcommon.h::dmxCommonOthGetInfo" ref="a67f944a345e0ba88ac996056914d191c" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonOthGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxInputExtensionErrorHandler()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo::numAbsAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">_DMXLocalInitInfo::proximityClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a45f87ba7a0b02587dd2d1b4cdd3480c6"></a><!-- doxytag: member="dmxcommon.h::dmxCommonOthOff" ref="a45f87ba7a0b02587dd2d1b4cdd3480c6" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonOthOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4b8e72433e206d48e6fb471e933800ad"></a><!-- doxytag: member="dmxcommon.h::dmxCommonOthOn" ref="a4b8e72433e206d48e6fb471e933800ad" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCommonOthOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#ad9bd99dabcb14e9efe85df040d63c4b3">ADD</a>, <a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">ChangeDeviceNotify</a>, <a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">DeviceFocusIn</a>, <a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">DeviceFocusOut</a>, <a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">DeviceMappingNotify</a>, <a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">DeviceMotionNotify</a>, <a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">DeviceStateNotify</a>, <a class="el" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">DMX_MAX_XINPUT_EVENT_TYPES</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a>, and <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aca953b7500d93577441828156674c64e"></a><!-- doxytag: member="dmxcommon.h::dmxCommonRestoreState" ref="aca953b7500d93577441828156674c64e" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonRestoreState </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine restores all the information saved by <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState</a>. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>, <a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff()</a>, and <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a14295660e17d34955693cef6654d7bb6"></a><!-- doxytag: member="dmxcommon.h::dmxCommonSaveState" ref="a14295660e17d34955693cef6654d7bb6" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCommonSaveState </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine saves and resets some important state for the backend and console device drivers:</p>
+<ul>
+<li>the modifier map is saved and set to 0 (so DMX controls the LEDs)</li>
+<li>the key click, bell, led, and repeat masks are saved and set to the values that DMX claims to be using</li>
+</ul>
+<p>This routine and <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState</a> are used when the pointer enters and leaves the console window, or when the backend window is active or not active (for a full-screen window, this only happens at server startup and server shutdown). </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxCommonKbdSetCtrl()</a>, <a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a>, and <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">GETPRIVFROMPRIVATE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn()</a>, and <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a907580b7be71d9be0b771d32210f3cad"></a><!-- doxytag: member="dmxcommon.h::dmxFindPointerScreen" ref="a907580b7be71d9be0b771d32210f3cad" args="(int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxFindPointerScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Given the global coordinates <em>x</em> and <em>y</em>, determine the screen with the lowest number on which those coordinates lie. If they are not on any screen, return -1. The number returned is an index into <em>dmxScreenInfo</em> and is between -1 and <em>dmxNumScreens</em> - 1, inclusive. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcommon_8h.html">dmxcommon.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcommon_8h_source.html b/hw/dmx/doc/html/dmxcommon_8h_source.html
new file mode 100644
index 0000000..1251a3c
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcommon_8h_source.html
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcommon_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxcommon.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxcommon_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002,2003 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _DMXCOMMON_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCOMMON_H_</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a><a class="code" href="dmxcommon_8h.html#ac501f773a244037a88da37c0dc48ac66">00041</a> <span class="preprocessor">#define DMX_COMMON_OTHER \</span>
+<a name="l00042"></a>00042 <span class="preprocessor"> Display *display; \</span>
+<a name="l00043"></a>00043 <span class="preprocessor"> Window window; \</span>
+<a name="l00044"></a>00044 <span class="preprocessor"> DMXScreenInfo *be; \</span>
+<a name="l00045"></a>00045 <span class="preprocessor"> DMXLocalInputInfoPtr dmxLocal; \</span>
+<a name="l00046"></a>00046 <span class="preprocessor"> int initPointerX; \</span>
+<a name="l00047"></a>00047 <span class="preprocessor"> int initPointerY; \</span>
+<a name="l00048"></a>00048 <span class="preprocessor"> long eventMask; \</span>
+<a name="l00049"></a>00049 <span class="preprocessor"> KeybdCtrl kctrl; \</span>
+<a name="l00050"></a>00050 <span class="preprocessor"> PtrCtrl mctrl; \</span>
+<a name="l00051"></a>00051 <span class="preprocessor"> int kctrlset; \</span>
+<a name="l00052"></a>00052 <span class="preprocessor"> int mctrlset; \</span>
+<a name="l00053"></a>00053 <span class="preprocessor"> KeybdCtrl savedKctrl; \</span>
+<a name="l00054"></a>00054 <span class="preprocessor"> XModifierKeymap *savedModMap; \</span>
+<a name="l00055"></a>00055 <span class="preprocessor"> int stateSaved</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>
+<a name="l00057"></a><a class="code" href="dmxcommon_8h.html#ac4c9fac008144d96c6bd6313b5e158d2">00057</a> <span class="preprocessor">#define DMX_COMMON_XKB \</span>
+<a name="l00058"></a>00058 <span class="preprocessor"> DMX_COMMON_OTHER; \</span>
+<a name="l00059"></a>00059 <span class="preprocessor"> XkbDescPtr xkb; \</span>
+<a name="l00060"></a>00060 <span class="preprocessor"> XkbIndicatorRec savedIndicators</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span>
+<a name="l00062"></a><a class="code" href="dmxcommon_8h.html#a6f802c6dc60aba1cbf8c1246cb5a4be4">00062</a> <span class="preprocessor">#define DMX_COMMON_PRIVATE \</span>
+<a name="l00063"></a>00063 <span class="preprocessor"> DMX_COMMON_XKB; \</span>
+<a name="l00064"></a>00064 <span class="preprocessor"> XDevice *xi</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a><a class="code" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">00066</a> <span class="preprocessor">#define GETONLYPRIVFROMPRIVATE \</span>
+<a name="l00067"></a>00067 <span class="preprocessor"> myPrivate *priv = private</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00069"></a><a class="code" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">00069</a> <span class="preprocessor">#define GETPRIVFROMPRIVATE \</span>
+<a name="l00070"></a>00070 <span class="preprocessor"> GETONLYPRIVFROMPRIVATE; \</span>
+<a name="l00071"></a>00071 <span class="preprocessor"> DMXInputInfo *dmxInput = &amp;dmxInputs[priv-&gt;dmxLocal-&gt;inputIdx]</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span>
+<a name="l00073"></a><a class="code" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">00073</a> <span class="preprocessor">#define GETDMXLOCALFROMPDEVICE \</span>
+<a name="l00074"></a>00074 <span class="preprocessor"> DevicePtr pDev = &amp;pDevice-&gt;public; \</span>
+<a name="l00075"></a>00075 <span class="preprocessor"> DMXLocalInputInfoPtr dmxLocal = pDev-&gt;devicePrivate</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span>
+<a name="l00077"></a><a class="code" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">00077</a> <span class="preprocessor">#define GETDMXINPUTFROMPRIV \</span>
+<a name="l00078"></a>00078 <span class="preprocessor"> DMXInputInfo *dmxInput = &amp;dmxInputs[priv-&gt;dmxLocal-&gt;inputIdx]</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span>
+<a name="l00080"></a><a class="code" href="dmxcommon_8h.html#a7067dd8545db11300dc1ee7f461b346d">00080</a> <span class="preprocessor">#define GETDMXINPUTFROMPDEVICE \</span>
+<a name="l00081"></a>00081 <span class="preprocessor"> GETDMXLOCALFROMPDEVICE; \</span>
+<a name="l00082"></a>00082 <span class="preprocessor"> DMXInputInfo *dmxInput = &amp;dmxInputs[dmxLocal-&gt;inputIdx]</span>
+<a name="l00083"></a>00083 <span class="preprocessor"></span>
+<a name="l00084"></a><a class="code" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">00084</a> <span class="preprocessor">#define GETDMXLOCALFROMPDEV \</span>
+<a name="l00085"></a>00085 <span class="preprocessor"> DMXLocalInputInfoPtr dmxLocal = pDev-&gt;devicePrivate</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span>
+<a name="l00087"></a><a class="code" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">00087</a> <span class="preprocessor">#define GETDMXINPUTFROMPDEV \</span>
+<a name="l00088"></a>00088 <span class="preprocessor"> GETDMXLOCALFROMPDEV; \</span>
+<a name="l00089"></a>00089 <span class="preprocessor"> DMXInputInfo *dmxInput = &amp;dmxInputs[dmxLocal-&gt;inputIdx]</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span>
+<a name="l00091"></a><a class="code" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">00091</a> <span class="preprocessor">#define GETPRIVFROMPDEV \</span>
+<a name="l00092"></a>00092 <span class="preprocessor"> GETDMXLOCALFROMPDEV; \</span>
+<a name="l00093"></a>00093 <span class="preprocessor"> myPrivate *priv = dmxLocal-&gt;private</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span>
+<a name="l00095"></a><a class="code" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">00095</a> <span class="preprocessor">#define DMX_KEYBOARD_EVENT_MASK \</span>
+<a name="l00096"></a>00096 <span class="preprocessor"> (KeyPressMask | KeyReleaseMask | KeymapStateMask)</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span>
+<a name="l00098"></a><a class="code" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">00098</a> <span class="preprocessor">#define DMX_POINTER_EVENT_MASK \</span>
+<a name="l00099"></a>00099 <span class="preprocessor"> (ButtonPressMask | ButtonReleaseMask | PointerMotionMask)</span>
+<a name="l00100"></a>00100 <span class="preprocessor"></span>
+<a name="l00101"></a>00101 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00102"></a>00102 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap</a>(DevicePtr pDev,
+<a name="l00103"></a>00103 KeySymsPtr pKeySyms, CARD8 *pModMap);
+<a name="l00104"></a>00104 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl</a>(DevicePtr pDev, KeybdCtrl *ctrl);
+<a name="l00105"></a>00105 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#aa069076ebf89f8b89668cffafb731cfe">dmxCommonKbdBell</a>(DevicePtr pDev, <span class="keywordtype">int</span> percent,
+<a name="l00106"></a>00106 <span class="keywordtype">int</span> volume, <span class="keywordtype">int</span> pitch, <span class="keywordtype">int</span> duration);
+<a name="l00107"></a>00107 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcommon_8c.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn</a>(DevicePtr pDev);
+<a name="l00108"></a>00108 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff</a>(DevicePtr pDev);
+<a name="l00109"></a>00109 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap</a>(DevicePtr pDev,
+<a name="l00110"></a>00110 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<a class="code" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, <span class="keywordtype">int</span> *nButtons);
+<a name="l00111"></a>00111 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl</a>(DevicePtr pDev, PtrCtrl *ctrl);
+<a name="l00112"></a>00112 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcommon_8c.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn</a>(DevicePtr pDev);
+<a name="l00113"></a>00113 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff</a>(DevicePtr pDev);
+<a name="l00114"></a>00114 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcommon_8c.html#a907580b7be71d9be0b771d32210f3cad">dmxFindPointerScreen</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcommon_8c.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn</a>(DevicePtr pDev);
+<a name="l00117"></a>00117 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxCommonOthOff</a>(DevicePtr pDev);
+<a name="l00118"></a>00118 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 <span class="comment">/* helper functions */</span>
+<a name="l00121"></a>00121 <span class="keyword">extern</span> pointer <a class="code" href="dmxcommon_8c.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate</a>(DeviceIntPtr pDevice);
+<a name="l00122"></a>00122 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState</a>(pointer <span class="keyword">private</span>);
+<a name="l00123"></a>00123 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState</a>(pointer <span class="keyword">private</span>);
+<a name="l00124"></a>00124 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcommon_8h.html">dmxcommon.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcompat_8c.html b/hw/dmx/doc/html/dmxcompat_8c.html
new file mode 100644
index 0000000..d64cd8f
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcompat_8c.html
@@ -0,0 +1,275 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcompat_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxcompat.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxconfig_8h_source.html">dmxconfig.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcompat_8h_source.html">dmxcompat.h</a>&quot;</code><br/>
+<code>#include &quot;parser.h&quot;</code><br/>
+<code>#include &lt;stdio.h&gt;</code><br/>
+<code>#include &lt;stdlib.h&gt;</code><br/>
+<code>#include &lt;string.h&gt;</code><br/>
+<code>#include &lt;ctype.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcompat_8c.html#a186cebe5d2ccba23be8ed5184ec0b27d">dmxVDLReadLine</a> (FILE *<a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, char *buf, int len)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcompat_8c.html#a2bfb19f15e4e2fab177d050423dfd478">dmxVDLCount</a> (const char *buf)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcompat_8c.html#a0f960866400da9b168f15d8e738bf864">dmxVDLVirtualEntry</a> (const char *buf, char *name, int *len, int *x, int *y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcompat_8c.html#a48a37477c3206396f646511a64e8b7c9">dmxVDLDisplayEntry</a> (const char *buf, char *name, int *len, int *x, int *y, int *xoff, int *yoff, int *xorig, int *yorig)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcompat_8c.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead</a> (const char *filename)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides some compatibility support for reading VDL files that are used by xmovie (<a href="http://www.llnl.gov/icc/sdd/img/xmovie/xmovie.shtml">http://www.llnl.gov/icc/sdd/img/xmovie/xmovie.shtml</a>).</p>
+<p>This file is not used by the DMX server. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a2bfb19f15e4e2fab177d050423dfd478"></a><!-- doxytag: member="dmxcompat.c::dmxVDLCount" ref="a2bfb19f15e4e2fab177d050423dfd478" args="(const char *buf)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxVDLCount </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>buf</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48a37477c3206396f646511a64e8b7c9"></a><!-- doxytag: member="dmxcompat.c::dmxVDLDisplayEntry" ref="a48a37477c3206396f646511a64e8b7c9" args="(const char *buf, char *name, int *len, int *x, int *y, int *xoff, int *yoff, int *xorig, int *yorig)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxVDLDisplayEntry </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>xoff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>yoff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>xorig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>yorig</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1ef0f6bb5be6a9851f12c38122662bef"></a><!-- doxytag: member="dmxcompat.c::dmxVDLRead" ref="a1ef0f6bb5be6a9851f12c38122662bef" args="(const char *filename)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxVDLRead </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>filename</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read from the VDL format <em>filename</em> and return a newly allocated <em>DMXConfigEntryPtr</em> </p>
+
+<p>References <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry()</a>, <a class="el" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString()</a>, <a class="el" href="dmxparse_8c.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>, <a class="el" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8c.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim()</a>, <a class="el" href="dmxparse_8c.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8c.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim()</a>, <a class="el" href="dmxparse_8c.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>, <a class="el" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="dmxcompat_8c.html#a2bfb19f15e4e2fab177d050423dfd478">dmxVDLCount()</a>, <a class="el" href="dmxcompat_8c.html#a48a37477c3206396f646511a64e8b7c9">dmxVDLDisplayEntry()</a>, <a class="el" href="dmxcompat_8c.html#a186cebe5d2ccba23be8ed5184ec0b27d">dmxVDLReadLine()</a>, <a class="el" href="dmxcompat_8c.html#a0f960866400da9b168f15d8e738bf864">dmxVDLVirtualEntry()</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="vdltodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a186cebe5d2ccba23be8ed5184ec0b27d"></a><!-- doxytag: member="dmxcompat.c::dmxVDLReadLine" ref="a186cebe5d2ccba23be8ed5184ec0b27d" args="(FILE *str, char *buf, int len)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxVDLReadLine </td>
+ <td>(</td>
+ <td class="paramtype">FILE *&#160;</td>
+ <td class="paramname"><em>str</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0f960866400da9b168f15d8e738bf864"></a><!-- doxytag: member="dmxcompat.c::dmxVDLVirtualEntry" ref="a0f960866400da9b168f15d8e738bf864" args="(const char *buf, char *name, int *len, int *x, int *y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxVDLVirtualEntry </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcompat_8c.html">dmxcompat.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcompat_8h.html b/hw/dmx/doc/html/dmxcompat_8h.html
new file mode 100644
index 0000000..9e5dc57
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcompat_8h.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcompat_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxcompat.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxcompat_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead</a> (const char *filename)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to VDL compatibility support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcompat_8c.html">dmxcompat.c</a></dd></dl>
+<p>This file is not used by the DMX server. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a1ef0f6bb5be6a9851f12c38122662bef"></a><!-- doxytag: member="dmxcompat.h::dmxVDLRead" ref="a1ef0f6bb5be6a9851f12c38122662bef" args="(const char *filename)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxVDLRead </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>filename</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read from the VDL format <em>filename</em> and return a newly allocated <em>DMXConfigEntryPtr</em> </p>
+
+<p>References <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry()</a>, <a class="el" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString()</a>, <a class="el" href="dmxparse_8c.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>, <a class="el" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8c.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim()</a>, <a class="el" href="dmxparse_8c.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8c.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim()</a>, <a class="el" href="dmxparse_8c.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>, <a class="el" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="dmxcompat_8c.html#a2bfb19f15e4e2fab177d050423dfd478">dmxVDLCount()</a>, <a class="el" href="dmxcompat_8c.html#a48a37477c3206396f646511a64e8b7c9">dmxVDLDisplayEntry()</a>, <a class="el" href="dmxcompat_8c.html#a186cebe5d2ccba23be8ed5184ec0b27d">dmxVDLReadLine()</a>, <a class="el" href="dmxcompat_8c.html#a0f960866400da9b168f15d8e738bf864">dmxVDLVirtualEntry()</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="vdltodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcompat_8h.html">dmxcompat.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcompat_8h_source.html b/hw/dmx/doc/html/dmxcompat_8h_source.html
new file mode 100644
index 0000000..2d3c1d8
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcompat_8h_source.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcompat_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxcompat.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxcompat_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00040"></a>00040 <span class="preprocessor">#ifndef _DMXCOMPAT_H_</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCOMPAT_H_</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <a class="code" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> <a class="code" href="dmxcompat_8c.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename);
+<a name="l00044"></a>00044 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcompat_8h.html">dmxcompat.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxconfig_8c.html b/hw/dmx/doc/html/dmxconfig_8c.html
new file mode 100644
index 0000000..54ae121
--- /dev/null
+++ b/hw/dmx/doc/html/dmxconfig_8c.html
@@ -0,0 +1,883 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxconfig_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxconfig.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;dmx.h&quot;</code><br/>
+<code>#include &quot;dmxinput.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxconfig_8h_source.html">dmxconfig.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+<code>#include &quot;dmxlog.h&quot;</code><br/>
+<code>#include &quot;dmxcb.h&quot;</code><br/>
+<code>#include &quot;dmxstat.h&quot;</code><br/>
+<code>#include &quot;parser.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#af12101f305634cb9d15269a4b7a13b34">GEN</a>(param, glob, def)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a3dfd693067cad9597343923410b0372e">DMXConfigList</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
+<a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a1e7e0db8e8b8c4ea8068d57243bb94b9">DMXConfigListPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#ab9c66f76ee551600df2b3fc9ce6f4d33">DMXConfigCmd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a5a96d2434004ba9bddaf2b62b5ca9f39">DMXConfigCmdPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">yyparse</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay</a> (const char *<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput</a> (const char *input)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput</a> (const char *input)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile</a> (const char *file)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig</a> (const char *config)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile</a> (const char *filename, int debug)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxConfigMatch</a> (const char *target, <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay</a> (const char *name, int scrnWidth, int scrnHeight, int scrnX, int scrnY, int scrnXSign, int scrnYSign, int rootWidth, int rootHeight, int rootX, int rootY, int rootXSign, int rootYSign)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput</a> (const char *name, int core)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay</a> (<a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> d)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall</a> (<a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> w)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxConfigCopyFromOption</a> (<a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> o)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData</a> (<a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> v)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens</a> (void)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">FILE *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#aae9b4e8aa3f950c6e12e792d6940a852">dmxXkbRules</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a03f1affbcf5042cf537cffc8ce9d47f4">dmxXkbModel</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a70d750a10d2cda84bbb9e009c8cdbdda">dmxXkbLayout</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a9237687e93253996897e0e0d584222ed">dmxXkbVariant</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#aba9019237c80bcabbbbd9afffc723c22">dmxXkbOptions</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmd</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a9d2aa7477b1176f8ee206f47e03c29da">dmxConfigCmd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxDisplaysFromCommandLine</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provides interface for reading DMX configuration files and for combining that information with command-line configuration parameters. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="af12101f305634cb9d15269a4b7a13b34"></a><!-- doxytag: member="dmxconfig.c::GEN" ref="af12101f305634cb9d15269a4b7a13b34" args="(param, glob, def)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GEN</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">param, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">glob, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">def&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> dmxConfigSet##glob(<span class="keyword">const</span> <span class="keywordtype">char</span> *param) { \
+ <span class="keywordflow">if</span> (dmx##glob) free((<span class="keywordtype">void</span> *)dmx##glob); \
+ dmx##glob = strdup(param); \
+ } \
+ <span class="keywordtype">char</span> *dmxConfigGet##glob(<span class="keywordtype">void</span>) { \
+ <span class="keywordflow">return</span> (<span class="keywordtype">char</span> *)(dmx##glob ? dmx##glob : def); \
+ }
+</pre></div><p>This macro is used to generate the following access methods:</p>
+<ul>
+<li>dmxConfig{Set,Get}rules</li>
+<li>dmxConfig{Set,Get}model</li>
+<li>dmxConfig{Set,Get}layout</li>
+<li>dmxConfig{Set,Get}variant</li>
+<li>dmxConfig{Set,Get}options These methods are used to read and write information about the keyboard. </li>
+</ul>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ab9c66f76ee551600df2b3fc9ce6f4d33"></a><!-- doxytag: member="dmxconfig.c::DMXConfigCmd" ref="ab9c66f76ee551600df2b3fc9ce6f4d33" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a> <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmd</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This stucture stores the parsed configuration information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5a96d2434004ba9bddaf2b62b5ca9f39"></a><!-- doxytag: member="dmxconfig.c::DMXConfigCmdPtr" ref="a5a96d2434004ba9bddaf2b62b5ca9f39" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a> * <a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3dfd693067cad9597343923410b0372e"></a><!-- doxytag: member="dmxconfig.c::DMXConfigList" ref="a3dfd693067cad9597343923410b0372e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> <a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores lists of configuration information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1e7e0db8e8b8c4ea8068d57243bb94b9"></a><!-- doxytag: member="dmxconfig.c::DMXConfigListPtr" ref="a1e7e0db8e8b8c4ea8068d57243bb94b9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> * <a class="el" href="structDMXConfigListStruct.html">DMXConfigListPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a5fa6729153f7f7e5d3037d451291fa64"></a><!-- doxytag: member="dmxconfig.c::dmxConfigAddDisplay" ref="a5fa6729153f7f7e5d3037d451291fa64" args="(const char *name, int scrnWidth, int scrnHeight, int scrnX, int scrnY, int scrnXSign, int scrnYSign, int rootWidth, int rootHeight, int rootX, int rootY, int rootXSign, int rootYSign)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxConfigAddDisplay </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnWidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnHeight</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnY</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnXSign</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnYSign</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>rootWidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>rootHeight</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>rootX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>rootY</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>rootXSign</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>rootYSign</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxstat_8c.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxStatAlloc()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">_DMXScreenInfo::scrnXSign</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">_DMXScreenInfo::scrnYSign</a>, and <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo::stat</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, and <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a21dc2639218a59ae564d3eaeb4781a90"></a><!-- doxytag: member="dmxconfig.c::dmxConfigAddInput" ref="a21dc2639218a59ae564d3eaeb4781a90" args="(const char *name, int core)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* dmxConfigAddInput </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>core</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, and <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aea3cce9591f89ab89cc581abc6521eee"></a><!-- doxytag: member="dmxconfig.c::dmxConfigConfigInputs" ref="aea3cce9591f89ab89cc581abc6521eee" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigConfigInputs </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">DMXConfigCmdStruct::inputs</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">DMXConfigCmdStruct::xinputs</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a826f729e29c8737ac9bbb9416505cd74"></a><!-- doxytag: member="dmxconfig.c::dmxConfigConfigure" ref="a826f729e29c8737ac9bbb9416505cd74" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigConfigure </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set up the appropriate global variables so that the DMX server will be initialized using the configuration specified in the config file and on the command line. </p>
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a>, <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct::displays</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxparse_8c.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8143b3e3871932b1c7ebe5727909304"></a><!-- doxytag: member="dmxconfig.c::dmxConfigCopyData" ref="aa8143b3e3871932b1c7ebe5727909304" args="(DMXConfigVirtualPtr v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCopyData </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>v</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual::dim</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxConfigCopyFromOption()</a>, <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxcb_8c.html#aaafedb53a138b81ebb62eeff391f1115">dmxSetWidthHeight()</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a>, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, and <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad46057dba8680aec8dd960f05a571cb1"></a><!-- doxytag: member="dmxconfig.c::dmxConfigCopyFromDisplay" ref="ad46057dba8680aec8dd960f05a571cb1" args="(DMXConfigDisplayPtr d)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCopyFromDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>d</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">PosAbsolute</a>, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay::rootHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay::rootWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay::rootX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay::rootXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay::rootY</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a>, <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a>, <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48c8a79b6592af11c76511bd6ab781dc"></a><!-- doxytag: member="dmxconfig.c::dmxConfigCopyFromOption" ref="a48c8a79b6592af11c76511bd6ab781dc" args="(DMXConfigOptionPtr o)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCopyFromOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>o</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption::option</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, and <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc8b90e1cf4b70434515265c10970967"></a><!-- doxytag: member="dmxconfig.c::dmxConfigCopyFromParam" ref="afc8b90e1cf4b70434515265c10970967" args="(DMXConfigParamPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCopyFromParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam()</a>, <a class="el" href="dmxconfig_8h.html#ad072d4dab0b5b0623c9b6d1b3b57e23a">dmxConfigSetXkbLayout()</a>, <a class="el" href="dmxconfig_8h.html#ab9b9a8c70f9fd1b051187c47427f4999">dmxConfigSetXkbModel()</a>, <a class="el" href="dmxconfig_8h.html#aef54e09cba9b65acbdcb6568de54b2b6">dmxConfigSetXkbOptions()</a>, <a class="el" href="dmxconfig_8h.html#ae3270803aaa7990900d8c123f2181485">dmxConfigSetXkbRules()</a>, and <a class="el" href="dmxconfig_8h.html#af8922109f7462e6e246d8e06f1e21c5b">dmxConfigSetXkbVariant()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad9a587a7bacd29a6e7b23caa5e482930"></a><!-- doxytag: member="dmxconfig.c::dmxConfigCopyFromWall" ref="ad9a587a7bacd29a6e7b23caa5e482930" args="(DMXConfigWallPtr w)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCopyFromWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>w</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">_DMXConfigWall::height</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">PosAbsolute</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">PosBelow</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">PosRightOf</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a>, <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo::whereRefScreen</a>, <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a>, <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a>, <a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">_DMXConfigWall::width</a>, <a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">_DMXConfigWall::xwall</a>, and <a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">_DMXConfigWall::ywall</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab1add76564bec8f2616b0a3dedc63184"></a><!-- doxytag: member="dmxconfig.c::dmxConfigFromCommandLine" ref="ab1add76564bec8f2616b0a3dedc63184" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigFromCommandLine </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct::displays</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">PosAbsolute</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">PosBelow</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">PosRightOf</a>, <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a>, <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo::whereRefScreen</a>, <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a441a0182ba8329783400aef0930adc85"></a><!-- doxytag: member="dmxconfig.c::dmxConfigFromConfigFile" ref="a441a0182ba8329783400aef0930adc85" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigFromConfigFile </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxConfigMatch()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a8c408992d310e3e18b6403bc7a7371"></a><!-- doxytag: member="dmxconfig.c::dmxConfigMatch" ref="a6a8c408992d310e3e18b6403bc7a7371" args="(const char *target, DMXConfigEntryPtr entry)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static const char* dmxConfigMatch </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>target</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>entry</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a26c4557203995a45cf09b1c810b4d07a"></a><!-- doxytag: member="dmxconfig.c::dmxConfigReadFile" ref="a26c4557203995a45cf09b1c810b4d07a" args="(const char *filename, int debug)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxConfigReadFile </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>filename</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>debug</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">yydebug</a>, <a class="el" href="dmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a>, and <a class="el" href="dmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">yyparse()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a41ff0900fb1b1056b02014bf39bee02f"></a><!-- doxytag: member="dmxconfig.c::dmxConfigSetMaxScreens" ref="a41ff0900fb1b1056b02014bf39bee02f" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetMaxScreens </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function determines the number of displays we WILL have and sets MAXSCREENS to that value. This is difficult since the number depends on the command line (which is easy to count) or on the config file, which has to be parsed. </p>
+
+<p>References <a class="el" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxDisplaysFromCommandLine</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a224cf25e04e43ce049574c10ce39b597"></a><!-- doxytag: member="dmxconfig.c::dmxConfigStoreConfig" ref="a224cf25e04e43ce049574c10ce39b597" args="(const char *config)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreConfig </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>config</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>config</em> should be used as the configuration for current instantiation of the DMX server. </p>
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, and <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac372c2ded30d6c82cc7973f7891d2363"></a><!-- doxytag: member="dmxconfig.c::dmxConfigStoreDisplay" ref="ac372c2ded30d6c82cc7973f7891d2363" args="(const char *display)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreDisplay </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>display</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>display</em> is the name of an X11 display that should be initialized as a backend (output) display. Called from <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a>. </p>
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct::displays</a>, <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxDisplaysFromCommandLine</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, and <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6d2a898606f3b373c5a6ebd07d288e53"></a><!-- doxytag: member="dmxconfig.c::dmxConfigStoreFile" ref="a6d2a898606f3b373c5a6ebd07d288e53" args="(const char *file)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreFile </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>file</em> is the configuration file. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa591f4e1846bc6e6d78c68d77879c900"></a><!-- doxytag: member="dmxconfig.c::dmxConfigStoreInput" ref="aa591f4e1846bc6e6d78c68d77879c900" args="(const char *input)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreInput </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>input</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>input</em> is the name of an X11 display that should be used for input (either a backend or a console input device). </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">DMXConfigCmdStruct::inputs</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, and <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac116ffa05f76ddb8f5920cf3a262e2e5"></a><!-- doxytag: member="dmxconfig.c::dmxConfigStoreXInput" ref="ac116ffa05f76ddb8f5920cf3a262e2e5" args="(const char *input)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreXInput </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>input</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>input</em> is the name of an X11 display that should be used for input from XInput extension devices. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">DMXConfigCmdStruct::xinputs</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a847a2de5c1c28c9d7055a2b89ed7dad7"></a><!-- doxytag: member="dmxconfig.c::yyparse" ref="a847a2de5c1c28c9d7055a2b89ed7dad7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int yyparse </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, and <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a9d2aa7477b1176f8ee206f47e03c29da"></a><!-- doxytag: member="dmxconfig.c::dmxConfigCmd" ref="a9d2aa7477b1176f8ee206f47e03c29da" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmd</a> <a class="el" href="dmxconfig_8c.html#a9d2aa7477b1176f8ee206f47e03c29da">dmxConfigCmd</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af1733e9f6f810a355a158f16f8bc7899"></a><!-- doxytag: member="dmxconfig.c::dmxConfigEntry" ref="af1733e9f6f810a355a158f16f8bc7899" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> <a class="el" href="xdmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a574577536ff981870613b67021f61930"></a><!-- doxytag: member="dmxconfig.c::dmxDisplaysFromCommandLine" ref="a574577536ff981870613b67021f61930" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxDisplaysFromCommandLine</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, and <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a70d750a10d2cda84bbb9e009c8cdbdda"></a><!-- doxytag: member="dmxconfig.c::dmxXkbLayout" ref="a70d750a10d2cda84bbb9e009c8cdbdda" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxconfig_8c.html#a70d750a10d2cda84bbb9e009c8cdbdda">dmxXkbLayout</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a03f1affbcf5042cf537cffc8ce9d47f4"></a><!-- doxytag: member="dmxconfig.c::dmxXkbModel" ref="a03f1affbcf5042cf537cffc8ce9d47f4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxconfig_8c.html#a03f1affbcf5042cf537cffc8ce9d47f4">dmxXkbModel</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aba9019237c80bcabbbbd9afffc723c22"></a><!-- doxytag: member="dmxconfig.c::dmxXkbOptions" ref="aba9019237c80bcabbbbd9afffc723c22" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxconfig_8c.html#aba9019237c80bcabbbbd9afffc723c22">dmxXkbOptions</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aae9b4e8aa3f950c6e12e792d6940a852"></a><!-- doxytag: member="dmxconfig.c::dmxXkbRules" ref="aae9b4e8aa3f950c6e12e792d6940a852" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxconfig_8c.html#aae9b4e8aa3f950c6e12e792d6940a852">dmxXkbRules</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9237687e93253996897e0e0d584222ed"></a><!-- doxytag: member="dmxconfig.c::dmxXkbVariant" ref="a9237687e93253996897e0e0d584222ed" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxconfig_8c.html#a9237687e93253996897e0e0d584222ed">dmxXkbVariant</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a46af646807e0797e72b6e8945e7ea88b"></a><!-- doxytag: member="dmxconfig.c::yyin" ref="a46af646807e0797e72b6e8945e7ea88b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">FILE* <a class="el" href="xdmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxconfig_8h.html b/hw/dmx/doc/html/dmxconfig_8h.html
new file mode 100644
index 0000000..98dfaa4
--- /dev/null
+++ b/hw/dmx/doc/html/dmxconfig_8h.html
@@ -0,0 +1,432 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxconfig_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxconfig.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;xkb-config.h&gt;</code><br/>
+</div>
+<p><a href="dmxconfig_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay</a> (const char *<a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput</a> (const char *input)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput</a> (const char *input)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile</a> (const char *file)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig</a> (const char *config)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#ae3270803aaa7990900d8c123f2181485">dmxConfigSetXkbRules</a> (const char *rules)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#ab9b9a8c70f9fd1b051187c47427f4999">dmxConfigSetXkbModel</a> (const char *model)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#ad072d4dab0b5b0623c9b6d1b3b57e23a">dmxConfigSetXkbLayout</a> (const char *layout)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#af8922109f7462e6e246d8e06f1e21c5b">dmxConfigSetXkbVariant</a> (const char *variant)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#aef54e09cba9b65acbdcb6568de54b2b6">dmxConfigSetXkbOptions</a> (const char *options)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a144614ca8f250e559b030eef79189aac">dmxConfigGetXkbRules</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a9789c9f2428105bd9e896ddd25ea9a76">dmxConfigGetXkbModel</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a5d7b9c934bac97af375cfc1425e4d71c">dmxConfigGetXkbLayout</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#a3206dcb48297854a1d47e8aaa88d647e">dmxConfigGetXkbVariant</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconfig_8h.html#ae5986f5f5ba901313f950db2b4d8b340">dmxConfigGetXkbOptions</a> (void)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for DMX configuration file support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a826f729e29c8737ac9bbb9416505cd74"></a><!-- doxytag: member="dmxconfig.h::dmxConfigConfigure" ref="a826f729e29c8737ac9bbb9416505cd74" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigConfigure </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set up the appropriate global variables so that the DMX server will be initialized using the configuration specified in the config file and on the command line. </p>
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a>, <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct::displays</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxparse_8c.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5d7b9c934bac97af375cfc1425e4d71c"></a><!-- doxytag: member="dmxconfig.h::dmxConfigGetXkbLayout" ref="a5d7b9c934bac97af375cfc1425e4d71c" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* dmxConfigGetXkbLayout </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9789c9f2428105bd9e896ddd25ea9a76"></a><!-- doxytag: member="dmxconfig.h::dmxConfigGetXkbModel" ref="a9789c9f2428105bd9e896ddd25ea9a76" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* dmxConfigGetXkbModel </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae5986f5f5ba901313f950db2b4d8b340"></a><!-- doxytag: member="dmxconfig.h::dmxConfigGetXkbOptions" ref="ae5986f5f5ba901313f950db2b4d8b340" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* dmxConfigGetXkbOptions </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a144614ca8f250e559b030eef79189aac"></a><!-- doxytag: member="dmxconfig.h::dmxConfigGetXkbRules" ref="a144614ca8f250e559b030eef79189aac" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* dmxConfigGetXkbRules </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3206dcb48297854a1d47e8aaa88d647e"></a><!-- doxytag: member="dmxconfig.h::dmxConfigGetXkbVariant" ref="a3206dcb48297854a1d47e8aaa88d647e" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* dmxConfigGetXkbVariant </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a41ff0900fb1b1056b02014bf39bee02f"></a><!-- doxytag: member="dmxconfig.h::dmxConfigSetMaxScreens" ref="a41ff0900fb1b1056b02014bf39bee02f" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetMaxScreens </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function determines the number of displays we WILL have and sets MAXSCREENS to that value. This is difficult since the number depends on the command line (which is easy to count) or on the config file, which has to be parsed. </p>
+
+<p>References <a class="el" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxDisplaysFromCommandLine</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad072d4dab0b5b0623c9b6d1b3b57e23a"></a><!-- doxytag: member="dmxconfig.h::dmxConfigSetXkbLayout" ref="ad072d4dab0b5b0623c9b6d1b3b57e23a" args="(const char *layout)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetXkbLayout </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>layout</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab9b9a8c70f9fd1b051187c47427f4999"></a><!-- doxytag: member="dmxconfig.h::dmxConfigSetXkbModel" ref="ab9b9a8c70f9fd1b051187c47427f4999" args="(const char *model)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetXkbModel </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>model</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef54e09cba9b65acbdcb6568de54b2b6"></a><!-- doxytag: member="dmxconfig.h::dmxConfigSetXkbOptions" ref="aef54e09cba9b65acbdcb6568de54b2b6" args="(const char *options)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetXkbOptions </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>options</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae3270803aaa7990900d8c123f2181485"></a><!-- doxytag: member="dmxconfig.h::dmxConfigSetXkbRules" ref="ae3270803aaa7990900d8c123f2181485" args="(const char *rules)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetXkbRules </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>rules</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af8922109f7462e6e246d8e06f1e21c5b"></a><!-- doxytag: member="dmxconfig.h::dmxConfigSetXkbVariant" ref="af8922109f7462e6e246d8e06f1e21c5b" args="(const char *variant)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigSetXkbVariant </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>variant</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a224cf25e04e43ce049574c10ce39b597"></a><!-- doxytag: member="dmxconfig.h::dmxConfigStoreConfig" ref="a224cf25e04e43ce049574c10ce39b597" args="(const char *config)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreConfig </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>config</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>config</em> should be used as the configuration for current instantiation of the DMX server. </p>
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, and <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac372c2ded30d6c82cc7973f7891d2363"></a><!-- doxytag: member="dmxconfig.h::dmxConfigStoreDisplay" ref="ac372c2ded30d6c82cc7973f7891d2363" args="(const char *display)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreDisplay </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>display</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>display</em> is the name of an X11 display that should be initialized as a backend (output) display. Called from <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a>. </p>
+
+<p>References <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct::displays</a>, <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxDisplaysFromCommandLine</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, and <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6d2a898606f3b373c5a6ebd07d288e53"></a><!-- doxytag: member="dmxconfig.h::dmxConfigStoreFile" ref="a6d2a898606f3b373c5a6ebd07d288e53" args="(const char *file)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreFile </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>file</em> is the configuration file. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa591f4e1846bc6e6d78c68d77879c900"></a><!-- doxytag: member="dmxconfig.h::dmxConfigStoreInput" ref="aa591f4e1846bc6e6d78c68d77879c900" args="(const char *input)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreInput </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>input</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>input</em> is the name of an X11 display that should be used for input (either a backend or a console input device). </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">DMXConfigCmdStruct::inputs</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, and <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac116ffa05f76ddb8f5920cf3a262e2e5"></a><!-- doxytag: member="dmxconfig.h::dmxConfigStoreXInput" ref="ac116ffa05f76ddb8f5920cf3a262e2e5" args="(const char *input)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigStoreXInput </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>input</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that <em>input</em> is the name of an X11 display that should be used for input from XInput extension devices. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a>, <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a>, and <a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">DMXConfigCmdStruct::xinputs</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxconfig_8h.html">dmxconfig.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxconfig_8h_source.html b/hw/dmx/doc/html/dmxconfig_8h_source.html
new file mode 100644
index 0000000..de147ab
--- /dev/null
+++ b/hw/dmx/doc/html/dmxconfig_8h_source.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxconfig_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxconfig.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxconfig_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXCONFIG_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCONFIG_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;xkb-config.h&gt;</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *display);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *input); <span class="comment">/* Core devices */</span>
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *input); <span class="comment">/* Non-core devices */</span>
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *config);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure</a>(<span class="keywordtype">void</span>);
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8c.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8h.html#ae3270803aaa7990900d8c123f2181485">dmxConfigSetXkbRules</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *rules);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8h.html#ab9b9a8c70f9fd1b051187c47427f4999">dmxConfigSetXkbModel</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *model);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8h.html#ad072d4dab0b5b0623c9b6d1b3b57e23a">dmxConfigSetXkbLayout</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *layout);
+<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8h.html#af8922109f7462e6e246d8e06f1e21c5b">dmxConfigSetXkbVariant</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *variant);
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconfig_8h.html#aef54e09cba9b65acbdcb6568de54b2b6">dmxConfigSetXkbOptions</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *options);
+<a name="l00055"></a>00055
+<a name="l00056"></a>00056 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="dmxconfig_8h.html#a144614ca8f250e559b030eef79189aac">dmxConfigGetXkbRules</a>(<span class="keywordtype">void</span>);
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="dmxconfig_8h.html#a9789c9f2428105bd9e896ddd25ea9a76">dmxConfigGetXkbModel</a>(<span class="keywordtype">void</span>);
+<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="dmxconfig_8h.html#a5d7b9c934bac97af375cfc1425e4d71c">dmxConfigGetXkbLayout</a>(<span class="keywordtype">void</span>);
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="dmxconfig_8h.html#a3206dcb48297854a1d47e8aaa88d647e">dmxConfigGetXkbVariant</a>(<span class="keywordtype">void</span>);
+<a name="l00060"></a>00060 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="dmxconfig_8h.html#ae5986f5f5ba901313f950db2b4d8b340">dmxConfigGetXkbOptions</a>(<span class="keywordtype">void</span>);
+<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxconfig_8h.html">dmxconfig.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxconsole_8c.html b/hw/dmx/doc/html/dmxconsole_8c.html
new file mode 100644
index 0000000..71f1095
--- /dev/null
+++ b/hw/dmx/doc/html/dmxconsole_8c.html
@@ -0,0 +1,1560 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxconsole_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxconsole.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxevents_8h_source.html">dmxevents.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxconsole_8h_source.html">dmxconsole.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcommon_8h_source.html">dmxcommon.h</a>&quot;</code><br/>
+<code>#include &quot;dmxscrinit.h&quot;</code><br/>
+<code>#include &quot;dmxcb.h&quot;</code><br/>
+<code>#include &quot;dmxsync.h&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;input.h&quot;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ae6c4c4e74cae671c41da9251ce9f1fc1">DMX_CONSOLE_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ae119931aa626ba4edf85defe5bebe2e7">DMX_WINDOW_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#af1044436ff6b782c51553425ab4886a9">CONSOLE_NUM</a>&#160;&#160;&#160;3</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a9966cd444cfac23d54a82230ea4d1abb">CONSOLE_DEN</a>&#160;&#160;&#160;4</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a8ac83cbd82d4f8ec05a6d83a0b8b447f">DMX_CONSOLE_NAME</a>&#160;&#160;&#160;&quot;DMX Console&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a3dcea52f8f4efb214af127167c51447f">DMX_RES_NAME</a>&#160;&#160;&#160;&quot;Xdmx&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a678a6a04bb4db0eb59755b010773ed08">DMX_RES_CLASS</a>&#160;&#160;&#160;&quot;XDmx&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a6fe0e39a803f195f4b98f0a771b7770a">CONSOLE_BG_COLOR</a>&#160;&#160;&#160;&quot;gray75&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a28d20c43c4cde047ef8db075a3c92ead">CONSOLE_FG_COLOR</a>&#160;&#160;&#160;&quot;black&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a8a86151c856b02dd2d832ab6420358a0">CONSOLE_SCREEN_BG_COLOR</a>&#160;&#160;&#160;&quot;white&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a9b686d2ada1bab9f9a84a5985baab548">CONSOLE_SCREEN_FG_COLOR</a>&#160;&#160;&#160;&quot;black&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a34059c2f2d177a788cef1f14697c4dc4">CONSOLE_SCREEN_DET_COLOR</a>&#160;&#160;&#160;&quot;gray75&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a3493122f5e207552fb641de41c77df82">CONSOLE_SCREEN_CUR_COLOR</a>&#160;&#160;&#160;&quot;red&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>(f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a302a2c9f84249eee79404eb601d085ab">DMXDBG1</a>(f, a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>(f, a, b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>(f, a, b, c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>(f, a, b, c, d)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>(f, a, b, c, d, e)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>(f, a, b, c, d, e, g)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">DMXDBG7</a>(f, a, b, c, d, e, g, h)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a8d0da535d8543184dd5c418d123806ec">unscalex</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#abbad6ed54f9edf3c3a92321eb2d6b424">unscaley</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a44f5875f978cc85c2190eacef51debac">dmxConsoleCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxConsoleDestroyPrivate</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, XRectangle *rect)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int updateCursor, int update)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int x, int y, XRectangle *rect)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a180def32863f7bdddf3637181661c505">dmxConsoleUpdateInfo</a> (pointer private, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int x, int y, DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxConsoleMoveRelative</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int x, int y, DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition</a> (pointer private, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen</a> (int idx, ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxConsoleCreateEmptyCursor</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int *width, int *height, double *xScale, double *yScale, int *consWidth, int *consHeight)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions</a> (pointer private, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> function)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file implements the console input devices. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a6fe0e39a803f195f4b98f0a771b7770a"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_BG_COLOR" ref="a6fe0e39a803f195f4b98f0a771b7770a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_BG_COLOR&#160;&#160;&#160;&quot;gray75&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9966cd444cfac23d54a82230ea4d1abb"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_DEN" ref="a9966cd444cfac23d54a82230ea4d1abb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_DEN&#160;&#160;&#160;4</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a28d20c43c4cde047ef8db075a3c92ead"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_FG_COLOR" ref="a28d20c43c4cde047ef8db075a3c92ead" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_FG_COLOR&#160;&#160;&#160;&quot;black&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af1044436ff6b782c51553425ab4886a9"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_NUM" ref="af1044436ff6b782c51553425ab4886a9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_NUM&#160;&#160;&#160;3</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8a86151c856b02dd2d832ab6420358a0"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_SCREEN_BG_COLOR" ref="a8a86151c856b02dd2d832ab6420358a0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_SCREEN_BG_COLOR&#160;&#160;&#160;&quot;white&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3493122f5e207552fb641de41c77df82"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_SCREEN_CUR_COLOR" ref="a3493122f5e207552fb641de41c77df82" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_SCREEN_CUR_COLOR&#160;&#160;&#160;&quot;red&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a34059c2f2d177a788cef1f14697c4dc4"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_SCREEN_DET_COLOR" ref="a34059c2f2d177a788cef1f14697c4dc4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_SCREEN_DET_COLOR&#160;&#160;&#160;&quot;gray75&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9b686d2ada1bab9f9a84a5985baab548"></a><!-- doxytag: member="dmxconsole.c::CONSOLE_SCREEN_FG_COLOR" ref="a9b686d2ada1bab9f9a84a5985baab548" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CONSOLE_SCREEN_FG_COLOR&#160;&#160;&#160;&quot;black&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae6c4c4e74cae671c41da9251ce9f1fc1"></a><!-- doxytag: member="dmxconsole.c::DMX_CONSOLE_DEBUG" ref="ae6c4c4e74cae671c41da9251ce9f1fc1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_CONSOLE_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8ac83cbd82d4f8ec05a6d83a0b8b447f"></a><!-- doxytag: member="dmxconsole.c::DMX_CONSOLE_NAME" ref="a8ac83cbd82d4f8ec05a6d83a0b8b447f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_CONSOLE_NAME&#160;&#160;&#160;&quot;DMX Console&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a678a6a04bb4db0eb59755b010773ed08"></a><!-- doxytag: member="dmxconsole.c::DMX_RES_CLASS" ref="a678a6a04bb4db0eb59755b010773ed08" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_RES_CLASS&#160;&#160;&#160;&quot;XDmx&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3dcea52f8f4efb214af127167c51447f"></a><!-- doxytag: member="dmxconsole.c::DMX_RES_NAME" ref="a3dcea52f8f4efb214af127167c51447f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_RES_NAME&#160;&#160;&#160;&quot;Xdmx&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae119931aa626ba4edf85defe5bebe2e7"></a><!-- doxytag: member="dmxconsole.c::DMX_WINDOW_DEBUG" ref="ae119931aa626ba4edf85defe5bebe2e7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adf6865b0bc7ad370c94e3b8682262c13"></a><!-- doxytag: member="dmxconsole.c::DMXDBG0" ref="adf6865b0bc7ad370c94e3b8682262c13" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, and <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a302a2c9f84249eee79404eb601d085ab"></a><!-- doxytag: member="dmxconsole.c::DMXDBG1" ref="a302a2c9f84249eee79404eb601d085ab" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1056d63499cee76ebe297c19637f2b79"></a><!-- doxytag: member="dmxconsole.c::DMXDBG2" ref="a1056d63499cee76ebe297c19637f2b79" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c6714b899194081b94edb722ca1c4bc"></a><!-- doxytag: member="dmxconsole.c::DMXDBG3" ref="a6c6714b899194081b94edb722ca1c4bc" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ffd07ee80777c394a6ff32d1021347d"></a><!-- doxytag: member="dmxconsole.c::DMXDBG4" ref="a8ffd07ee80777c394a6ff32d1021347d" args="(f, a, b, c, d)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG4</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a753eef37715b6379d7d65e34a23d2e03"></a><!-- doxytag: member="dmxconsole.c::DMXDBG5" ref="a753eef37715b6379d7d65e34a23d2e03" args="(f, a, b, c, d, e)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG5</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af703e1a00a515e2507f7d2a354429a24"></a><!-- doxytag: member="dmxconsole.c::DMXDBG6" ref="af703e1a00a515e2507f7d2a354429a24" args="(f, a, b, c, d, e, g)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG6</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab45c7f6cc47b2c786215ca0276d37d91"></a><!-- doxytag: member="dmxconsole.c::DMXDBG7" ref="ab45c7f6cc47b2c786215ca0276d37d91" args="(f, a, b, c, d, e, g, h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG7</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">h&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="dmxconsole.c::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a4d898acda21ed431ce0ee21303930153"></a><!-- doxytag: member="dmxconsole.c::dmxCloseConsole" ref="a4d898acda21ed431ce0ee21303930153" args="(myPrivate *priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCloseConsole </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">_DMXInputInfo::console</a>, <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a>, <a class="el" href="struct__myPrivate.html#ac926e46006665b40b4189f3a62172fa2">_myPrivate::gcCur</a>, <a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">_myPrivate::gcDet</a>, <a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">_myPrivate::gcRev</a>, and <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa38653f98dd899952cf2b0803ec67bf7"></a><!-- doxytag: member="dmxconsole.c::dmxCloseConsoleScreen" ref="aa38653f98dd899952cf2b0803ec67bf7" args="(int idx, ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxCloseConsoleScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">_myPrivate::CloseScreen</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">dmxScreenPrivateKey</a>, and <a class="el" href="struct__myPrivate.html#a6e7a5e6234e0718d5f0d8ba03d902fcd">_myPrivate::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae70541f26e4a4ff6360090393d622b41"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleCapture" ref="ae70541f26e4a4ff6360090393d622b41" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleCapture </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is used to warp the pointer into the console window from anywhere on the screen. It is used when backend and console input are both being taken from the same X display. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate::captured</a>, <a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">_myPrivate::curX</a>, <a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">_myPrivate::curY</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxconsole_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a>, <a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">_myPrivate::fine</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1197a51c042b3536fdb3132ac0feec54"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleClearCursor" ref="a1197a51c042b3536fdb3132ac0feec54" args="(myPrivate *priv, int x, int y, XRectangle *rect)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleClearCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XRectangle *&#160;</td>
+ <td class="paramname"><em>rect</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a>, <a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">_myPrivate::gcDet</a>, <a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">_myPrivate::gcRev</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9c2ec3c63c36955d2458283dbd62b605"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleCollectEvents" ref="a9c2ec3c63c36955d2458283dbd62b605" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleCollectEvents </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Collect all pending events from the console's display. Plase these events on the server event queue using the <em>motion</em> and <em>enqueue</em> routines. The <em>checkspecial</em> routine is used to check for special keys that need handling. <em>block</em> tells if signals should be blocked when updating the event queue. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>, <a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxConsoleMoveRelative()</a>, <a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxconsole_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate::height</a>, and <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate::width</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6d6dd821d75fae79c02d7407bbd3c4c5"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleComputeWidthHeight" ref="a6d6dd821d75fae79c02d7407bbd3c4c5" args="(myPrivate *priv, int *width, int *height, double *xScale, double *yScale, int *consWidth, int *consHeight)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleComputeWidthHeight </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double *&#160;</td>
+ <td class="paramname"><em>xScale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">double *&#160;</td>
+ <td class="paramname"><em>yScale</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>consWidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>consHeight</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxconsole_8c.html#a9966cd444cfac23d54a82230ea4d1abb">CONSOLE_DEN</a>, <a class="el" href="dmxconsole_8c.html#af1044436ff6b782c51553425ab4886a9">CONSOLE_NUM</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, and <a class="el" href="dmxconsole_8h.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a54f9e8e06f4ead9df8ff103fffff278e"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleCreateEmptyCursor" ref="a54f9e8e06f4ead9df8ff103fffff278e" args="(myPrivate *priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Cursor dmxConsoleCreateEmptyCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a44f5875f978cc85c2190eacef51debac"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleCreatePrivate" ref="a44f5875f978cc85c2190eacef51debac" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer dmxConsoleCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the private area for <em>pDevice</em>. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab189a2fd44ccd2e6936b6bb1a27f1d5b"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleDestroyPrivate" ref="ab189a2fd44ccd2e6936b6bb1a27f1d5b" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If <em>private</em> is non-NULL, free its associated memory. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae190afd60f808521f7ecdc32d3a0326c"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleDraw" ref="ae190afd60f808521f7ecdc32d3a0326c" args="(myPrivate *priv, int updateCursor, int update)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleDraw </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>updateCursor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>update</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__myPrivate.html#ab0fb948041c7994127e526d6904a1c93">_myPrivate::consHeight</a>, <a class="el" href="struct__myPrivate.html#acedad74bc71aef05c22a25b63a435f02">_myPrivate::consWidth</a>, <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">_myPrivate::fine</a>, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a>, <a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">_myPrivate::gcDet</a>, <a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">_myPrivate::gcRev</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate::height</a>, <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate::pixmap</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>, <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate::width</a>, and <a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">_DMXInputInfo::windows</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8h.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit()</a>, <a class="el" href="dmxconsole_8h.html#ac5fba2223efdab61863b6458a90c189a">dmxConsoleUpdateInfo()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a276766fb2f2449f248420e3177c36072"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleDrawFineCursor" ref="a276766fb2f2449f248420e3177c36072" args="(myPrivate *priv, XRectangle *rect)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleDrawFineCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XRectangle *&#160;</td>
+ <td class="paramname"><em>rect</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#ac926e46006665b40b4189f3a62172fa2">_myPrivate::gcCur</a>, <a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">_myPrivate::globalX</a>, <a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">_myPrivate::globalY</a>, <a class="el" href="struct__myPrivate.html#a9d7f5ad2b2066a328c982a2ed051cd94">_myPrivate::grabbed</a>, <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate::pixmap</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa058e61a540d8d4c740fee239c3bffe1"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleDrawWindows" ref="aa058e61a540d8d4c740fee239c3bffe1" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleDrawWindows </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a613139541bddab357c413b76238e489b"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleFunctions" ref="a613139541bddab357c413b76238e489b" args="(pointer private, DMXFunctionType function)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxConsoleFunctions </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Handle special console-only keys. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">DMX_FUNCTION_FINE</a>, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">DMX_FUNCTION_GRAB</a>, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>, <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afdd1f3231a4059e6c13d81cb5b472ab6"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleInit" ref="afdd1f3231a4059e6c13d81cb5b472ab6" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialized the console device described by <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">_myPrivate::CloseScreen</a>, <a class="el" href="dmxconsole_8c.html#a6fe0e39a803f195f4b98f0a771b7770a">CONSOLE_BG_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a8a86151c856b02dd2d832ab6420358a0">CONSOLE_SCREEN_BG_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a3493122f5e207552fb641de41c77df82">CONSOLE_SCREEN_CUR_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a34059c2f2d177a788cef1f14697c4dc4">CONSOLE_SCREEN_DET_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a9b686d2ada1bab9f9a84a5985baab548">CONSOLE_SCREEN_FG_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a8ac83cbd82d4f8ec05a6d83a0b8b447f">DMX_CONSOLE_NAME</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxconsole_8c.html#a678a6a04bb4db0eb59755b010773ed08">DMX_RES_CLASS</a>, <a class="el" href="dmxconsole_8c.html#a3dcea52f8f4efb214af127167c51447f">DMX_RES_NAME</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxConsoleCreateEmptyCursor()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">dmxScreenPrivateKey</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">_myPrivate::mask</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a710d0bdd587deeb35b430ba48ac209f1"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleKbdGetInfo" ref="a710d0bdd587deeb35b430ba48ac209f1" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for keyboard. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3d639d0e2a2c3c520f3544f15910ab01"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleMouGetInfo" ref="a3d639d0e2a2c3c520f3544f15910ab01" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleMouGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for pointers. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap()</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2b430aacdd54f91c8d3f3600daeba404"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleMoveAbsolute" ref="a2b430aacdd54f91c8d3f3600daeba404" args="(myPrivate *priv, int x, int y, DevicePtr pDev, dmxMotionProcPtr motion, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleMoveAbsolute </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">_myPrivate::curX</a>, <a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">_myPrivate::curY</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">DMX_ABSOLUTE_CONFINED</a>, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxconsole_8c.html#a8d0da535d8543184dd5c418d123806ec">unscalex()</a>, and <a class="el" href="dmxconsole_8c.html#abbad6ed54f9edf3c3a92321eb2d6b424">unscaley()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab395efb910b074e2c4c727c0d63ba79d"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleMoveRelative" ref="ab395efb910b074e2c4c727c0d63ba79d" args="(myPrivate *priv, int x, int y, DevicePtr pDev, dmxMotionProcPtr motion, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleMoveRelative </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="struct__myPrivate.html#aeb80240bdd4d585ecf2ab890a2e74369">_myPrivate::lastX</a>, and <a class="el" href="struct__myPrivate.html#a25344ec18eba85efb5017bf848f152f4">_myPrivate::lastY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35bfb53c46a7a14282d0110aa603dd4a"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleReInit" ref="a35bfb53c46a7a14282d0110aa603dd4a" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleReInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialized the console device described by <em>pDev</em> (after a reconfig). </p>
+
+<p>References <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aadf02f44bcb19eb2d0f8507a397a73fb"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleUncapture" ref="aadf02f44bcb19eb2d0f8507a397a73fb" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleUncapture </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Undo the capture that was done by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture</a>. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate::captured</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, <a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, and <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af9111e31dfe8cc6e5a531f66fd11b108"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleUpdateFineCursor" ref="af9111e31dfe8cc6e5a531f66fd11b108" args="(myPrivate *priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConsoleUpdateFineCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#ab0fb948041c7994127e526d6904a1c93">_myPrivate::consHeight</a>, <a class="el" href="struct__myPrivate.html#acedad74bc71aef05c22a25b63a435f02">_myPrivate::consWidth</a>, <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName()</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a>, <a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">_myPrivate::globalX</a>, <a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">_myPrivate::globalY</a>, <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate::height</a>, <a class="el" href="struct__myPrivate.html#aeb80240bdd4d585ecf2ab890a2e74369">_myPrivate::lastX</a>, <a class="el" href="struct__myPrivate.html#a25344ec18eba85efb5017bf848f152f4">_myPrivate::lastY</a>, <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate::pixmap</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>, and <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate::width</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a180def32863f7bdddf3637181661c505"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleUpdateInfo" ref="a180def32863f7bdddf3637181661c505" args="(pointer private, DMXUpdateType type, WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleUpdateInfo </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Whenever the window layout (size, position, stacking order) might be changed, this routine is called with the <em>pWindow</em> that changed and the <em>type</em> of change. This routine is called in a conservative fashion: the actual layout of the windows of the screen might not have had any human-visible changes. </p>
+
+<p>References <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a596b1bd2ef51d5542393215ad810b227"></a><!-- doxytag: member="dmxconsole.c::dmxConsoleUpdatePosition" ref="a596b1bd2ef51d5542393215ad810b227" args="(pointer private, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleUpdatePosition </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine gets called from <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a> for each motion. This allows the console's notion of the cursor postion to change when another input device actually caused the change. </p>
+
+<p>References <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d50c99c929a09ffebd10b1e3df8a99e"></a><!-- doxytag: member="dmxconsole.c::dmxDump" ref="a7d50c99c929a09ffebd10b1e3df8a99e" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDump </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName()</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a775cc5d6380d9b514484678c74945a17"></a><!-- doxytag: member="dmxconsole.c::scalex" ref="a775cc5d6380d9b514484678c74945a17" args="(myPrivate *priv, int x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int scalex </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a9f848bc9be43096be0590740a9531c4c">_myPrivate::xScale</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a522fcecd527755f128ded24ed2449e67"></a><!-- doxytag: member="dmxconsole.c::scaley" ref="a522fcecd527755f128ded24ed2449e67" args="(myPrivate *priv, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int scaley </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a9d41da04ff8e8b84f9ee138edffb16c7">_myPrivate::yScale</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8d0da535d8543184dd5c418d123806ec"></a><!-- doxytag: member="dmxconsole.c::unscalex" ref="a8d0da535d8543184dd5c418d123806ec" args="(myPrivate *priv, int x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int unscalex </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a9f848bc9be43096be0590740a9531c4c">_myPrivate::xScale</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abbad6ed54f9edf3c3a92321eb2d6b424"></a><!-- doxytag: member="dmxconsole.c::unscaley" ref="abbad6ed54f9edf3c3a92321eb2d6b424" args="(myPrivate *priv, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int unscaley </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a9d41da04ff8e8b84f9ee138edffb16c7">_myPrivate::yScale</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxconsole_8h.html b/hw/dmx/doc/html/dmxconsole_8h.html
new file mode 100644
index 0000000..bd71a81
--- /dev/null
+++ b/hw/dmx/doc/html/dmxconsole_8h.html
@@ -0,0 +1,444 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxconsole_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxconsole.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxconsole_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a44f5875f978cc85c2190eacef51debac">dmxConsoleCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxConsoleDestroyPrivate</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions</a> (pointer private, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> function)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition</a> (pointer private, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#a85026fe07bc1cf4f5b740249655c1648">dmxConsoleKbdSetCtrl</a> (pointer private, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxconsole_8h.html#ac5fba2223efdab61863b6458a90c189a">dmxConsoleUpdateInfo</a> (pointer private, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr pWindow)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for console device support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a> </dd>
+<dd>
+<a class="el" href="dmxcommon_8c.html">dmxcommon.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ae70541f26e4a4ff6360090393d622b41"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleCapture" ref="ae70541f26e4a4ff6360090393d622b41" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleCapture </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is used to warp the pointer into the console window from anywhere on the screen. It is used when backend and console input are both being taken from the same X display. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate::captured</a>, <a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">_myPrivate::curX</a>, <a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">_myPrivate::curY</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxconsole_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a>, <a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">_myPrivate::fine</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9c2ec3c63c36955d2458283dbd62b605"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleCollectEvents" ref="a9c2ec3c63c36955d2458283dbd62b605" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleCollectEvents </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Collect all pending events from the console's display. Plase these events on the server event queue using the <em>motion</em> and <em>enqueue</em> routines. The <em>checkspecial</em> routine is used to check for special keys that need handling. <em>block</em> tells if signals should be blocked when updating the event queue. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>, <a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxConsoleMoveRelative()</a>, <a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxconsole_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">GETDMXINPUTFROMPRIV</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate::height</a>, and <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate::width</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a44f5875f978cc85c2190eacef51debac"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleCreatePrivate" ref="a44f5875f978cc85c2190eacef51debac" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer dmxConsoleCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the private area for <em>pDevice</em>. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab189a2fd44ccd2e6936b6bb1a27f1d5b"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleDestroyPrivate" ref="ab189a2fd44ccd2e6936b6bb1a27f1d5b" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If <em>private</em> is non-NULL, free its associated memory. </p>
+
+</div>
+</div>
+<a class="anchor" id="a613139541bddab357c413b76238e489b"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleFunctions" ref="a613139541bddab357c413b76238e489b" args="(pointer private, DMXFunctionType function)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxConsoleFunctions </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>&#160;</td>
+ <td class="paramname"><em>function</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Handle special console-only keys. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">DMX_FUNCTION_FINE</a>, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">DMX_FUNCTION_GRAB</a>, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>, <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afdd1f3231a4059e6c13d81cb5b472ab6"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleInit" ref="afdd1f3231a4059e6c13d81cb5b472ab6" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialized the console device described by <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">_myPrivate::CloseScreen</a>, <a class="el" href="dmxconsole_8c.html#a6fe0e39a803f195f4b98f0a771b7770a">CONSOLE_BG_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a8a86151c856b02dd2d832ab6420358a0">CONSOLE_SCREEN_BG_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a3493122f5e207552fb641de41c77df82">CONSOLE_SCREEN_CUR_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a34059c2f2d177a788cef1f14697c4dc4">CONSOLE_SCREEN_DET_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a9b686d2ada1bab9f9a84a5985baab548">CONSOLE_SCREEN_FG_COLOR</a>, <a class="el" href="dmxconsole_8c.html#a8ac83cbd82d4f8ec05a6d83a0b8b447f">DMX_CONSOLE_NAME</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxconsole_8c.html#a678a6a04bb4db0eb59755b010773ed08">DMX_RES_CLASS</a>, <a class="el" href="dmxconsole_8c.html#a3dcea52f8f4efb214af127167c51447f">DMX_RES_NAME</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxConsoleCreateEmptyCursor()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">dmxScreenPrivateKey</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">_myPrivate::mask</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a710d0bdd587deeb35b430ba48ac209f1"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleKbdGetInfo" ref="a710d0bdd587deeb35b430ba48ac209f1" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for keyboard. </p>
+
+<p>References <a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxCommonKbdGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a85026fe07bc1cf4f5b740249655c1648"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleKbdSetCtrl" ref="a85026fe07bc1cf4f5b740249655c1648" args="(pointer private, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleKbdSetCtrl </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3d639d0e2a2c3c520f3544f15910ab01"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleMouGetInfo" ref="a3d639d0e2a2c3c520f3544f15910ab01" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleMouGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill in the <em>info</em> structure for the specified <em>pDev</em>. Only used for pointers. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap()</a>, <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35bfb53c46a7a14282d0110aa603dd4a"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleReInit" ref="a35bfb53c46a7a14282d0110aa603dd4a" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleReInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialized the console device described by <em>pDev</em> (after a reconfig). </p>
+
+<p>References <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">GETPRIVFROMPDEV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aadf02f44bcb19eb2d0f8507a397a73fb"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleUncapture" ref="aadf02f44bcb19eb2d0f8507a397a73fb" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleUncapture </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Undo the capture that was done by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture</a>. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate::captured</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, <a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, and <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5fba2223efdab61863b6458a90c189a"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleUpdateInfo" ref="ac5fba2223efdab61863b6458a90c189a" args="(pointer private, DMXUpdateType, WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleUpdateInfo </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Whenever the window layout (size, position, stacking order) might be changed, this routine is called with the <em>pWindow</em> that changed and the <em>type</em> of change. This routine is called in a conservative fashion: the actual layout of the windows of the screen might not have had any human-visible changes. </p>
+
+<p>References <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a596b1bd2ef51d5542393215ad810b227"></a><!-- doxytag: member="dmxconsole.h::dmxConsoleUpdatePosition" ref="a596b1bd2ef51d5542393215ad810b227" args="(pointer private, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConsoleUpdatePosition </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>private</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine gets called from <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a> for each motion. This allows the console's notion of the cursor postion to change when another input device actually caused the change. </p>
+
+<p>References <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">GETONLYPRIVFROMPRIVATE</a>, <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxconsole_8h.html">dmxconsole.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxconsole_8h_source.html b/hw/dmx/doc/html/dmxconsole_8h_source.html
new file mode 100644
index 0000000..cc54c22
--- /dev/null
+++ b/hw/dmx/doc/html/dmxconsole_8h_source.html
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxconsole_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxconsole.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxconsole_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXCONSOLE_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXCONSOLE_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> pointer <a class="code" href="dmxconsole_8c.html#a44f5875f978cc85c2190eacef51debac">dmxConsoleCreatePrivate</a>(DeviceIntPtr <a class="code" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">pDevice</a>);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxConsoleDestroyPrivate</a>(pointer <span class="keyword">private</span>);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit</a>(DevicePtr pDev);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit</a>(DevicePtr pDev);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents</a>(DevicePtr pDev,
+<a name="l00047"></a>00047 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00048"></a>00048 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00049"></a>00049 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00050"></a>00050 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxconsole_8c.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions</a>(pointer <span class="keyword">private</span>, <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> function);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition</a>(pointer <span class="keyword">private</span>, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8h.html#a85026fe07bc1cf4f5b740249655c1648">dmxConsoleKbdSetCtrl</a>(pointer <span class="keyword">private</span>, KeybdCtrl *ctrl);
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *<a class="code" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">dmxInput</a>);
+<a name="l00055"></a>00055 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *<a class="code" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">dmxInput</a>);
+<a name="l00056"></a>00056 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxconsole_8c.html#a180def32863f7bdddf3637181661c505">dmxConsoleUpdateInfo</a>(pointer <span class="keyword">private</span>,
+<a name="l00057"></a>00057 <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr pWindow);
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxconsole_8h.html">dmxconsole.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcursor_8c.html b/hw/dmx/doc/html/dmxcursor_8c.html
new file mode 100644
index 0000000..8b73a95
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcursor_8c.html
@@ -0,0 +1,1515 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcursor_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxcursor.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcursor_8h_source.html">dmxcursor.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprop_8h_source.html">dmxprop.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+<code>#include &quot;globals.h&quot;</code><br/>
+<code>#include &quot;cursorstr.h&quot;</code><br/>
+<code>#include &quot;dixevents.h&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a757d7359cf12591268a62c0974178079">DMX_CURSOR_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>(f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a302a2c9f84249eee79404eb601d085ab">DMXDBG1</a>(f, a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>(f, a, b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>(f, a, b, c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>(f, a, b, c, d)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>(f, a, b, c, d, e)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>(f, a, b, c, d, e, g)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">DMXDBG7</a>(f, a, b, c, d, e, g, h)</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxCursorNoMulti</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen</a> (ScreenPtr *ppScreen, int *x, int *y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a2d0757fa7119492da7fe26901dab8571">dmxCrossScreen</a> (ScreenPtr pScreen, Bool entering)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#af80076061e55521b62a7cfd8e66bf3e6">dmxWarpCursor</a> (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#aaf8a9878f12b6653247fc27d960beccf">dmxSLCreate</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a565fbb8c3754a14c1aed13b741705b91">dmxSLFree</a> (int *list)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ab4dcb11cad339e72d843356841ffd203">dmxSLFindNext</a> (int *list)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins</a> (int *screensLeft)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen</a> (int x, int y, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *a, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a28c6651bdff6f7fc01292548659a6eb4">dmxIterateOverlap</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start, void *(*f)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *), void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a3beed7bb0f6999879936b2f47751d125">dmxTestSameDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *a, void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor</a> (ScreenPtr pScreen, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor</a> (ScreenPtr pScreen, CursorPtr pCursor, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor</a> (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor</a> (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static CursorPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor</a> (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor</a> (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a214b710621ed0279d6321375f3512a87">dmxDeviceCursorInitialize</a> (DeviceIntPtr pDev, ScreenPtr pScr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#af291298e4f52875e45d7097a223a8c0b">dmxDeviceCursorCleanup</a> (DeviceIntPtr pDev, ScreenPtr pScr)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a> = 1</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">miPointerScreenFuncRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">miPointerSpriteFuncRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8c.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file contains code than supports cursor movement, including the code that initializes and reinitializes the screen positions and computes screen overlap.</p>
+<p>"This code is based very closely on the XFree86 equivalent
+ (xfree86/common/xf86Cursor.c)." --David Dawes.</p>
+<p>"This code was then extensively re-written, as explained here." --Rik Faith</p>
+<p>The code in xf86Cursor.c used edge lists to implement the CursorOffScreen function. The edge list computation was complex (especially in the face of arbitrarily overlapping screens) compared with the speed savings in the CursorOffScreen function. The new implementation has erred on the side of correctness, readability, and maintainability over efficiency. For the common (non-edge) case, the dmxCursorOffScreen function does avoid a loop over all the screens. When the cursor has left the screen, all the screens are searched, and the first screen (in dmxScreens order) containing the cursor will be returned. If run-time profiling shows that this routing is a performance bottle-neck, then an edge list may have to be reimplemented. An edge list algorithm is O(edges) whereas the new algorithm is O(dmxNumScreens). Since edges is usually 1-3 and dmxNumScreens may be 30-60 for large backend walls, this trade off may be compelling.</p>
+<p>The xf86InitOrigins routine uses bit masks during the computation and is therefore limited to the length of a word (e.g., 32 or 64 bits) screens. Because Xdmx is expected to be used with a large number of backend displays, this limitation was removed. The new implementation has erred on the side of readability over efficiency, using the dmxSL* routines to manage a screen list instead of a bitmap, and a function call to decrease the length of the main routine. Both algorithms are of the same order, and both are called only at server generation time, so trading clarity and long-term maintainability for efficiency does not seem justified in this case. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a757d7359cf12591268a62c0974178079"></a><!-- doxytag: member="dmxcursor.c::DMX_CURSOR_DEBUG" ref="a757d7359cf12591268a62c0974178079" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_CURSOR_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adf6865b0bc7ad370c94e3b8682262c13"></a><!-- doxytag: member="dmxcursor.c::DMXDBG0" ref="adf6865b0bc7ad370c94e3b8682262c13" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a302a2c9f84249eee79404eb601d085ab"></a><!-- doxytag: member="dmxcursor.c::DMXDBG1" ref="a302a2c9f84249eee79404eb601d085ab" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1056d63499cee76ebe297c19637f2b79"></a><!-- doxytag: member="dmxcursor.c::DMXDBG2" ref="a1056d63499cee76ebe297c19637f2b79" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, and <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c6714b899194081b94edb722ca1c4bc"></a><!-- doxytag: member="dmxcursor.c::DMXDBG3" ref="a6c6714b899194081b94edb722ca1c4bc" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, and <a class="el" href="dmxcursor_8c.html#af80076061e55521b62a7cfd8e66bf3e6">dmxWarpCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ffd07ee80777c394a6ff32d1021347d"></a><!-- doxytag: member="dmxcursor.c::DMXDBG4" ref="a8ffd07ee80777c394a6ff32d1021347d" args="(f, a, b, c, d)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG4</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a753eef37715b6379d7d65e34a23d2e03"></a><!-- doxytag: member="dmxcursor.c::DMXDBG5" ref="a753eef37715b6379d7d65e34a23d2e03" args="(f, a, b, c, d, e)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG5</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af703e1a00a515e2507f7d2a354429a24"></a><!-- doxytag: member="dmxcursor.c::DMXDBG6" ref="af703e1a00a515e2507f7d2a354429a24" args="(f, a, b, c, d, e, g)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG6</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab45c7f6cc47b2c786215ca0276d37d91"></a><!-- doxytag: member="dmxcursor.c::DMXDBG7" ref="ab45c7f6cc47b2c786215ca0276d37d91" args="(f, a, b, c, d, e, g, h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG7</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">h&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aa208a04334d595e3507287bacffdae80"></a><!-- doxytag: member="dmxcursor.c::_dmxMoveCursor" ref="aa208a04334d595e3507287bacffdae80" args="(ScreenPtr pScreen, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void _dmxMoveCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxcursor_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, and <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac722828c4781d1a44d8b04955472a134"></a><!-- doxytag: member="dmxcursor.c::_dmxRealizeCursor" ref="ac722828c4781d1a44d8b04955472a134" args="(ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool _dmxRealizeCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, <a class="el" href="dmxcursor_8h.html#a7ec081934a095ba159d03229e714cfd5">DMX_SET_CURSOR_PRIV</a>, <a class="el" href="dmxcursor_8c.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, and <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6fd26c7c7811ff77fc3c6e84b82d57d5"></a><!-- doxytag: member="dmxcursor.c::_dmxSetCursor" ref="a6fd26c7c7811ff77fc3c6e84b82d57d5" args="(ScreenPtr pScreen, CursorPtr pCursor, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void _dmxSetCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">_DMXScreenInfo::curCursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a>, <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">_DMXScreenInfo::cursorVisible</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, <a class="el" href="dmxcursor_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo::noCursor</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa2ac82b5666d162e873c7f0c88ec96f6"></a><!-- doxytag: member="dmxcursor.c::_dmxUnrealizeCursor" ref="aa2ac82b5666d162e873c7f0c88ec96f6" args="(ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool _dmxUnrealizeCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, <a class="el" href="dmxcursor_8h.html#a7ec081934a095ba159d03229e714cfd5">DMX_SET_CURSOR_PRIV</a>, <a class="el" href="dmxcursor_8c.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a84c92b801c5802879047e74401f62e94"></a><!-- doxytag: member="dmxcursor.c::dmxBECreateCursor" ref="a84c92b801c5802879047e74401f62e94" args="(ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECreateCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pCursor</em> on the back-end associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a>, <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, and <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0e94924bf5a69c2b26e9d0442befadd"></a><!-- doxytag: member="dmxcursor.c::dmxBEFreeCursor" ref="ae0e94924bf5a69c2b26e9d0442befadd" args="(ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free <em>pCursor</em> on the back-end associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, and <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a381bffb099457e7c26a2312cf968a6"></a><!-- doxytag: member="dmxcursor.c::dmxCheckCursor" ref="a6a381bffb099457e7c26a2312cf968a6" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCheckCursor </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called during reconfiguration to make sure the cursor is visible. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a>, <a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor()</a>, <a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5a4c58dbde29584153fbc43a1ac6e26"></a><!-- doxytag: member="dmxcursor.c::dmxComputeScreenOrigins" ref="aa5a4c58dbde29584153fbc43a1ac6e26" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxComputeScreenOrigins </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxcursor_8c.html#aaf8a9878f12b6653247fc27d960beccf">dmxSLCreate()</a>, <a class="el" href="dmxcursor_8c.html#ab4dcb11cad339e72d843356841ffd203">dmxSLFindNext()</a>, <a class="el" href="dmxcursor_8c.html#a565fbb8c3754a14c1aed13b741705b91">dmxSLFree()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, and <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo::whereRefScreen</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d0757fa7119492da7fe26901dab8571"></a><!-- doxytag: member="dmxcursor.c::dmxCrossScreen" ref="a2d0757fa7119492da7fe26901dab8571" args="(ScreenPtr pScreen, Bool entering)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCrossScreen </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>entering</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a709e3d4a4e44e17fed3de1fcb0d42b20"></a><!-- doxytag: member="dmxcursor.c::dmxCursorNoMulti" ref="a709e3d4a4e44e17fed3de1fcb0d42b20" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCursorNoMulti </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn off support for displaying multiple cursors on overlapped back-end displays. See <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c7f5d94ee32f85ec027c53b881fc697"></a><!-- doxytag: member="dmxcursor.c::dmxCursorOffScreen" ref="a1c7f5d94ee32f85ec027c53b881fc697" args="(ScreenPtr *ppScreen, int *x, int *y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxCursorOffScreen </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr *&#160;</td>
+ <td class="paramname"><em>ppScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">_myPrivate::globalX</a>, <a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">_myPrivate::globalY</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af291298e4f52875e45d7097a223a8c0b"></a><!-- doxytag: member="dmxcursor.c::dmxDeviceCursorCleanup" ref="af291298e4f52875e45d7097a223a8c0b" args="(DeviceIntPtr pDev, ScreenPtr pScr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDeviceCursorCleanup </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a214b710621ed0279d6321375f3512a87"></a><!-- doxytag: member="dmxcursor.c::dmxDeviceCursorInitialize" ref="a214b710621ed0279d6321375f3512a87" args="(DeviceIntPtr pDev, ScreenPtr pScr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxDeviceCursorInitialize </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5612d5f5b97d54fa9eb73540eaeba4f3"></a><!-- doxytag: member="dmxcursor.c::dmxDoesOverlap" ref="a5612d5f5b97d54fa9eb73540eaeba4f3" args="(DMXScreenInfo *a, DMXScreenInfo *b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxDoesOverlap </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>b</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns non-zero if <em>a</em> overlaps <em>b</em>. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac7dc34eb6db6964e4330acc4d0e2badc"></a><!-- doxytag: member="dmxcursor.c::dmxFindCursor" ref="ac7dc34eb6db6964e4330acc4d0e2badc" args="(DMXScreenInfo *start)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static CursorPtr dmxFindCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>start</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, and <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad67e1086ef62ecfa33549d74cd89a379"></a><!-- doxytag: member="dmxcursor.c::dmxHideCursor" ref="ad67e1086ef62ecfa33549d74cd89a379" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxHideCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is used by the backend input routines to hide the cursor on a screen that is being used for relative input. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </dd></dl>
+
+<p>References <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af3fb4b2c2d3cc318c88fbc6658893360"></a><!-- doxytag: member="dmxcursor.c::dmxInitOrigins" ref="af3fb4b2c2d3cc318c88fbc6658893360" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitOrigins </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize screen origins (and relative position). This is called for each server generation. For dynamic reconfiguration, use <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a> instead. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a>, <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a77c74a33de88fae6cf0de8b755a5c411"></a><!-- doxytag: member="dmxcursor.c::dmxInitOverlap" ref="a77c74a33de88fae6cf0de8b755a5c411" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitOverlap </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Detects overlapping dmxScreens and creates circular lists. This uses an O(dmxNumScreens^2) algorithm, but dmxNumScreens is &lt; 100 and the computation only needs to be performed for every server generation or dynamic reconfiguration . </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="dmxcursor_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxcursor_8c.html#a28c6651bdff6f7fc01292548659a6eb4">dmxIterateOverlap()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxcursor_8c.html#a3beed7bb0f6999879936b2f47751d125">dmxTestSameDisplay()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a28c6651bdff6f7fc01292548659a6eb4"></a><!-- doxytag: member="dmxcursor.c::dmxIterateOverlap" ref="a28c6651bdff6f7fc01292548659a6eb4" args="(DMXScreenInfo *start, void *(*f)(DMXScreenInfo *dmxScreen, void *), void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxIterateOverlap </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *(*)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *)&#160;</td>
+ <td class="paramname"><em>f</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Iterate over the screens which overlap with the <em>start</em> screen, calling <em>f</em> with the <em>closure</em> for each argument. Often used with <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap</a>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a21820e2001f763e3cfc924a1d602bb62"></a><!-- doxytag: member="dmxcursor.c::dmxMoveCursor" ref="a21820e2001f763e3cfc924a1d602bb62" args="(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMoveCursor </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Move the cursor to coordinates (<em>x</em>, <em>y</em>)on <em>pScreen</em>. This function is usually called via <a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a>, except during reconfiguration when the cursor is repositioned to force an update on newley overlapping screens and on screens that no longer overlap.</p>
+<p>The coords (x,y) are in global coord space. We'll loop over the back-end screens and see if they contain the global coord. If so, call <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a> (XWarpPointer) to position the pointer on that screen. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">_DMXScreenInfo::cursorVisible</a>, <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>, <a class="el" href="dmxcursor_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>, <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor()</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adaf3455cdd3f54d22285e5a0fa99fddb"></a><!-- doxytag: member="dmxcursor.c::dmxOnScreen" ref="adaf3455cdd3f54d22285e5a0fa99fddb" args="(int x, int y, DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxOnScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns non-zero if the global <em>x</em>, <em>y</em> coordinate is on the screen window of the <em>dmxScreen</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a52398858fc93988512050543967652fe"></a><!-- doxytag: member="dmxcursor.c::dmxPrintOverlap" ref="a52398858fc93988512050543967652fe" args="(DMXScreenInfo *dmxScreen, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxPrintOverlap </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Used with <em>dmxInterateOverlap</em> to print out a list of screens which overlap each other. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad51761f218c643ebe7f010538e9c745f"></a><!-- doxytag: member="dmxcursor.c::dmxRealizeCursor" ref="ad51761f218c643ebe7f010538e9c745f" args="(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxRealizeCursor </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9bdb6eff5f7f86fd071091c5a55cee7c"></a><!-- doxytag: member="dmxcursor.c::dmxReInitOrigins" ref="a9bdb6eff5f7f86fd071091c5a55cee7c" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxReInitOrigins </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Recompute origin information in the <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a> list. This is called from <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins</a>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4cbf6be156525a669ae883465f6458c2"></a><!-- doxytag: member="dmxcursor.c::dmxSetCursor" ref="a4cbf6be156525a669ae883465f6458c2" args="(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSetCursor </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">DMX_NO_BLOCK</a>, <a class="el" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>, <a class="el" href="dmxcursor_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf8a9878f12b6653247fc27d960beccf"></a><!-- doxytag: member="dmxcursor.c::dmxSLCreate" ref="aaf8a9878f12b6653247fc27d960beccf" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int* dmxSLCreate </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a list of screens that we'll manipulate. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab4dcb11cad339e72d843356841ffd203"></a><!-- doxytag: member="dmxcursor.c::dmxSLFindNext" ref="ab4dcb11cad339e72d843356841ffd203" args="(int *list)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxSLFindNext </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>list</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Find next uninitialized entry in list. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a565fbb8c3754a14c1aed13b741705b91"></a><!-- doxytag: member="dmxcursor.c::dmxSLFree" ref="a565fbb8c3754a14c1aed13b741705b91" args="(int *list)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSLFree </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>list</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free list. </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3beed7bb0f6999879936b2f47751d125"></a><!-- doxytag: member="dmxcursor.c::dmxTestSameDisplay" ref="a3beed7bb0f6999879936b2f47751d125" args="(DMXScreenInfo *a, void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void* dmxTestSameDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Used with <a class="el" href="dmxprop_8h.html#a4c53640b27c787d65539555cc3bf3c57">dmxPropertyIterate</a> to determine if screen <em>a</em> is the same as the screen <em>closure</em>. </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a97efbe7e0a872da9de0be49da214c210"></a><!-- doxytag: member="dmxcursor.c::dmxTryComputeScreenOrigins" ref="a97efbe7e0a872da9de0be49da214c210" args="(int *screensLeft)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxTryComputeScreenOrigins </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>screensLeft</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make one pass over all the screens and return the number updated. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414">PosAbove</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">PosAbsolute</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">PosBelow</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f">PosLeftOf</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44">PosNone</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc">PosRelative</a>, <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">PosRightOf</a>, <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a>, <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo::whereRefScreen</a>, <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a81c0223355350e6d897d4d7306381130"></a><!-- doxytag: member="dmxcursor.c::dmxUnrealizeCursor" ref="a81c0223355350e6d897d4d7306381130" args="(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxUnrealizeCursor </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af80076061e55521b62a7cfd8e66bf3e6"></a><!-- doxytag: member="dmxcursor.c::dmxWarpCursor" ref="af80076061e55521b62a7cfd8e66bf3e6" args="(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxWarpCursor </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcursor_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a4d792c0cb9ce0c21787d3cd88d774fa6"></a><!-- doxytag: member="dmxcursor.c::dmxCursorDoMultiCursors" ref="a4d792c0cb9ce0c21787d3cd88d774fa6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a> = 1<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxCursorNoMulti()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf8d4857dd965073f62f10a53edcaa3"></a><!-- doxytag: member="dmxcursor.c::dmxPointerCursorFuncs" ref="aacf8d4857dd965073f62f10a53edcaa3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">miPointerScreenFuncRec <a class="el" href="dmxcursor_8h.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment">
+{
+ <a class="code" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen</a>,
+ <a class="code" href="dmxcursor_8c.html#a2d0757fa7119492da7fe26901dab8571">dmxCrossScreen</a>,
+ <a class="code" href="dmxcursor_8c.html#af80076061e55521b62a7cfd8e66bf3e6">dmxWarpCursor</a>,
+ NULL,
+ NULL,
+}
+</pre></div><p>Cursor functions for mi layer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> </dd>
+<dd>
+<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7bf2f59a6c5d381aea975cd78dd1f9dc"></a><!-- doxytag: member="dmxcursor.c::dmxPointerSpriteFuncs" ref="a7bf2f59a6c5d381aea975cd78dd1f9dc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">miPointerSpriteFuncRec <a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment">
+{
+ <a class="code" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor</a>,
+ <a class="code" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor</a>,
+ <a class="code" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor</a>,
+ <a class="code" href="dmxcursor_8c.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor</a>,
+ <a class="code" href="dmxcursor_8c.html#a214b710621ed0279d6321375f3512a87">dmxDeviceCursorInitialize</a>,
+ <a class="code" href="dmxcursor_8c.html#af291298e4f52875e45d7097a223a8c0b">dmxDeviceCursorCleanup</a>
+}
+</pre></div><p>Sprite functions for mi layer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> </dd>
+<dd>
+<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcursor_8h.html b/hw/dmx/doc/html/dmxcursor_8h.html
new file mode 100644
index 0000000..73bc766
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcursor_8h.html
@@ -0,0 +1,512 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcursor_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxcursor.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;mipointer.h&quot;</code><br/>
+</div>
+<p><a href="dmxcursor_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>(_pCursor, _pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a7ec081934a095ba159d03229e714cfd5">DMX_SET_CURSOR_PRIV</a>(_pCursor, _pScreen, v)&#160;&#160;&#160;dixSetPrivate(&amp;(_pCursor)-&gt;devPrivates, CursorScreenKey(_pScreen), v)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a78a877b8bee68809063112fb5286e2db">dmxCursorPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#ae93d2b5a8714fcf2714f03b6cdeadc07">dmxCursorPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxCursorNoMulti</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor</a> (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen</a> (int x, int y, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor</a> (ScreenPtr pScreen, CursorPtr pCursor)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">miPointerScreenFuncRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">miPointerSpriteFuncRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for cursor support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a>. </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a7ddaf12551bbbd8a23fa60c09cdd6218"></a><!-- doxytag: member="dmxcursor.h::DMX_GET_CURSOR_PRIV" ref="a7ddaf12551bbbd8a23fa60c09cdd6218" args="(_pCursor, _pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_CURSOR_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pCursor, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pScreen&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">((<a class="code" href="dmxcursor_8h.html#ae93d2b5a8714fcf2714f03b6cdeadc07">dmxCursorPrivPtr</a>) \
+ dixLookupPrivate(&amp;(_pCursor)-&gt;devPrivates, CursorScreenKey(_pScreen)))
+</pre></div>
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, and <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7ec081934a095ba159d03229e714cfd5"></a><!-- doxytag: member="dmxcursor.h::DMX_SET_CURSOR_PRIV" ref="a7ec081934a095ba159d03229e714cfd5" args="(_pCursor, _pScreen, v)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_SET_CURSOR_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pCursor, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pScreen, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">v&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dixSetPrivate(&amp;(_pCursor)-&gt;devPrivates, CursorScreenKey(_pScreen), v)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, and <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ae93d2b5a8714fcf2714f03b6cdeadc07"></a><!-- doxytag: member="dmxcursor.h::dmxCursorPrivPtr" ref="ae93d2b5a8714fcf2714f03b6cdeadc07" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> * <a class="el" href="struct__dmxCursorPriv.html">dmxCursorPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a78a877b8bee68809063112fb5286e2db"></a><!-- doxytag: member="dmxcursor.h::dmxCursorPrivRec" ref="a78a877b8bee68809063112fb5286e2db" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> <a class="el" href="struct__dmxCursorPriv.html">dmxCursorPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Cursor private area. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a84c92b801c5802879047e74401f62e94"></a><!-- doxytag: member="dmxcursor.h::dmxBECreateCursor" ref="a84c92b801c5802879047e74401f62e94" args="(ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECreateCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pCursor</em> on the back-end associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a>, <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, and <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0e94924bf5a69c2b26e9d0442befadd"></a><!-- doxytag: member="dmxcursor.h::dmxBEFreeCursor" ref="ae0e94924bf5a69c2b26e9d0442befadd" args="(ScreenPtr pScreen, CursorPtr pCursor)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeCursor </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CursorPtr&#160;</td>
+ <td class="paramname"><em>pCursor</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free <em>pCursor</em> on the back-end associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a>, <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">DMX_GET_CURSOR_PRIV</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, and <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a381bffb099457e7c26a2312cf968a6"></a><!-- doxytag: member="dmxcursor.h::dmxCheckCursor" ref="a6a381bffb099457e7c26a2312cf968a6" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCheckCursor </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called during reconfiguration to make sure the cursor is visible. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a>, <a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor()</a>, <a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a709e3d4a4e44e17fed3de1fcb0d42b20"></a><!-- doxytag: member="dmxcursor.h::dmxCursorNoMulti" ref="a709e3d4a4e44e17fed3de1fcb0d42b20" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCursorNoMulti </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn off support for displaying multiple cursors on overlapped back-end displays. See <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad67e1086ef62ecfa33549d74cd89a379"></a><!-- doxytag: member="dmxcursor.h::dmxHideCursor" ref="ad67e1086ef62ecfa33549d74cd89a379" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxHideCursor </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is used by the backend input routines to hide the cursor on a screen that is being used for relative input. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a> </dd></dl>
+
+<p>References <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af3fb4b2c2d3cc318c88fbc6658893360"></a><!-- doxytag: member="dmxcursor.h::dmxInitOrigins" ref="af3fb4b2c2d3cc318c88fbc6658893360" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitOrigins </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize screen origins (and relative position). This is called for each server generation. For dynamic reconfiguration, use <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a> instead. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a>, <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a77c74a33de88fae6cf0de8b755a5c411"></a><!-- doxytag: member="dmxcursor.h::dmxInitOverlap" ref="a77c74a33de88fae6cf0de8b755a5c411" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitOverlap </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Detects overlapping dmxScreens and creates circular lists. This uses an O(dmxNumScreens^2) algorithm, but dmxNumScreens is &lt; 100 and the computation only needs to be performed for every server generation or dynamic reconfiguration . </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="dmxcursor_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxcursor_8c.html#a28c6651bdff6f7fc01292548659a6eb4">dmxIterateOverlap()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxcursor_8c.html#a3beed7bb0f6999879936b2f47751d125">dmxTestSameDisplay()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a21820e2001f763e3cfc924a1d602bb62"></a><!-- doxytag: member="dmxcursor.h::dmxMoveCursor" ref="a21820e2001f763e3cfc924a1d602bb62" args="(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMoveCursor </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Move the cursor to coordinates (<em>x</em>, <em>y</em>)on <em>pScreen</em>. This function is usually called via <a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a>, except during reconfiguration when the cursor is repositioned to force an update on newley overlapping screens and on screens that no longer overlap.</p>
+<p>The coords (x,y) are in global coord space. We'll loop over the back-end screens and see if they contain the global coord. If so, call <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a> (XWarpPointer) to position the pointer on that screen. </p>
+
+<p>References <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a>, <a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">_DMXScreenInfo::cursorVisible</a>, <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxCursorDoMultiCursors</a>, <a class="el" href="dmxcursor_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>, <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor()</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, and <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adaf3455cdd3f54d22285e5a0fa99fddb"></a><!-- doxytag: member="dmxcursor.h::dmxOnScreen" ref="adaf3455cdd3f54d22285e5a0fa99fddb" args="(int x, int y, DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxOnScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns non-zero if the global <em>x</em>, <em>y</em> coordinate is on the screen window of the <em>dmxScreen</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9bdb6eff5f7f86fd071091c5a55cee7c"></a><!-- doxytag: member="dmxcursor.h::dmxReInitOrigins" ref="a9bdb6eff5f7f86fd071091c5a55cee7c" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxReInitOrigins </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Recompute origin information in the <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a> list. This is called from <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins</a>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, and <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="aacf8d4857dd965073f62f10a53edcaa3"></a><!-- doxytag: member="dmxcursor.h::dmxPointerCursorFuncs" ref="aacf8d4857dd965073f62f10a53edcaa3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">miPointerScreenFuncRec <a class="el" href="dmxcursor_8h.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Cursor functions for mi layer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> </dd>
+<dd>
+<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7bf2f59a6c5d381aea975cd78dd1f9dc"></a><!-- doxytag: member="dmxcursor.h::dmxPointerSpriteFuncs" ref="a7bf2f59a6c5d381aea975cd78dd1f9dc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">miPointerSpriteFuncRec <a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sprite functions for mi layer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a> </dd>
+<dd>
+<a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcursor_8h.html">dmxcursor.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxcursor_8h_source.html b/hw/dmx/doc/html/dmxcursor_8h_source.html
new file mode 100644
index 0000000..1e87bb2
--- /dev/null
+++ b/hw/dmx/doc/html/dmxcursor_8h_source.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxcursor_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxcursor.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxcursor_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * David H. Dawes &lt;dawes@xfree86.org&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00032"></a>00032 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035
+<a name="l00039"></a>00039 <span class="preprocessor">#ifndef DMXCURSOR_H</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define DMXCURSOR_H</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include &quot;mipointer.h&quot;</span>
+<a name="l00043"></a>00043
+<a name="l00045"></a><a class="code" href="struct__dmxCursorPriv.html">00045</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> {
+<a name="l00046"></a><a class="code" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">00046</a> Cursor <a class="code" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">cursor</a>;
+<a name="l00047"></a>00047 } <a class="code" href="dmxcursor_8h.html#a78a877b8bee68809063112fb5286e2db">dmxCursorPrivRec</a>, *<a class="code" href="dmxcursor_8h.html#ae93d2b5a8714fcf2714f03b6cdeadc07">dmxCursorPrivPtr</a>;
+<a name="l00048"></a>00048
+<a name="l00050"></a>00050 <span class="keyword">extern</span> miPointerScreenFuncRec <a class="code" href="dmxcursor_8c.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a>;
+<a name="l00052"></a>00052 <span class="keyword">extern</span> miPointerSpriteFuncRec <a class="code" href="dmxcursor_8c.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a>;
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins</a>(<span class="keywordtype">void</span>);
+<a name="l00055"></a>00055 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins</a>(<span class="keywordtype">void</span>);
+<a name="l00056"></a>00056 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap</a>(<span class="keywordtype">void</span>);
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxCursorNoMulti</a>(<span class="keywordtype">void</span>);
+<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor</a>(DeviceIntPtr pDev, ScreenPtr pScreen, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor</a>(<span class="keywordtype">void</span>);
+<a name="l00060"></a>00060 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00061"></a>00061 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxcursor_8c.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor</a>(ScreenPtr pScreen, CursorPtr pCursor);
+<a name="l00064"></a>00064 <span class="keyword">extern</span> Bool <a class="code" href="dmxcursor_8c.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor</a>(ScreenPtr pScreen, CursorPtr pCursor);
+<a name="l00065"></a>00065
+<a name="l00066"></a><a class="code" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">00066</a> <span class="preprocessor">#define DMX_GET_CURSOR_PRIV(_pCursor, _pScreen) ((dmxCursorPrivPtr) \</span>
+<a name="l00067"></a>00067 <span class="preprocessor"> dixLookupPrivate(&amp;(_pCursor)-&gt;devPrivates, CursorScreenKey(_pScreen)))</span>
+<a name="l00068"></a>00068 <span class="preprocessor"></span>
+<a name="l00069"></a><a class="code" href="dmxcursor_8h.html#a7ec081934a095ba159d03229e714cfd5">00069</a> <span class="preprocessor">#define DMX_SET_CURSOR_PRIV(_pCursor, _pScreen, v) \</span>
+<a name="l00070"></a>00070 <span class="preprocessor"> dixSetPrivate(&amp;(_pCursor)-&gt;devPrivates, CursorScreenKey(_pScreen), v)</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a>00072 <span class="preprocessor">#endif </span><span class="comment">/* DMXCURSOR_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxcursor_8h.html">dmxcursor.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdetach_8c.html b/hw/dmx/doc/html/dmxdetach_8c.html
new file mode 100644
index 0000000..9f2df0b
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdetach_8c.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdetach_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxdetach.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;dmxextension.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool reserveId)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide support and helper functions for input detach and attach. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="adcf530802f6d092e58a6db38efb0498c"></a><!-- doxytag: member="dmxdetach.c::dmxInputDetach" ref="adcf530802f6d092e58a6db38efb0498c" args="(DMXScreenInfo *dmxScreen, Bool reserveId)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputDetach </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>reserveId</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Search for input associated with <em>dmxScreen</em>, and detach. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, and <a class="el" href="dmxinputinit_8h.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdetach_8c.html">dmxdetach.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdpms_8c.html b/hw/dmx/doc/html/dmxdpms_8c.html
new file mode 100644
index 0000000..ddaef18
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdpms_8c.html
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdpms_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxdpms.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxdpms_8h_source.html">dmxdpms.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+<code>#include &lt;X11/extensions/dpms.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8c.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8c.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8c.html#aa996aaa17a07afb7fc613142599505c5">dmxDPMSWakeup</a> (void)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8c.html#a7bb06fe7454077ecfbfae62ac9cba1e0">dpmsGeneration</a> = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8c.html#a2d45a784084cd5cdef646499d5298254">dpmsSupported</a> = TRUE</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provides DPMS support and unifies all DPMS and other screen-saver support in one file. If -dpms is given on the command line, or the Xdmx server is not compiled with DPMS support, then the DPMS extension does not work for clients, but DPMS on the backends is still disables (and restored at Xdmx server shutdown time). </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="afd14a12acf152c0a881144aff85e584a"></a><!-- doxytag: member="dmxdpms.c::_dmxDPMSInit" ref="afd14a12acf152c0a881144aff85e584a" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void _dmxDPMSInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">_DMXScreenInfo::dpmsCapable</a>, <a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">_DMXScreenInfo::dpmsEnabled</a>, <a class="el" href="dmxdpms_8c.html#a7bb06fe7454077ecfbfae62ac9cba1e0">dpmsGeneration</a>, <a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">_DMXScreenInfo::dpmsOff</a>, <a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">_DMXScreenInfo::dpmsStandby</a>, <a class="el" href="dmxdpms_8c.html#a2d45a784084cd5cdef646499d5298254">dpmsSupported</a>, and <a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">_DMXScreenInfo::dpmsSuspend</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c93ecabb9ee83027c79f878e143a472"></a><!-- doxytag: member="dmxdpms.c::dmxDPMSInit" ref="a6c93ecabb9ee83027c79f878e143a472" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDPMSInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize DPMS support. We save the current settings and turn off DPMS. The settings are restored in <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm</a>. </p>
+
+<p>References <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo::savedTimeout</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a54288399c9ed5293b83d7d508ff2465c"></a><!-- doxytag: member="dmxdpms.c::dmxDPMSTerm" ref="a54288399c9ed5293b83d7d508ff2465c" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDPMSTerm </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Terminate DPMS support on <em>dmxScreen</em>. We restore the settings saved in <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit</a>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">_DMXScreenInfo::dpmsCapable</a>, <a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">_DMXScreenInfo::dpmsEnabled</a>, <a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">_DMXScreenInfo::dpmsOff</a>, <a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">_DMXScreenInfo::dpmsStandby</a>, <a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">_DMXScreenInfo::dpmsSuspend</a>, and <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo::savedTimeout</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa996aaa17a07afb7fc613142599505c5"></a><!-- doxytag: member="dmxdpms.c::dmxDPMSWakeup" ref="aa996aaa17a07afb7fc613142599505c5" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDPMSWakeup </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called when activity is detected so that DPMS power-saving mode can be deactivated. </p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a7bb06fe7454077ecfbfae62ac9cba1e0"></a><!-- doxytag: member="dmxdpms.c::dpmsGeneration" ref="a7bb06fe7454077ecfbfae62ac9cba1e0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="dmxdpms_8c.html#a7bb06fe7454077ecfbfae62ac9cba1e0">dpmsGeneration</a> = 0<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d45a784084cd5cdef646499d5298254"></a><!-- doxytag: member="dmxdpms.c::dpmsSupported" ref="a2d45a784084cd5cdef646499d5298254" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxdpms_8c.html#a2d45a784084cd5cdef646499d5298254">dpmsSupported</a> = TRUE<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdpms_8c.html">dmxdpms.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdpms_8h.html b/hw/dmx/doc/html/dmxdpms_8h.html
new file mode 100644
index 0000000..74203f2
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdpms_8h.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdpms_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxdpms.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxdpms_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdpms_8h.html#aa996aaa17a07afb7fc613142599505c5">dmxDPMSWakeup</a> (void)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for DPMS extension support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxdpms_8c.html">dmxdpms.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6c93ecabb9ee83027c79f878e143a472"></a><!-- doxytag: member="dmxdpms.h::dmxDPMSInit" ref="a6c93ecabb9ee83027c79f878e143a472" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDPMSInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize DPMS support. We save the current settings and turn off DPMS. The settings are restored in <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm</a>. </p>
+
+<p>References <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo::savedTimeout</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a54288399c9ed5293b83d7d508ff2465c"></a><!-- doxytag: member="dmxdpms.h::dmxDPMSTerm" ref="a54288399c9ed5293b83d7d508ff2465c" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDPMSTerm </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Terminate DPMS support on <em>dmxScreen</em>. We restore the settings saved in <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit</a>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">_DMXScreenInfo::dpmsCapable</a>, <a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">_DMXScreenInfo::dpmsEnabled</a>, <a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">_DMXScreenInfo::dpmsOff</a>, <a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">_DMXScreenInfo::dpmsStandby</a>, <a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">_DMXScreenInfo::dpmsSuspend</a>, and <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo::savedTimeout</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa996aaa17a07afb7fc613142599505c5"></a><!-- doxytag: member="dmxdpms.h::dmxDPMSWakeup" ref="aa996aaa17a07afb7fc613142599505c5" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDPMSWakeup </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called when activity is detected so that DPMS power-saving mode can be deactivated. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdpms_8h.html">dmxdpms.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdpms_8h_source.html b/hw/dmx/doc/html/dmxdpms_8h_source.html
new file mode 100644
index 0000000..554f062
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdpms_8h_source.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdpms_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxdpms.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxdpms_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2003 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Author:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXDPMS_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXDPMS_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdpms_8c.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdpms_8c.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdpms_8c.html#aa996aaa17a07afb7fc613142599505c5">dmxDPMSWakeup</a>(<span class="keywordtype">void</span>); <span class="comment">/* Call when input is processed */</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdpms_8h.html">dmxdpms.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdummy_8c.html b/hw/dmx/doc/html/dmxdummy_8c.html
new file mode 100644
index 0000000..1054e12
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdummy_8c.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdummy_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxdummy.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;dmx.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxdummy_8h_source.html">dmxdummy.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdummy_8c.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdummy_8c.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide mouse and keyboard that are sufficient for starting the X server, but that don't actually provide any events. This is useful for testing. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a31bf72cac5b5327393423d49a437fc8b"></a><!-- doxytag: member="dmxdummy.c::dmxDummyKbdGetInfo" ref="a31bf72cac5b5327393423d49a437fc8b" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDummyKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return information about the dummy keyboard device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. The keyboard is set up to have 1 valid key code that is <em>NoSymbol</em> </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d9cc243adf2eb5869b9ebcca9125bf4"></a><!-- doxytag: member="dmxdummy.c::dmxDummyMouGetInfo" ref="a0d9cc243adf2eb5869b9ebcca9125bf4" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDummyMouGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return information about the dummy mouse device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. They mouse has 3 buttons and two axes. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdummy_8c.html">dmxdummy.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdummy_8h.html b/hw/dmx/doc/html/dmxdummy_8h.html
new file mode 100644
index 0000000..690a587
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdummy_8h.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdummy_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxdummy.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxdummy_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to dummy input device support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxdummy_8c.html">dmxdummy.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a31bf72cac5b5327393423d49a437fc8b"></a><!-- doxytag: member="dmxdummy.h::dmxDummyKbdGetInfo" ref="a31bf72cac5b5327393423d49a437fc8b" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDummyKbdGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return information about the dummy keyboard device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. The keyboard is set up to have 1 valid key code that is <em>NoSymbol</em> </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d9cc243adf2eb5869b9ebcca9125bf4"></a><!-- doxytag: member="dmxdummy.h::dmxDummyMouGetInfo" ref="a0d9cc243adf2eb5869b9ebcca9125bf4" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDummyMouGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return information about the dummy mouse device specified in <em>pDev</em> into the structure pointed to by <em>info</em>. They mouse has 3 buttons and two axes. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdummy_8h.html">dmxdummy.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxdummy_8h_source.html b/hw/dmx/doc/html/dmxdummy_8h_source.html
new file mode 100644
index 0000000..6bf6d24
--- /dev/null
+++ b/hw/dmx/doc/html/dmxdummy_8h_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxdummy_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxdummy.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxdummy_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXDUMMY_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXDUMMY_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdummy_8c.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxdummy_8c.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxdummy_8h.html">dmxdummy.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxevents_8c.html b/hw/dmx/doc/html/dmxevents_8c.html
new file mode 100644
index 0000000..3876d26
--- /dev/null
+++ b/hw/dmx/doc/html/dmxevents_8c.html
@@ -0,0 +1,1187 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxevents_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxevents.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxevents_8h_source.html">dmxevents.h</a>&quot;</code><br/>
+<code>#include &quot;dmxcb.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcommon_8h_source.html">dmxcommon.h</a>&quot;</code><br/>
+<code>#include &quot;dmxcursor.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxmotion_8h_source.html">dmxmotion.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsigio_8h_source.html">dmxsigio.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxmap_8h_source.html">dmxmap.h</a>&quot;</code><br/>
+<code>#include &lt;X11/keysym.h&gt;</code><br/>
+<code>#include &quot;opaque.h&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;inpututils.h&quot;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;mi.h&quot;</code><br/>
+<code>#include &quot;exglobals.h&quot;</code><br/>
+<code>#include &quot;xkbsrv.h&quot;</code><br/>
+<code>#include &quot;XIstubs.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a21de6bc79e2465ef06f9bc1c3fb8071f">DMX_EVENTS_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#adf6865b0bc7ad370c94e3b8682262c13">DMXDBG0</a>(f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a302a2c9f84249eee79404eb601d085ab">DMXDBG1</a>(f, a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>(f, a, b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>(f, a, b, c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>(f, a, b, c, d)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>(f, a, b, c, d, e)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>(f, a, b, c, d, e, g)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">DMXDBG7</a>(f, a, b, c, d, e, g, h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>&#160;&#160;&#160;32</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a4424526939b87a780233ad69fdf26c62">EXTRACT_VALUATORS</a>(ke, valuators)</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int type, KeySym keySym)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen</a> (int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">enqueueMotion</a> (DevicePtr pDev, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a> (DevicePtr pDev, int x, int y, int delta, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int *v, int firstAxis, int axesCount, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, XEvent *e, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxGetButtonMapping</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int button)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition</a> (int *x, int *y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a344419a01be02621ec99942c6cfd45ea">dmxInvalidateGlobalPosition</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#ae08f1801d0215396a7f39bd083ddca11">dmxMotion</a> (DevicePtr pDev, int *v, int firstAxes, int axesCount, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static KeySym&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, KeyCode keyCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static KeyCode&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, KeySym keySym, int tryFirst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup</a> (DevicePtr pDev, int detail, KeySym keySym)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue</a> (DevicePtr pDev, int type, int detail, KeySym keySym, XEvent *e, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys</a> (DevicePtr pDev, KeySym keySym)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxGlobalInvalid</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide support and helper functions for enqueing events received by the low-level input drivers. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a21de6bc79e2465ef06f9bc1c3fb8071f"></a><!-- doxytag: member="dmxevents.c::DMX_EVENTS_DEBUG" ref="a21de6bc79e2465ef06f9bc1c3fb8071f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_EVENTS_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a144e2f1a618a0d14e2c9ce4fda50104a"></a><!-- doxytag: member="dmxevents.c::DMX_MAX_AXES" ref="a144e2f1a618a0d14e2c9ce4fda50104a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAX_AXES&#160;&#160;&#160;32</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adf6865b0bc7ad370c94e3b8682262c13"></a><!-- doxytag: member="dmxevents.c::DMXDBG0" ref="adf6865b0bc7ad370c94e3b8682262c13" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a302a2c9f84249eee79404eb601d085ab"></a><!-- doxytag: member="dmxevents.c::DMXDBG1" ref="a302a2c9f84249eee79404eb601d085ab" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1056d63499cee76ebe297c19637f2b79"></a><!-- doxytag: member="dmxevents.c::DMXDBG2" ref="a1056d63499cee76ebe297c19637f2b79" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, and <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c6714b899194081b94edb722ca1c4bc"></a><!-- doxytag: member="dmxevents.c::DMXDBG3" ref="a6c6714b899194081b94edb722ca1c4bc" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, and <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ffd07ee80777c394a6ff32d1021347d"></a><!-- doxytag: member="dmxevents.c::DMXDBG4" ref="a8ffd07ee80777c394a6ff32d1021347d" args="(f, a, b, c, d)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG4</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a753eef37715b6379d7d65e34a23d2e03"></a><!-- doxytag: member="dmxevents.c::DMXDBG5" ref="a753eef37715b6379d7d65e34a23d2e03" args="(f, a, b, c, d, e)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG5</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af703e1a00a515e2507f7d2a354429a24"></a><!-- doxytag: member="dmxevents.c::DMXDBG6" ref="af703e1a00a515e2507f7d2a354429a24" args="(f, a, b, c, d, e, g)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG6</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab45c7f6cc47b2c786215ca0276d37d91"></a><!-- doxytag: member="dmxevents.c::DMXDBG7" ref="ab45c7f6cc47b2c786215ca0276d37d91" args="(f, a, b, c, d, e, g, h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMXDBG7</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">g, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">h&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4424526939b87a780233ad69fdf26c62"></a><!-- doxytag: member="dmxevents.c::EXTRACT_VALUATORS" ref="a4424526939b87a780233ad69fdf26c62" args="(ke, valuators)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define EXTRACT_VALUATORS</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">ke, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">valuators&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">valuators[0] = ke-&gt;axis_data[0]; \
+ valuators[1] = ke-&gt;axis_data[1]; \
+ valuators[2] = ke-&gt;axis_data[2]; \
+ valuators[3] = ke-&gt;axis_data[3]; \
+ valuators[4] = ke-&gt;axis_data[4]; \
+ valuators[5] = ke-&gt;axis_data[5]; \
+</pre></div>
+<p>Referenced by <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a7a2de6e9697964a96939e03501fd5d29"></a><!-- doxytag: member="dmxevents.c::dmxApplyFunctions" ref="a7a2de6e9697964a96939e03501fd5d29" args="(DMXInputInfo *dmxInput, DMXFunctionType f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxApplyFunctions </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>&#160;</td>
+ <td class="paramname"><em>f</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">_DMXLocalInputInfo::functions</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a382acebe1e5e976d7edc31fc27fcdd6f"></a><!-- doxytag: member="dmxevents.c::dmxCheckFunctionKeys" ref="a382acebe1e5e976d7edc31fc27fcdd6f" args="(DMXLocalInputInfoPtr dmxLocal, int type, KeySym keySym)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxCheckFunctionKeys </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">DMX_FUNCTION_FINE</a>, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">DMX_FUNCTION_GRAB</a>, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>, <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions()</a>, <a class="el" href="dmxevents_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a082f21151ec3d66b75d4613a3612c755"></a><!-- doxytag: member="dmxevents.c::dmxCheckSpecialKeys" ref="a082f21151ec3d66b75d4613a3612c755" args="(DevicePtr pDev, KeySym keySym)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCheckSpecialKeys </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>A pointer to this routine is passed to low-level input drivers so that all special keychecking is unified to this file. This function returns 0 if no special keys have been pressed. If the user has requested termination of the DMX server, -1 is returned. If the user has requested a switch to a VT, then the (1-based) number of that VT is returned. </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">GETDMXINPUTFROMPDEV</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adf2928cf693dab61adafad503e81d2dc"></a><!-- doxytag: member="dmxevents.c::dmxCoreMotion" ref="adf2928cf693dab61adafad503e81d2dc" args="(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCoreMotion </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>delta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxevents_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxevents_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxevents_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxGlobalInvalid</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a>, <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock()</a>, <a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock()</a>, <a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">enqueueMotion()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">_DMXLocalInputInfo::update_position</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac678be4d489b749fea88a8f0e9045499"></a><!-- doxytag: member="dmxevents.c::dmxEnqueue" ref="ac678be4d489b749fea88a8f0e9045499" args="(DevicePtr pDev, int type, int detail, KeySym keySym, XEvent *e, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxEnqueue </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>detail</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>e</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enqueue an event from the <em>pDev</em> device with the specified <em>type</em> and <em>detail</em>. If the event is a KeyPress or KeyRelease event, then the <em>keySym</em> is also specified.</p>
+<p>FIXME: make the code do what the comment says, or remove this comment. If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to dmxeqEnqueue(). </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxGetButtonMapping()</a>, <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym()</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">GETDMXINPUTFROMPDEV</a>, <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a>, and <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8463e76279fff9479a552b69c4754273"></a><!-- doxytag: member="dmxevents.c::dmxExtMotion" ref="a8463e76279fff9479a552b69c4754273" args="(DMXLocalInputInfoPtr dmxLocal, int *v, int firstAxis, int axesCount, DMXMotionType type, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxExtMotion </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>firstAxis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axesCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">DeviceMotionNotify</a>, <a class="el" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">DeviceValuator</a>, <a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock()</a>, <a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a65e0e7a4d6928067ba63183c7ddbd03c">_DMXLocalInputInfo::lastX</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">_DMXLocalInputInfo::lastY</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">_DMXLocalInputInfo::update_position</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8bb7b5687d93b86df921eef6b7c28052"></a><!-- doxytag: member="dmxevents.c::dmxFindFirstScreen" ref="a8bb7b5687d93b86df921eef6b7c28052" args="(int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxFindFirstScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, and <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a76dff4df3c759055dfb6b74423868e9b"></a><!-- doxytag: member="dmxevents.c::dmxFixup" ref="a76dff4df3c759055dfb6b74423868e9b" args="(DevicePtr pDev, int detail, KeySym keySym)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxFixup </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>detail</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym()</a>, <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode()</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8d5c0981946c42f016d4e839eb358e1"></a><!-- doxytag: member="dmxevents.c::dmxGetButtonMapping" ref="ac8d5c0981946c42f016d4e839eb358e1" args="(DMXLocalInputInfoPtr dmxLocal, int button)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxGetButtonMapping </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>button</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cb75edbb0cabbfd89b40309907bdee3"></a><!-- doxytag: member="dmxevents.c::dmxGetGlobalPosition" ref="a0cb75edbb0cabbfd89b40309907bdee3" args="(int *x, int *y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetGlobalPosition </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return DMX's notion of the pointer position in the global coordinate space. </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a>, and <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a344419a01be02621ec99942c6cfd45ea"></a><!-- doxytag: member="dmxevents.c::dmxInvalidateGlobalPosition" ref="a344419a01be02621ec99942c6cfd45ea" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInvalidateGlobalPosition </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Invalidate the global position for <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a>. </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxGlobalInvalid</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7e514e6fbb9cec592d987dd82cc5905b"></a><!-- doxytag: member="dmxevents.c::dmxKeyCodeToKeySym" ref="a7e514e6fbb9cec592d987dd82cc5905b" args="(DMXLocalInputInfoPtr dmxLocal, KeyCode keyCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static KeySym dmxKeyCodeToKeySym </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeyCode&#160;</td>
+ <td class="paramname"><em>keyCode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, and <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a074632ff8623562fa5c99b19a629eb07"></a><!-- doxytag: member="dmxevents.c::dmxKeySymToKeyCode" ref="a074632ff8623562fa5c99b19a629eb07" args="(DMXLocalInputInfoPtr dmxLocal, KeySym keySym, int tryFirst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static KeyCode dmxKeySymToKeyCode </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>tryFirst</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxevents_8c.html#a6c6714b899194081b94edb722ca1c4bc">DMXDBG3</a>, <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym()</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae08f1801d0215396a7f39bd083ddca11"></a><!-- doxytag: member="dmxevents.c::dmxMotion" ref="ae08f1801d0215396a7f39bd083ddca11" args="(DevicePtr pDev, int *v, int firstAxes, int axesCount, DMXMotionType type, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMotion </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>firstAxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axesCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enqueue a motion event for <em>pDev</em>. The <em>v</em> vector has length <em>axesCount</em>, and contains values for each of the axes, starting at <em>firstAxes</em>.</p>
+<p>The <em>type</em> of the motion may be <em>DMX_RELATIVE</em>, <em>DMX_ABSOLUTE</em>, or <em>DMX_ABSOLUTE_CONFINED</em> (in the latter case, the pointer will not be allowed to move outside the global boundaires).</p>
+<p>If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to <em><a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">enqueueMotion()</a></em>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">DMX_ABSOLUTE_CONFINED</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a>, <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a>, and <a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0083a2b1547708473cbc75ebf0006ae"></a><!-- doxytag: member="dmxevents.c::dmxTranslateAndEnqueueExtEvent" ref="ae0083a2b1547708473cbc75ebf0006ae" args="(DMXLocalInputInfoPtr dmxLocal, XEvent *e, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxTranslateAndEnqueueExtEvent </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>e</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">ChangeDeviceNotify</a>, <a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">DeviceFocusIn</a>, <a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">DeviceFocusOut</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">DeviceMappingNotify</a>, <a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">DeviceStateNotify</a>, <a class="el" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">DeviceValuator</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxmap_8c.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>, <a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock()</a>, <a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="dmxevents_8c.html#a4424526939b87a780233ad69fdf26c62">EXTRACT_VALUATORS</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo::inputIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a>, <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad423328e9c289737154464bd6830a1ad"></a><!-- doxytag: member="dmxevents.c::enqueueMotion" ref="ad423328e9c289737154464bd6830a1ad" args="(DevicePtr pDev, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void enqueueMotion </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enqueue a motion event. </p>
+
+<p>References <a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a1ae34b930e721372a403fbbe2111a221"></a><!-- doxytag: member="dmxevents.c::dmxGlobalInvalid" ref="a1ae34b930e721372a403fbbe2111a221" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxGlobalInvalid</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, and <a class="el" href="dmxevents_8h.html#a344419a01be02621ec99942c6cfd45ea">dmxInvalidateGlobalPosition()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6f6d88e8d30622451b8e9fe4ba22c811"></a><!-- doxytag: member="dmxevents.c::dmxGlobalX" ref="a6f6d88e8d30622451b8e9fe4ba22c811" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, and <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abbf8898981b5b2ac573e68e1a9386f08"></a><!-- doxytag: member="dmxevents.c::dmxGlobalY" ref="abbf8898981b5b2ac573e68e1a9386f08" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition()</a>, and <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxevents_8c.html">dmxevents.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxevents_8h.html b/hw/dmx/doc/html/dmxevents_8h.html
new file mode 100644
index 0000000..a84bb44
--- /dev/null
+++ b/hw/dmx/doc/html/dmxevents_8h.html
@@ -0,0 +1,243 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxevents_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxevents.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxevents_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion</a> (DevicePtr pDev, int *v, int firstAxis, int axesCount, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue</a> (DevicePtr pDev, int type, int detail, KeySym keySym, XEvent *e, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys</a> (DevicePtr pDev, KeySym keySym)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxevents_8h.html#a344419a01be02621ec99942c6cfd45ea">dmxInvalidateGlobalPosition</a> (void)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to event processing functions. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxevents_8h.html">dmxevents.h</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a082f21151ec3d66b75d4613a3612c755"></a><!-- doxytag: member="dmxevents.h::dmxCheckSpecialKeys" ref="a082f21151ec3d66b75d4613a3612c755" args="(DevicePtr pDev, KeySym keySym)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCheckSpecialKeys </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>A pointer to this routine is passed to low-level input drivers so that all special keychecking is unified to this file. This function returns 0 if no special keys have been pressed. If the user has requested termination of the DMX server, -1 is returned. If the user has requested a switch to a VT, then the (1-based) number of that VT is returned. </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">GETDMXINPUTFROMPDEV</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac678be4d489b749fea88a8f0e9045499"></a><!-- doxytag: member="dmxevents.h::dmxEnqueue" ref="ac678be4d489b749fea88a8f0e9045499" args="(DevicePtr pDev, int type, int detail, KeySym keySym, XEvent *e, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxEnqueue </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>detail</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySym&#160;</td>
+ <td class="paramname"><em>keySym</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>e</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enqueue an event from the <em>pDev</em> device with the specified <em>type</em> and <em>detail</em>. If the event is a KeyPress or KeyRelease event, then the <em>keySym</em> is also specified.</p>
+<p>FIXME: make the code do what the comment says, or remove this comment. If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to dmxeqEnqueue(). </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">DMXDBG2</a>, <a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxGetButtonMapping()</a>, <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym()</a>, <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">GETDMXINPUTFROMPDEV</a>, <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">ProximityIn</a>, and <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">ProximityOut</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a344419a01be02621ec99942c6cfd45ea"></a><!-- doxytag: member="dmxevents.h::dmxInvalidateGlobalPosition" ref="a344419a01be02621ec99942c6cfd45ea" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInvalidateGlobalPosition </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Invalidate the global position for <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a>. </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxGlobalInvalid</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac96a9f0e7f2a31881224b4a8e620239a"></a><!-- doxytag: member="dmxevents.h::dmxMotion" ref="ac96a9f0e7f2a31881224b4a8e620239a" args="(DevicePtr pDev, int *v, int firstAxis, int axesCount, DMXMotionType type, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMotion </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>firstAxes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axesCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enqueue a motion event for <em>pDev</em>. The <em>v</em> vector has length <em>axesCount</em>, and contains values for each of the axes, starting at <em>firstAxes</em>.</p>
+<p>The <em>type</em> of the motion may be <em>DMX_RELATIVE</em>, <em>DMX_ABSOLUTE</em>, or <em>DMX_ABSOLUTE_CONFINED</em> (in the latter case, the pointer will not be allowed to move outside the global boundaires).</p>
+<p>If <em>block</em> is set to <em>DMX_BLOCK</em>, then the SIGIO handler will be blocked around calls to <em><a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">enqueueMotion()</a></em>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">DMX_ABSOLUTE_CONFINED</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a>, <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a>, and <a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">GETDMXLOCALFROMPDEV</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxevents_8h.html">dmxevents.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxevents_8h_source.html b/hw/dmx/doc/html/dmxevents_8h_source.html
new file mode 100644
index 0000000..e4a0a05
--- /dev/null
+++ b/hw/dmx/doc/html/dmxevents_8h_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxevents_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxevents.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxevents_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXEVENTS_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXEVENTS_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxevents_8c.html#ae08f1801d0215396a7f39bd083ddca11">dmxMotion</a>(DevicePtr pDev, <span class="keywordtype">int</span> *v, <span class="keywordtype">int</span> firstAxis, <span class="keywordtype">int</span> axesCount,
+<a name="l00041"></a>00041 <a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type, <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxevents_8c.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue</a>(DevicePtr pDev, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> detail, KeySym keySym,
+<a name="l00043"></a>00043 XEvent *e, <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxevents_8c.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys</a>(DevicePtr pDev, KeySym keySym);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxevents_8c.html#a344419a01be02621ec99942c6cfd45ea">dmxInvalidateGlobalPosition</a>(<span class="keywordtype">void</span>);
+<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxevents_8h.html">dmxevents.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxextension_8c.html b/hw/dmx/doc/html/dmxextension_8c.html
new file mode 100644
index 0000000..7946c42
--- /dev/null
+++ b/hw/dmx/doc/html/dmxextension_8c.html
@@ -0,0 +1,865 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxextension_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxextension.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdlib.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinit_8h_source.html">dmxinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcb_8h_source.html">dmxcb.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcursor_8h_source.html">dmxcursor.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgc_8h_source.html">dmxgc.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxfont_8h_source.html">dmxfont.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcmap_8h_source.html">dmxcmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxscrinit_8h_source.html">dmxscrinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">input/dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &lt;X11/extensions/dmxproto.h&gt;</code><br/>
+<code>#include &quot;cursorstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes</a> (int physical, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes</a> (WindowPtr pWindow, <a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes</a> (<a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes</a> (int deviceId, <a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a6b0b38eb49c6be097a59dbcdd6dacb51">dmxAddInput</a> (<a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a> attr, int *id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a6125541332383040aa07fa1ef310d38d">dmxRemoveInput</a> (int id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources</a> (ScreenPtr pScreen, int x, int y, int w, int h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxBECreateScratchGCs</a> (int scrnNum)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources</a> (pointer value, XID id, RESTYPE type, pointer n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree</a> (int idx)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#afa9f0ee11cd56a66fe5925a283c18188">dmxForceExposures</a> (int idx)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *new, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *old)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict</a> (pointer value, XID id, pointer n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph</a> (pointer value, XID id, pointer n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen</a> (int idx, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources</a> (pointer value, XID id, RESTYPE type, pointer n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxBEDestroyScratchGCs</a> (int scrnNum)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree</a> (int idx)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen</a> (int idx)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">FontPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">defaultFont</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides the only interface to the X server extension support in programs/Xserver/Xext. Those programs should only include dmxext.h </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6b0b38eb49c6be097a59dbcdd6dacb51"></a><!-- doxytag: member="dmxextension.c::dmxAddInput" ref="a6b0b38eb49c6be097a59dbcdd6dacb51" args="(DMXInputAttributesPtr attr, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxAddInput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Add an input with the specified attributes. If the input is added, the physical id is returned in <em>deviceId</em>. </p>
+
+<p>References <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxinputinit_8c.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8c.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a>, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a>, <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a>, and <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2bf59b5de92ff76381543139f7b2c8fa"></a><!-- doxytag: member="dmxextension.c::dmxAdjustCursorBoundaries" ref="a2bf59b5de92ff76381543139f7b2c8fa" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxAdjustCursorBoundaries </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reinitialized the cursor boundaries. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">DMX_NO_RECOMPUTE_BOUNDING_BOX</a>, <a class="el" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcb_8c.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxcb_8c.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxcursor_8c.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinput_8h.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit()</a>, <a class="el" href="dmxinput_8h.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, and <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3962840388f9bcf96fb17294a413d8cb"></a><!-- doxytag: member="dmxextension.c::dmxAttachScreen" ref="a3962840388f9bcf96fb17294a413d8cb" args="(int idx, DMXScreenAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxAttachScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reattach previously detached back-end screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">defaultFont</a>, <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a>, <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxBECreateScratchGCs()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>, <a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxConfigureScreenWindows()</a>, <a class="el" href="dmxextension_8c.html#afa9f0ee11cd56a66fe5925a283c18188">dmxForceExposures()</a>, <a class="el" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>, <a class="el" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, <a class="el" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ce8486d2aa17ed2ca5375b127b6189f"></a><!-- doxytag: member="dmxextension.c::dmxBECreateResources" ref="a6ce8486d2aa17ed2ca5375b127b6189f" args="(pointer value, XID id, RESTYPE type, pointer n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBECreateResources </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XID&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RESTYPE&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create resources on the back-end server. This function is called from <a class="el" href="dmxextension_8c.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a> via the dix layer's FindAllResources function. It walks all resources, compares them to the screen number passed in as <em>n</em> and calls the appropriate DMX function to create the associated resource on the back-end server. </p>
+
+<p>References <a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">defaultFont</a>, <a class="el" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8c.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, and <a class="el" href="dmxgc_8c.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a335fb276d4398515aa93ed1b3652dfd5"></a><!-- doxytag: member="dmxextension.c::dmxBECreateScratchGCs" ref="a335fb276d4398515aa93ed1b3652dfd5" args="(int scrnNum)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBECreateScratchGCs </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnNum</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the scratch GCs per depth. </p>
+
+<p>References <a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3d9d96382bf12f21023b8983412073ac"></a><!-- doxytag: member="dmxextension.c::dmxBECreateWindowTree" ref="a3d9d96382bf12f21023b8983412073ac" args="(int idx)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBECreateWindowTree </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create window hierachy on back-end server. The window tree is created in a special order (bottom most subwindow first) so that the <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a> function does not need to recursively call itself to create each window's parents. This is required so that we have the opportunity to create each window's border and background pixmaps (where appropriate) before the window is created. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv::cmap</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, <a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">_DMXScreenInfo::rootWin</a>, <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv::visual</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf05373ce6271205b865799a1c2a588f"></a><!-- doxytag: member="dmxextension.c::dmxBEDestroyResources" ref="aaf05373ce6271205b865799a1c2a588f" args="(pointer value, XID id, RESTYPE type, pointer n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBEDestroyResources </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XID&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RESTYPE&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy resources on the back-end server. This function is called from <a class="el" href="dmxextension_8c.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a> via the dix layer's FindAllResources function. It walks all resources, compares them to the screen number passed in as <em>n</em> and calls the appropriate DMX function to free the associated resource on the back-end server. </p>
+
+<p>References <a class="el" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxcursor_8c.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>, <a class="el" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, <a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, and <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada568e54996488fca996405eb68c1b8b"></a><!-- doxytag: member="dmxextension.c::dmxBEDestroyScratchGCs" ref="ada568e54996488fca996405eb68c1b8b" args="(int scrnNum)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBEDestroyScratchGCs </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>scrnNum</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the scratch GCs that are created per depth. </p>
+
+<p>References <a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a30620fb306cff3ee44d6de43aa97346a"></a><!-- doxytag: member="dmxextension.c::dmxBEDestroyWindowTree" ref="a30620fb306cff3ee44d6de43aa97346a" args="(int idx)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBEDestroyWindowTree </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy window hierachy on back-end server. To ensure that all XDestroyWindow() calls succeed, they must be performed in a bottom up order so that windows are not destroyed before their children. XDestroyWindow(), which is called from <a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, will destroy a window as well as all of it's children. </p>
+
+<p>References <a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, and <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c94ba784e540d8a5fba70373f1167f4"></a><!-- doxytag: member="dmxextension.c::dmxBERestorePixmap" ref="a8c94ba784e540d8a5fba70373f1167f4" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBERestorePixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Restore the pixmap image either from another screen or from an image that was saved when the screen was previously detached. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>, and <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, and <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8b7fceafa86db60728ce58fd33f2a646"></a><!-- doxytag: member="dmxextension.c::dmxBERestoreRenderGlyph" ref="a8b7fceafa86db60728ce58fd33f2a646" args="(pointer value, XID id, pointer n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBERestoreRenderGlyph </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XID&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Restore Render's glyphs </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8c.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>, and <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a83d7548ed24086d9fb08866ec94735e2"></a><!-- doxytag: member="dmxextension.c::dmxBERestoreRenderPict" ref="a83d7548ed24086d9fb08866ec94735e2" args="(pointer value, XID id, pointer n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBERestoreRenderPict </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XID&#160;</td>
+ <td class="paramname"><em>id</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Restore Render's picture </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture()</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, and <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3dee225e6bc7fa7f8684ebc5b4f96884"></a><!-- doxytag: member="dmxextension.c::dmxBESavePixmap" ref="a3dee225e6bc7fa7f8684ebc5b4f96884" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBESavePixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Save the pixmap image only when there is not another screen with that pixmap from which the image can be read when the screen is reattached. To do this, we first try to find a pixmap on another screen corresponding to the one we are trying to save. If we find one, then we do not need to save the image data since during reattachment, the image data can be read from that other pixmap. However, if we do not find one, then we need to save the image data. The common case for these are for the default stipple and root tile. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, and <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abeb7f9d39d2cfa3b57c7ab9942fcea69"></a><!-- doxytag: member="dmxextension.c::dmxCompareScreens" ref="abeb7f9d39d2cfa3b57c7ab9942fcea69" args="(DMXScreenInfo *new, DMXScreenInfo *old)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxCompareScreens </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>new</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>old</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Compare the new and old screens to see if they are compatible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a027f2cb3fe32b06f3ca3b04df8336299"></a><!-- doxytag: member="dmxextension.c::dmxDetachScreen" ref="a027f2cb3fe32b06f3ca3b04df8336299" args="(int idx)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxDetachScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Detach back-end screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>, <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxBEDestroyScratchGCs()</a>, <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxinputinit_8c.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">ProcDMXRemoveScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af7927d9de14425779c5de40312407203"></a><!-- doxytag: member="dmxextension.c::dmxFlushPendingSyncs" ref="af7927d9de14425779c5de40312407203" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxFlushPendingSyncs </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Flush pending syncs for all screens. </p>
+
+<p>References <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation()</a>, <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>, and <a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">ProcDMXSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa9f0ee11cd56a66fe5925a283c18188"></a><!-- doxytag: member="dmxextension.c::dmxForceExposures" ref="afa9f0ee11cd56a66fe5925a283c18188" args="(int idx)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxForceExposures </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1780283a6dd8f6d66e802b0c9b916f48"></a><!-- doxytag: member="dmxextension.c::dmxForceWindowCreation" ref="a1780283a6dd8f6d66e802b0c9b916f48" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxForceWindowCreation </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make sure that <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow</a> has been called for <em>pWindow</em>. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a314e23c5608a9bdaa5f8b8846f7458fc"></a><!-- doxytag: member="dmxextension.c::dmxGetDesktopAttributes" ref="a314e23c5608a9bdaa5f8b8846f7458fc" args="(DMXDesktopAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec::height</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec::shiftX</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec::shiftY</a>, and <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec::width</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>, and <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3bde3bbb52470b5eb185805d861e6216"></a><!-- doxytag: member="dmxextension.c::dmxGetInputAttributes" ref="a3bde3bbb52470b5eb185805d861e6216" args="(int deviceId, DMXInputAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxGetInputAttributes </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>deviceId</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return information about the device with id = <em>deviceId</em>. This information is primarily for the <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a> function, which does not have access to the appropriate data structure. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">DMXInputAttributesRec::detached</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">DMX_LOCAL_TYPE_BACKEND</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">DMX_LOCAL_TYPE_COMMON</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">DMX_LOCAL_TYPE_LOCAL</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a>, <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">DMXInputAttributesRec::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">DMXInputAttributesRec::physicalId</a>, <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a>, <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>, and <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7e2b64de1aef77d43ee78d3a8187f651"></a><!-- doxytag: member="dmxextension.c::dmxGetInputCount" ref="a7e2b64de1aef77d43ee78d3a8187f651" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxGetInputCount </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the total number of devices, not just <a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>. The number returned should be the same as that returned by XListInputDevices. </p>
+
+<p>References <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, and <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">ProcDMXGetInputCount()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1317039ecdb6f4eca7c1e5cea884657e"></a><!-- doxytag: member="dmxextension.c::dmxGetNumScreens" ref="a1317039ecdb6f4eca7c1e5cea884657e" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long dmxGetNumScreens </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the value of <a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a> -- the total number of backend screens in use (these are logical screens and may be larger than the number of backend displays). </p>
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>, and <a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">ProcDMXGetScreenCount()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab4180bb82b058d071e2f72c2e18534b7"></a><!-- doxytag: member="dmxextension.c::dmxGetScreenAttributes" ref="ab4180bb82b058d071e2f72c2e18534b7" args="(int physical, DMXScreenAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxGetScreenAttributes </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>physical</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine provides information to the DMX protocol extension about a particular screen. </p>
+
+<p>References <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">DMXScreenAttributesRec::logicalScreen</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec::rootWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec::rootWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec::rootWindowXoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec::rootWindowXorigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec::rootWindowYoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec::rootWindowYorigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec::screenWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec::screenWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec::screenWindowXoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec::screenWindowYoffset</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>, <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a81cd222e07016da8ee5c87c44a03312a"></a><!-- doxytag: member="dmxextension.c::dmxGetWindowAttributes" ref="a81cd222e07016da8ee5c87c44a03312a" args="(WindowPtr pWindow, DMXWindowAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxGetWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine provides information to the DMX protocol extension about a particular window. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, <a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">DMXWindowAttributesRec::pos</a>, <a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">DMXWindowAttributesRec::screen</a>, <a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">DMXWindowAttributesRec::vis</a>, <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>, and <a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">DMXWindowAttributesRec::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6125541332383040aa07fa1ef310d38d"></a><!-- doxytag: member="dmxextension.c::dmxRemoveInput" ref="a6125541332383040aa07fa1ef310d38d" args="(int id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxRemoveInput </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Remove the input with physical id <em>id</em>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">ProcDMXRemoveInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a602b3c05cd619a8b00d91315009ebc5d"></a><!-- doxytag: member="dmxextension.c::dmxUpdateScreenResources" ref="a602b3c05cd619a8b00d91315009ebc5d" args="(ScreenPtr pScreen, int x, int y, int w, int h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxUpdateScreenResources </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update DMX's screen resources to match those of the newly moved and/or resized "root" window. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a>, <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo::beYDPI</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a7decb269dc8674114f44964a88a68063"></a><!-- doxytag: member="dmxextension.c::defaultFont" ref="a7decb269dc8674114f44964a88a68063" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">FontPtr <a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">defaultFont</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxextension_8c.html">dmxextension.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxextension_8h.html b/hw/dmx/doc/html/dmxextension_8h.html
new file mode 100644
index 0000000..eb31439
--- /dev/null
+++ b/hw/dmx/doc/html/dmxextension_8h.html
@@ -0,0 +1,579 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxextension_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxextension.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxextension_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
+<a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a0e47929486368da1a7513c7d2305f24f">DMXScreenAttributesPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
+<a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#ad22f823435ccab00deb798c2e080fbe1">DMXWindowAttributesPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
+<a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a96ae1d459f8d65cbc2204f324cbe8b72">DMXDesktopAttributesPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
+<a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#af665732621edf76f4bd259d14eb99164">DMXInputAttributesPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes</a> (int physical, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes</a> (WindowPtr pWindow, <a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes</a> (<a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes</a> (int deviceId, <a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput</a> (<a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a> attr, int *deviceId)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a55936739d6df4e5b8a048d5d34c6cd39">dmxRemoveInput</a> (int deviceId)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxConfigureScreenWindows</a> (int nscreens, CARD32 *screens, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attribs, int *errorScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a0aa0eb777a77d62cd3070c642ae0b0aa">dmxConfigureDesktop</a> (<a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a> attribs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources</a> (ScreenPtr pScreen, int x, int y, int w, int h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen</a> (int idx, <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a> attr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen</a> (int idx)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for DMX extension support. These routines are called by function in Xserver/Xext/dmx.c. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxextension_8c.html">dmxextension.c</a> </dd></dl>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a96ae1d459f8d65cbc2204f324cbe8b72"></a><!-- doxytag: member="dmxextension.h::DMXDesktopAttributesPtr" ref="a96ae1d459f8d65cbc2204f324cbe8b72" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a> * <a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af665732621edf76f4bd259d14eb99164"></a><!-- doxytag: member="dmxextension.h::DMXInputAttributesPtr" ref="af665732621edf76f4bd259d14eb99164" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a> * <a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0e47929486368da1a7513c7d2305f24f"></a><!-- doxytag: member="dmxextension.h::DMXScreenAttributesPtr" ref="a0e47929486368da1a7513c7d2305f24f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a> * <a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad22f823435ccab00deb798c2e080fbe1"></a><!-- doxytag: member="dmxextension.h::DMXWindowAttributesPtr" ref="ad22f823435ccab00deb798c2e080fbe1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a> * <a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="af5d146634762aff17b8c45c4794d33e3"></a><!-- doxytag: member="dmxextension.h::dmxAddInput" ref="af5d146634762aff17b8c45c4794d33e3" args="(DMXInputAttributesPtr attr, int *deviceId)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxAddInput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Add an input with the specified attributes. If the input is added, the physical id is returned in <em>deviceId</em>. </p>
+
+<p>References <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxinputinit_8c.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8c.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a>, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a>, <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a>, and <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3962840388f9bcf96fb17294a413d8cb"></a><!-- doxytag: member="dmxextension.h::dmxAttachScreen" ref="a3962840388f9bcf96fb17294a413d8cb" args="(int idx, DMXScreenAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxAttachScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reattach previously detached back-end screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">defaultFont</a>, <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a>, <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxBECreateScratchGCs()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>, <a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxConfigureScreenWindows()</a>, <a class="el" href="dmxextension_8c.html#afa9f0ee11cd56a66fe5925a283c18188">dmxForceExposures()</a>, <a class="el" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>, <a class="el" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, <a class="el" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0aa0eb777a77d62cd3070c642ae0b0aa"></a><!-- doxytag: member="dmxextension.h::dmxConfigureDesktop" ref="a0aa0eb777a77d62cd3070c642ae0b0aa" args="(DMXDesktopAttributesPtr attribs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxConfigureDesktop </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attribs</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a63c06d493f7fbe70e235c97a622efca9"></a><!-- doxytag: member="dmxextension.h::dmxConfigureScreenWindows" ref="a63c06d493f7fbe70e235c97a622efca9" args="(int nscreens, CARD32 *screens, DMXScreenAttributesPtr attribs, int *errorScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxConfigureScreenWindows </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nscreens</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32 *&#160;</td>
+ <td class="paramname"><em>screens</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attribs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>errorScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a027f2cb3fe32b06f3ca3b04df8336299"></a><!-- doxytag: member="dmxextension.h::dmxDetachScreen" ref="a027f2cb3fe32b06f3ca3b04df8336299" args="(int idx)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxDetachScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Detach back-end screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>, <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxBEDestroyScratchGCs()</a>, <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxinputinit_8c.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">ProcDMXRemoveScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af7927d9de14425779c5de40312407203"></a><!-- doxytag: member="dmxextension.h::dmxFlushPendingSyncs" ref="af7927d9de14425779c5de40312407203" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxFlushPendingSyncs </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Flush pending syncs for all screens. </p>
+
+<p>References <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation()</a>, <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>, and <a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">ProcDMXSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1780283a6dd8f6d66e802b0c9b916f48"></a><!-- doxytag: member="dmxextension.h::dmxForceWindowCreation" ref="a1780283a6dd8f6d66e802b0c9b916f48" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxForceWindowCreation </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make sure that <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow</a> has been called for <em>pWindow</em>. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">ProcDMXForceWindowCreation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a314e23c5608a9bdaa5f8b8846f7458fc"></a><!-- doxytag: member="dmxextension.h::dmxGetDesktopAttributes" ref="a314e23c5608a9bdaa5f8b8846f7458fc" args="(DMXDesktopAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetDesktopAttributes </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec::height</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec::shiftX</a>, <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec::shiftY</a>, and <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec::width</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes()</a>, and <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3bde3bbb52470b5eb185805d861e6216"></a><!-- doxytag: member="dmxextension.h::dmxGetInputAttributes" ref="a3bde3bbb52470b5eb185805d861e6216" args="(int deviceId, DMXInputAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxGetInputAttributes </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>deviceId</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return information about the device with id = <em>deviceId</em>. This information is primarily for the <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a> function, which does not have access to the appropriate data structure. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">DMXInputAttributesRec::detached</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">DMX_LOCAL_TYPE_BACKEND</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">DMX_LOCAL_TYPE_COMMON</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">DMX_LOCAL_TYPE_LOCAL</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a>, <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">DMXInputAttributesRec::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">DMXInputAttributesRec::physicalId</a>, <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a>, <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>, and <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7e2b64de1aef77d43ee78d3a8187f651"></a><!-- doxytag: member="dmxextension.h::dmxGetInputCount" ref="a7e2b64de1aef77d43ee78d3a8187f651" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxGetInputCount </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the total number of devices, not just <a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>. The number returned should be the same as that returned by XListInputDevices. </p>
+
+<p>References <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, and <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">ProcDMXGetInputCount()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1317039ecdb6f4eca7c1e5cea884657e"></a><!-- doxytag: member="dmxextension.h::dmxGetNumScreens" ref="a1317039ecdb6f4eca7c1e5cea884657e" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long dmxGetNumScreens </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the value of <a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a> -- the total number of backend screens in use (these are logical screens and may be larger than the number of backend displays). </p>
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>, and <a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">ProcDMXGetScreenCount()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab4180bb82b058d071e2f72c2e18534b7"></a><!-- doxytag: member="dmxextension.h::dmxGetScreenAttributes" ref="ab4180bb82b058d071e2f72c2e18534b7" args="(int physical, DMXScreenAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxGetScreenAttributes </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>physical</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine provides information to the DMX protocol extension about a particular screen. </p>
+
+<p>References <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">DMXScreenAttributesRec::logicalScreen</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec::rootWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec::rootWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec::rootWindowXoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec::rootWindowXorigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec::rootWindowYoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec::rootWindowYorigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec::screenWindowHeight</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec::screenWindowWidth</a>, <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec::screenWindowXoffset</a>, <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec::screenWindowYoffset</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, and <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>, <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">ProcDMXChangeScreensAttributes()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a81cd222e07016da8ee5c87c44a03312a"></a><!-- doxytag: member="dmxextension.h::dmxGetWindowAttributes" ref="a81cd222e07016da8ee5c87c44a03312a" args="(WindowPtr pWindow, DMXWindowAttributesPtr attr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxGetWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesPtr</a>&#160;</td>
+ <td class="paramname"><em>attr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine provides information to the DMX protocol extension about a particular window. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, <a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">DMXWindowAttributesRec::pos</a>, <a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">DMXWindowAttributesRec::screen</a>, <a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">DMXWindowAttributesRec::vis</a>, <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>, and <a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">DMXWindowAttributesRec::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a55936739d6df4e5b8a048d5d34c6cd39"></a><!-- doxytag: member="dmxextension.h::dmxRemoveInput" ref="a55936739d6df4e5b8a048d5d34c6cd39" args="(int deviceId)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxRemoveInput </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Remove the input with physical id <em>id</em>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">ProcDMXRemoveInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a602b3c05cd619a8b00d91315009ebc5d"></a><!-- doxytag: member="dmxextension.h::dmxUpdateScreenResources" ref="a602b3c05cd619a8b00d91315009ebc5d" args="(ScreenPtr pScreen, int x, int y, int w, int h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxUpdateScreenResources </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update DMX's screen resources to match those of the newly moved and/or resized "root" window. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a>, <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo::beYDPI</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxextension_8h.html">dmxextension.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxextension_8h_source.html b/hw/dmx/doc/html/dmxextension_8h_source.html
new file mode 100644
index 0000000..2d89e55
--- /dev/null
+++ b/hw/dmx/doc/html/dmxextension_8h_source.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxextension_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxextension.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxextension_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Author:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00039"></a>00039 <span class="preprocessor">#ifndef _DMXEXTENSION_H_</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define _DMXEXTENSION_H_</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00044"></a><a class="code" href="structDMXScreenAttributesRec.html">00044</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00045"></a><a class="code" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">00045</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">displayName</a>;
+<a name="l00046"></a><a class="code" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">00046</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">logicalScreen</a>;
+<a name="l00047"></a>00047
+<a name="l00048"></a><a class="code" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">00048</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">screenWindowWidth</a>; <span class="comment">/* displayName&#39;s coordinate system */</span>
+<a name="l00049"></a><a class="code" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">00049</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">screenWindowHeight</a>; <span class="comment">/* displayName&#39;s coordinate system */</span>
+<a name="l00050"></a><a class="code" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">00050</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">screenWindowXoffset</a>; <span class="comment">/* displayName&#39;s coordinate system */</span>
+<a name="l00051"></a><a class="code" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">00051</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">screenWindowYoffset</a>; <span class="comment">/* displayName&#39;s coordinate system */</span>
+<a name="l00052"></a>00052
+<a name="l00053"></a><a class="code" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">00053</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">rootWindowWidth</a>; <span class="comment">/* screenWindow&#39;s coordinate system */</span>
+<a name="l00054"></a><a class="code" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">00054</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">rootWindowHeight</a>; <span class="comment">/* screenWindow&#39;s coordinate system */</span>
+<a name="l00055"></a><a class="code" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">00055</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">rootWindowXoffset</a>; <span class="comment">/* screenWindow&#39;s coordinate system */</span>
+<a name="l00056"></a><a class="code" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">00056</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">rootWindowYoffset</a>; <span class="comment">/* screenWindow&#39;s coordinate system */</span>
+<a name="l00057"></a>00057
+<a name="l00058"></a><a class="code" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">00058</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">rootWindowXorigin</a>; <span class="comment">/* global coordinate system */</span>
+<a name="l00059"></a><a class="code" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">00059</a> <span class="keywordtype">int</span> <a class="code" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">rootWindowYorigin</a>; <span class="comment">/* global coordinate system */</span>
+<a name="l00060"></a>00060 } <a class="code" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a>, *<a class="code" href="dmxextension_8h.html#a0e47929486368da1a7513c7d2305f24f">DMXScreenAttributesPtr</a>;
+<a name="l00061"></a>00061
+<a name="l00063"></a><a class="code" href="structDMXWindowAttributesRec.html">00063</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00064"></a><a class="code" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">00064</a> <span class="keywordtype">int</span> <a class="code" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">screen</a>;
+<a name="l00065"></a><a class="code" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">00065</a> Window <a class="code" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">window</a>;
+<a name="l00066"></a><a class="code" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">00066</a> xRectangle <a class="code" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">pos</a>;
+<a name="l00067"></a><a class="code" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">00067</a> xRectangle <a class="code" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">vis</a>;
+<a name="l00068"></a>00068 } <a class="code" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a>, *<a class="code" href="dmxextension_8h.html#ad22f823435ccab00deb798c2e080fbe1">DMXWindowAttributesPtr</a>;
+<a name="l00069"></a>00069
+<a name="l00072"></a><a class="code" href="structDMXDesktopAttributesRec.html">00072</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00073"></a><a class="code" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">00073</a> <span class="keywordtype">int</span> <a class="code" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">width</a>;
+<a name="l00074"></a><a class="code" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">00074</a> <span class="keywordtype">int</span> <a class="code" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">height</a>;
+<a name="l00075"></a><a class="code" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">00075</a> <span class="keywordtype">int</span> <a class="code" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">shiftX</a>;
+<a name="l00076"></a><a class="code" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">00076</a> <span class="keywordtype">int</span> <a class="code" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">shiftY</a>;
+<a name="l00077"></a>00077 } <a class="code" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a>, *<a class="code" href="dmxextension_8h.html#a96ae1d459f8d65cbc2204f324cbe8b72">DMXDesktopAttributesPtr</a>;
+<a name="l00078"></a>00078
+<a name="l00080"></a><a class="code" href="structDMXInputAttributesRec.html">00080</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
+<a name="l00081"></a><a class="code" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">00081</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">name</a>;
+<a name="l00082"></a><a class="code" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">00082</a> <span class="keywordtype">int</span> <a class="code" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">inputType</a>;
+<a name="l00083"></a><a class="code" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">00083</a> <span class="keywordtype">int</span> <a class="code" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">physicalScreen</a>;
+<a name="l00084"></a><a class="code" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">00084</a> <span class="keywordtype">int</span> <a class="code" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">physicalId</a>;
+<a name="l00085"></a><a class="code" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">00085</a> <span class="keywordtype">int</span> <a class="code" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">isCore</a>;
+<a name="l00086"></a><a class="code" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">00086</a> <span class="keywordtype">int</span> <a class="code" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">sendsCore</a>;
+<a name="l00087"></a><a class="code" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">00087</a> <span class="keywordtype">int</span> <a class="code" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">detached</a>;
+<a name="l00088"></a>00088 } <a class="code" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a>, *<a class="code" href="dmxextension_8h.html#af665732621edf76f4bd259d14eb99164">DMXInputAttributesPtr</a>;
+<a name="l00089"></a>00089
+<a name="l00090"></a>00090
+<a name="l00091"></a>00091 <span class="keyword">extern</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="dmxextension_8c.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens</a>(<span class="keywordtype">void</span>);
+<a name="l00092"></a>00092 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxextension_8c.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation</a>(WindowPtr pWindow);
+<a name="l00093"></a>00093 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs</a>(<span class="keywordtype">void</span>);
+<a name="l00094"></a>00094 <span class="keyword">extern</span> Bool <a class="code" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes</a>(<span class="keywordtype">int</span> physical,
+<a name="l00095"></a>00095 DMXScreenAttributesPtr attr);
+<a name="l00096"></a>00096 <span class="keyword">extern</span> Bool <a class="code" href="dmxextension_8c.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes</a>(WindowPtr pWindow,
+<a name="l00097"></a>00097 DMXWindowAttributesPtr attr);
+<a name="l00098"></a>00098 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxextension_8c.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes</a>(DMXDesktopAttributesPtr attr);
+<a name="l00099"></a>00099 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount</a>(<span class="keywordtype">void</span>);
+<a name="l00100"></a>00100 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8c.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes</a>(<span class="keywordtype">int</span> deviceId,
+<a name="l00101"></a>00101 DMXInputAttributesPtr attr);
+<a name="l00102"></a>00102 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8c.html#a6b0b38eb49c6be097a59dbcdd6dacb51">dmxAddInput</a>(DMXInputAttributesPtr attr, <span class="keywordtype">int</span> *deviceId);
+<a name="l00103"></a>00103 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8c.html#a6125541332383040aa07fa1ef310d38d">dmxRemoveInput</a>(<span class="keywordtype">int</span> deviceId);
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxConfigureScreenWindows</a>(<span class="keywordtype">int</span> nscreens,
+<a name="l00106"></a>00106 CARD32 *screens,
+<a name="l00107"></a>00107 DMXScreenAttributesPtr attribs,
+<a name="l00108"></a>00108 <span class="keywordtype">int</span> *errorScreen);
+<a name="l00109"></a>00109
+<a name="l00110"></a>00110 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8h.html#a0aa0eb777a77d62cd3070c642ae0b0aa">dmxConfigureDesktop</a>(DMXDesktopAttributesPtr attribs);
+<a name="l00111"></a>00111
+<a name="l00112"></a>00112 <span class="comment">/* dmxUpdateScreenResources exposed for dmxCreateWindow in dmxwindow.c */</span>
+<a name="l00113"></a>00113 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxextension_8c.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources</a>(ScreenPtr pScreen,
+<a name="l00114"></a>00114 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h);
+<a name="l00115"></a>00115
+<a name="l00116"></a>00116 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8c.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen</a>(<span class="keywordtype">int</span> idx, DMXScreenAttributesPtr attr);
+<a name="l00117"></a>00117 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxextension_8c.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen</a>(<span class="keywordtype">int</span> idx);
+<a name="l00118"></a>00118 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxextension_8h.html">dmxextension.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxfont_8c.html b/hw/dmx/doc/html/dmxfont_8c.html
new file mode 100644
index 0000000..1038704
--- /dev/null
+++ b/hw/dmx/doc/html/dmxfont_8c.html
@@ -0,0 +1,488 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxfont_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxfont.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxfont_8h_source.html">dmxfont.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &lt;X11/fonts/fontstruct.h&gt;</code><br/>
+<code>#include &quot;dixfont.h&quot;</code><br/>
+<code>#include &quot;dixstruct.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#af802427439f07d76ba970ca41f6dd7c1">DMX_FONTPATH_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#aba35600742d4d57b9dd9fb9dde973707">dmxFontErrorHandler</a> (Display *dpy, XErrorEvent *ev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxGetFontPath</a> (int *npaths)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a287e0fab77b9351a96fbc08fb5ec7e25">dmxFreeFontPath</a> (char **fp)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, char *fp)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxCheckFontPath</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, int *error)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxInitFonts</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxResetFonts</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxSaveProcVector</a> [256])(ClientPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxFontLastError</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for fonts. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="af802427439f07d76ba970ca41f6dd7c1"></a><!-- doxytag: member="dmxfont.c::DMX_FONTPATH_DEBUG" ref="af802427439f07d76ba970ca41f6dd7c1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_FONTPATH_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="afadf46b46a1f3da085c96849c885a41e"></a><!-- doxytag: member="dmxfont.c::dmxBEFreeFont" ref="afadf46b46a1f3da085c96849c885a41e" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free <em>pFont</em> on the back-end associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, and <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad24fe115ec27d050da7a4cb47d7ce52f"></a><!-- doxytag: member="dmxfont.c::dmxBELoadFont" ref="ad24fe115ec27d050da7a4cb47d7ce52f" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBELoadFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. When a font is loaded, the font path on back-end server is first initialized to that specified on the command line with the -fontpath options, and then the font is loaded. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmxfont_8c.html#a287e0fab77b9351a96fbc08fb5ec7e25">dmxFreeFontPath()</a>, <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxGetFontPath()</a>, <a class="el" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, and <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3d2eb9a1b065a02dbe58ee4e85ff6247"></a><!-- doxytag: member="dmxfont.c::dmxCheckFontPath" ref="a3d2eb9a1b065a02dbe58ee4e85ff6247" args="(DMXScreenInfo *dmxScreen, int *error)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxCheckFontPath </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>error</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a177c3268bf91715dc536db6b6f8eed72"></a><!-- doxytag: member="dmxfont.c::dmxCheckFontPathElement" ref="a177c3268bf91715dc536db6b6f8eed72" args="(DMXScreenInfo *dmxScreen, char *fp)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxCheckFontPathElement </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>fp</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#aba35600742d4d57b9dd9fb9dde973707">dmxFontErrorHandler()</a>, <a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxFontLastError</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba35600742d4d57b9dd9fb9dde973707"></a><!-- doxytag: member="dmxfont.c::dmxFontErrorHandler" ref="aba35600742d4d57b9dd9fb9dde973707" args="(Display *dpy, XErrorEvent *ev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxFontErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XErrorEvent *&#160;</td>
+ <td class="paramname"><em>ev</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxFontLastError</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, and <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a287e0fab77b9351a96fbc08fb5ec7e25"></a><!-- doxytag: member="dmxfont.c::dmxFreeFontPath" ref="a287e0fab77b9351a96fbc08fb5ec7e25" args="(char **fp)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxFreeFontPath </td>
+ <td>(</td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>fp</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, and <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae81f188178a0d01ea67b6685cdbe493c"></a><!-- doxytag: member="dmxfont.c::dmxGetFontPath" ref="ae81f188178a0d01ea67b6685cdbe493c" args="(int *npaths)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static char** dmxGetFontPath </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>npaths</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, and <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, and <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d9cf629a70ed7c46a38dac9611b6527"></a><!-- doxytag: member="dmxfont.c::dmxInitFonts" ref="a2d9cf629a70ed7c46a38dac9611b6527" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitFonts </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize font support. In addition to the screen function call pointers, DMX also hooks in at the ProcVector[] level. Here the old ProcVector function pointers are saved and the new ProcVector function pointers are initialized. </p>
+
+<p>References <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>, and <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxSaveProcVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac76f86a537e6d719d712d11f310b8989"></a><!-- doxytag: member="dmxfont.c::dmxProcSetFontPath" ref="ac76f86a537e6d719d712d11f310b8989" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcSetFontPath </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxCheckFontPath()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxInitFonts()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0119b47dedc04962e24f5b7d86f5cd92"></a><!-- doxytag: member="dmxfont.c::dmxRealizeFont" ref="a0119b47dedc04962e24f5b7d86f5cd92" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxRealizeFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Realize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>, and <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv::refcnt</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab6bdac52e012fec9bd43eaa9667f9785"></a><!-- doxytag: member="dmxfont.c::dmxResetFonts" ref="ab6bdac52e012fec9bd43eaa9667f9785" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResetFonts </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reset font support by restoring the original ProcVector function pointers. </p>
+
+<p>References <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxSaveProcVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad20ddd111e4a45bf1bdfd45744946c72"></a><!-- doxytag: member="dmxfont.c::dmxSetFontPath" ref="ad20ddd111e4a45bf1bdfd45744946c72" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxSetFontPath </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#aba35600742d4d57b9dd9fb9dde973707">dmxFontErrorHandler()</a>, <a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxFontLastError</a>, <a class="el" href="dmxfont_8c.html#a287e0fab77b9351a96fbc08fb5ec7e25">dmxFreeFontPath()</a>, <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxGetFontPath()</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, and <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxCheckFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d0df8388cd6cd1a5d7b77dcf9aaa69f"></a><!-- doxytag: member="dmxfont.c::dmxUnrealizeFont" ref="a9d0df8388cd6cd1a5d7b77dcf9aaa69f" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxUnrealizeFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unrealize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>, and <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv::refcnt</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a9c9ed2980702f901796479788b6b8f66"></a><!-- doxytag: member="dmxfont.c::dmxFontLastError" ref="a9c9ed2980702f901796479788b6b8f66" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxFontLastError</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, <a class="el" href="dmxfont_8c.html#aba35600742d4d57b9dd9fb9dde973707">dmxFontErrorHandler()</a>, and <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a306f6e316020fcda44fb35e1c96f2bd3"></a><!-- doxytag: member="dmxfont.c::dmxSaveProcVector" ref="a306f6e316020fcda44fb35e1c96f2bd3" args="[256])(ClientPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int(* <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxSaveProcVector</a>[256])(ClientPtr)<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxInitFonts()</a>, and <a class="el" href="dmxfont_8h.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxResetFonts()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxfont_8c.html">dmxfont.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxfont_8h.html b/hw/dmx/doc/html/dmxfont_8h.html
new file mode 100644
index 0000000..a6646b8
--- /dev/null
+++ b/hw/dmx/doc/html/dmxfont_8h.html
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxfont_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxfont.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;X11/fonts/fontstruct.h&gt;</code><br/>
+</div>
+<p><a href="dmxfont_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#a06305f429e61106b149a71e28db42541">dmxFontPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#a79b4c89f92d4b1c88343b39bc681ef2a">dmxFontPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxInitFonts</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxResetFonts</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont</a> (ScreenPtr pScreen, FontPtr pFont)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxfont_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for font-related functions. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxfont_8c.html">dmxfont.c</a> </dd></dl>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a79b4c89f92d4b1c88343b39bc681ef2a"></a><!-- doxytag: member="dmxfont.h::dmxFontPrivPtr" ref="a79b4c89f92d4b1c88343b39bc681ef2a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a> * <a class="el" href="struct__dmxFontPriv.html">dmxFontPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a06305f429e61106b149a71e28db42541"></a><!-- doxytag: member="dmxfont.h::dmxFontPrivRec" ref="a06305f429e61106b149a71e28db42541" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a> <a class="el" href="struct__dmxFontPriv.html">dmxFontPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Font private area. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="afadf46b46a1f3da085c96849c885a41e"></a><!-- doxytag: member="dmxfont.h::dmxBEFreeFont" ref="afadf46b46a1f3da085c96849c885a41e" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free <em>pFont</em> on the back-end associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, and <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad24fe115ec27d050da7a4cb47d7ce52f"></a><!-- doxytag: member="dmxfont.h::dmxBELoadFont" ref="ad24fe115ec27d050da7a4cb47d7ce52f" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBELoadFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Load the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. When a font is loaded, the font path on back-end server is first initialized to that specified on the command line with the -fontpath options, and then the font is loaded. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmxfont_8c.html#a287e0fab77b9351a96fbc08fb5ec7e25">dmxFreeFontPath()</a>, <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxGetFontPath()</a>, <a class="el" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, and <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d9cf629a70ed7c46a38dac9611b6527"></a><!-- doxytag: member="dmxfont.h::dmxInitFonts" ref="a2d9cf629a70ed7c46a38dac9611b6527" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitFonts </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize font support. In addition to the screen function call pointers, DMX also hooks in at the ProcVector[] level. Here the old ProcVector function pointers are saved and the new ProcVector function pointers are initialized. </p>
+
+<p>References <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>, and <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxSaveProcVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0119b47dedc04962e24f5b7d86f5cd92"></a><!-- doxytag: member="dmxfont.h::dmxRealizeFont" ref="a0119b47dedc04962e24f5b7d86f5cd92" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxRealizeFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Realize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>, and <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv::refcnt</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab6bdac52e012fec9bd43eaa9667f9785"></a><!-- doxytag: member="dmxfont.h::dmxResetFonts" ref="ab6bdac52e012fec9bd43eaa9667f9785" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResetFonts </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reset font support by restoring the original ProcVector function pointers. </p>
+
+<p>References <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxSaveProcVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d0df8388cd6cd1a5d7b77dcf9aaa69f"></a><!-- doxytag: member="dmxfont.h::dmxUnrealizeFont" ref="a9d0df8388cd6cd1a5d7b77dcf9aaa69f" args="(ScreenPtr pScreen, FontPtr pFont)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxUnrealizeFont </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">FontPtr&#160;</td>
+ <td class="paramname"><em>pFont</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unrealize the font, <em>pFont</em>, on the back-end server associated with <em>pScreen</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>, and <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv::refcnt</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a4e2a5b2ae34073156aef6b406552657f"></a><!-- doxytag: member="dmxfont.h::dmxFontPrivateIndex" ref="a4e2a5b2ae34073156aef6b406552657f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxscrinit_8c.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Fonts </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxfont_8h.html">dmxfont.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxfont_8h_source.html b/hw/dmx/doc/html/dmxfont_8h_source.html
new file mode 100644
index 0000000..55090b7
--- /dev/null
+++ b/hw/dmx/doc/html/dmxfont_8h_source.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxfont_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxfont.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxfont_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXFONT_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXFONT_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;X11/fonts/fontstruct.h&gt;</span>
+<a name="l00041"></a>00041
+<a name="l00043"></a><a class="code" href="struct__dmxFontPriv.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxFontPriv.html">_dmxFontPriv</a> {
+<a name="l00044"></a><a class="code" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">00044</a> <span class="keywordtype">int</span> <a class="code" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">refcnt</a>;
+<a name="l00045"></a><a class="code" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">00045</a> XFontStruct **<a class="code" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">font</a>;
+<a name="l00046"></a>00046 } <a class="code" href="dmxfont_8h.html#a06305f429e61106b149a71e28db42541">dmxFontPrivRec</a>, *<a class="code" href="dmxfont_8h.html#a79b4c89f92d4b1c88343b39bc681ef2a">dmxFontPrivPtr</a>;
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxfont_8c.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxInitFonts</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxfont_8c.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxResetFonts</a>(<span class="keywordtype">void</span>);
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont</a>(ScreenPtr pScreen, FontPtr pFont);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont</a>(ScreenPtr pScreen, FontPtr pFont);
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont</a>(ScreenPtr pScreen, FontPtr pFont);
+<a name="l00055"></a>00055 <span class="keyword">extern</span> Bool <a class="code" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont</a>(ScreenPtr pScreen, FontPtr pFont);
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>;
+<a name="l00058"></a>00058
+<a name="l00059"></a>00059 <span class="preprocessor">#endif </span><span class="comment">/* DMXFONT_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxfont_8h.html">dmxfont.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxgc_8c.html b/hw/dmx/doc/html/dmxgc_8c.html
new file mode 100644
index 0000000..5e1c104
--- /dev/null
+++ b/hw/dmx/doc/html/dmxgc_8c.html
@@ -0,0 +1,466 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxgc_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxgc.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgc_8h_source.html">dmxgc.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgcops_8h_source.html">dmxgcops.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxfont_8h_source.html">dmxfont.h</a>&quot;</code><br/>
+<code>#include &quot;gcstruct.h&quot;</code><br/>
+<code>#include &quot;pixmapstr.h&quot;</code><br/>
+<code>#include &quot;migc.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC</a> (ScreenPtr pScreen, GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC</a> (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC</a> (GCPtr pGC, unsigned long mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC</a> (GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip</a> (GCPtr pGC, int type, pointer pvalue, int nrects)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxCopyClip</a> (GCPtr pGCDst, GCPtr pGCSrc)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static GCFuncs&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxGCFuncs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static GCOps&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8c.html#a4688e83670c13b303cba5309eaf23424">dmxGCOps</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for GCs. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a69cbe2a62465699d0bb5b2a6e187fa3b"></a><!-- doxytag: member="dmxgc.c::dmxBECreateGC" ref="a69cbe2a62465699d0bb5b2a6e187fa3b" args="(ScreenPtr pScreen, GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECreateGC </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the GC on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>, and <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxBECreateScratchGCs()</a>, and <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a17c700daf344c32c6daecaf19d19f6a8"></a><!-- doxytag: member="dmxgc.c::dmxBEFreeGC" ref="a17c700daf344c32c6daecaf19d19f6a8" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the <em>pGC</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxBEDestroyScratchGCs()</a>, and <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e0e73f84cf8b03259b4077dd0246b59"></a><!-- doxytag: member="dmxgc.c::dmxChangeClip" ref="a1e0e73f84cf8b03259b4077dd0246b59" args="(GCPtr pGC, int type, pointer pvalue, int nrects)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangeClip </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pvalue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nrects</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the clip rects for a GC. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af07df8b118bf78f1ce4b96fa1d0a2401"></a><!-- doxytag: member="dmxgc.c::dmxChangeGC" ref="af07df8b118bf78f1ce4b96fa1d0a2401" args="(GCPtr pGC, unsigned long mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangeGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the values in the graphics context on the back-end server associated with <em>pGC's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>, <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>, <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv::msc</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae4af2d27e1d593d35696f0bb52fd8302"></a><!-- doxytag: member="dmxgc.c::dmxCopyClip" ref="ae4af2d27e1d593d35696f0bb52fd8302" args="(GCPtr pGCDst, GCPtr pGCSrc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCopyClip </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCSrc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy a GC's clip rects. </p>
+
+<p>References <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, and <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5a4221a9f3552a0abfe0e968991120bf"></a><!-- doxytag: member="dmxgc.c::dmxCopyGC" ref="a5a4221a9f3552a0abfe0e968991120bf" args="(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCopyGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>changes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCDst</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy <em>pGCSrc</em> to <em>pGCDst</em> on the back-end server associated with <em>pGCSrc's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a6b54ac639feed4b767ba31647ac6f8"></a><!-- doxytag: member="dmxgc.c::dmxCreateGC" ref="a6a6b54ac639feed4b767ba31647ac6f8" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a graphics context on the back-end server associated /a pGC's screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxGCFuncs</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">_dmxGCPriv::funcs</a>, <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>, <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv::msc</a>, and <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv::ops</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7661a8add19b4d73e7b5fe6f39ff7cc0"></a><!-- doxytag: member="dmxgc.c::dmxDestroyClip" ref="a7661a8add19b4d73e7b5fe6f39ff7cc0" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyClip </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a GC's clip rects. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f33d96c7308bec0eb74822316c7ff23"></a><!-- doxytag: member="dmxgc.c::dmxDestroyGC" ref="a7f33d96c7308bec0eb74822316c7ff23" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the graphics context, <em>pGC</em> and free the corresponding GC on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3f58b7fe15764f42dfdcf6b9dfdd9146"></a><!-- doxytag: member="dmxgc.c::dmxInitGC" ref="a3f58b7fe15764f42dfdcf6b9dfdd9146" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitGC </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the GC on <em>pScreen</em> </p>
+
+<p>References <a class="el" href="dmx_8h.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad34a918e727baa65bea235ac16b5e08f"></a><!-- doxytag: member="dmxgc.c::dmxValidateGC" ref="ad34a918e727baa65bea235ac16b5e08f" args="(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxValidateGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>changes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Validate a graphics context, <em>pGC</em>, locally in the DMX server and recompute the composite clip, if necessary. </p>
+
+<p>References <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, and <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv::ops</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a3c6b012a9ca843b7f1083a151030c400"></a><!-- doxytag: member="dmxgc.c::dmxGCFuncs" ref="a3c6b012a9ca843b7f1083a151030c400" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GCFuncs <a class="el" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxGCFuncs</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <a class="code" href="dmxgc_8c.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC</a>,
+ <a class="code" href="dmxgc_8c.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC</a>,
+ <a class="code" href="dmxgc_8c.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC</a>,
+ <a class="code" href="dmxgc_8c.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC</a>,
+ <a class="code" href="dmxgc_8c.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip</a>,
+ <a class="code" href="dmxgc_8c.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip</a>,
+ <a class="code" href="dmxgc_8c.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxCopyClip</a>,
+}
+</pre></div>
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4688e83670c13b303cba5309eaf23424"></a><!-- doxytag: member="dmxgc.c::dmxGCOps" ref="a4688e83670c13b303cba5309eaf23424" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GCOps <a class="el" href="dmxgc_8c.html#a4688e83670c13b303cba5309eaf23424">dmxGCOps</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <a class="code" href="dmxgcops_8c.html#aa70a52ce25b894154a610b0f3fc130cf">dmxFillSpans</a>,
+ <a class="code" href="dmxgcops_8c.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxSetSpans</a>,
+ <a class="code" href="dmxgcops_8c.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage</a>,
+ <a class="code" href="dmxgcops_8c.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea</a>,
+ <a class="code" href="dmxgcops_8c.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane</a>,
+ <a class="code" href="dmxgcops_8c.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint</a>,
+ <a class="code" href="dmxgcops_8c.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines</a>,
+ <a class="code" href="dmxgcops_8c.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment</a>,
+ <a class="code" href="dmxgcops_8c.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle</a>,
+ <a class="code" href="dmxgcops_8c.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc</a>,
+ <a class="code" href="dmxgcops_8c.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon</a>,
+ <a class="code" href="dmxgcops_8c.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect</a>,
+ <a class="code" href="dmxgcops_8c.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc</a>,
+ <a class="code" href="dmxgcops_8c.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8</a>,
+ <a class="code" href="dmxgcops_8c.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16</a>,
+ <a class="code" href="dmxgcops_8c.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8</a>,
+ <a class="code" href="dmxgcops_8c.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16</a>,
+ <a class="code" href="dmxgcops_8c.html#a3feeb20d71e2368e436633eddf4b13ac">dmxImageGlyphBlt</a>,
+ <a class="code" href="dmxgcops_8c.html#ae1200c166d613547b34d0adf04d152ea">dmxPolyGlyphBlt</a>,
+ <a class="code" href="dmxgcops_8c.html#a2ca1093683e50ef80846d76a83d2f102">dmxPushPixels</a>
+}
+</pre></div>
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxgc_8c.html">dmxgc.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxgc_8h.html b/hw/dmx/doc/html/dmxgc_8h.html
new file mode 100644
index 0000000..4cc540e
--- /dev/null
+++ b/hw/dmx/doc/html/dmxgc_8h.html
@@ -0,0 +1,510 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxgc_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxgc.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;gcstruct.h&quot;</code><br/>
+</div>
+<p><a href="dmxgc_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>(_pGC)&#160;&#160;&#160;(<a class="el" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a>)dixLookupPrivate(&amp;(_pGC)-&gt;devPrivates, dmxGCPrivateKey)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>(_pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>(_pGC)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a2d7a664f045bba899390f66832c1ccf8">dmxGCPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a234db372824505de585d75173374f566">dmxGCPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC</a> (GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC</a> (GCPtr pGC, unsigned long mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC</a> (GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip</a> (GCPtr pGC, int type, pointer pvalue, int nrects)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip</a> (GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxCopyClip</a> (GCPtr pGCDst, GCPtr pGCSrc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC</a> (ScreenPtr pScreen, GCPtr pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC</a> (GCPtr pGC)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for GC support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxgc_8c.html">dmxgc.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aa69b8c93d609c2be2d8680388477d5a4"></a><!-- doxytag: member="dmxgc.h::DMX_GC_FUNC_EPILOGUE" ref="aa69b8c93d609c2be2d8680388477d5a4" args="(_pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GC_FUNC_EPILOGUE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGC</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ <a class="code" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a> _pGCPriv = <a class="code" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>(_pGC); \
+ <a class="code" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>(funcs, &amp;<a class="code" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxGCFuncs</a>, _pGCPriv, (_pGC)); \
+ <span class="keywordflow">if</span> (_pGCPriv-&gt;<a class="code" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">ops</a>) \
+ <a class="code" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>(ops, &amp;<a class="code" href="dmxgc_8c.html#a4688e83670c13b303cba5309eaf23424">dmxGCOps</a>, _pGCPriv, (_pGC)); \
+} <span class="keywordflow">while</span> (0)
+</pre></div>
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxgc_8h.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxCopyClip()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>, and <a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa4d5583f3d6876e1fb96226ec9aa281a"></a><!-- doxytag: member="dmxgc.h::DMX_GC_FUNC_PROLOGUE" ref="aa4d5583f3d6876e1fb96226ec9aa281a" args="(_pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GC_FUNC_PROLOGUE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGC</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ <a class="code" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a> _pGCPriv = <a class="code" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>(_pGC); \
+ <a class="code" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>(funcs, _pGCPriv, (_pGC)); \
+ <span class="keywordflow">if</span> (_pGCPriv-&gt;<a class="code" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">ops</a>) \
+ <a class="code" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>(ops, _pGCPriv, (_pGC)); \
+} <span class="keywordflow">while</span> (0)
+</pre></div>
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxgc_8h.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxCopyClip()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>, and <a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a42556da1890b53da10806fbab8174549"></a><!-- doxytag: member="dmxgc.h::DMX_GET_GC_PRIV" ref="a42556da1890b53da10806fbab8174549" args="(_pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_GC_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGC</td><td>)</td>
+ <td>&#160;&#160;&#160;(<a class="el" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a>)dixLookupPrivate(&amp;(_pGC)-&gt;devPrivates, dmxGCPrivateKey)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get private. </p>
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, and <a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a234db372824505de585d75173374f566"></a><!-- doxytag: member="dmxgc.h::dmxGCPrivPtr" ref="a234db372824505de585d75173374f566" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a> * <a class="el" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2d7a664f045bba899390f66832c1ccf8"></a><!-- doxytag: member="dmxgc.h::dmxGCPrivRec" ref="a2d7a664f045bba899390f66832c1ccf8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a> <a class="el" href="struct__dmxGCPriv.html">dmxGCPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>GC private area. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a69cbe2a62465699d0bb5b2a6e187fa3b"></a><!-- doxytag: member="dmxgc.h::dmxBECreateGC" ref="a69cbe2a62465699d0bb5b2a6e187fa3b" args="(ScreenPtr pScreen, GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECreateGC </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create the GC on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>, and <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxBECreateScratchGCs()</a>, and <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a17c700daf344c32c6daecaf19d19f6a8"></a><!-- doxytag: member="dmxgc.h::dmxBEFreeGC" ref="a17c700daf344c32c6daecaf19d19f6a8" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the <em>pGC</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxBEDestroyScratchGCs()</a>, and <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e0e73f84cf8b03259b4077dd0246b59"></a><!-- doxytag: member="dmxgc.h::dmxChangeClip" ref="a1e0e73f84cf8b03259b4077dd0246b59" args="(GCPtr pGC, int type, pointer pvalue, int nrects)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangeClip </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pvalue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nrects</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the clip rects for a GC. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af07df8b118bf78f1ce4b96fa1d0a2401"></a><!-- doxytag: member="dmxgc.h::dmxChangeGC" ref="af07df8b118bf78f1ce4b96fa1d0a2401" args="(GCPtr pGC, unsigned long mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangeGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the values in the graphics context on the back-end server associated with <em>pGC's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a>, <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>, <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv::msc</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae4af2d27e1d593d35696f0bb52fd8302"></a><!-- doxytag: member="dmxgc.h::dmxCopyClip" ref="ae4af2d27e1d593d35696f0bb52fd8302" args="(GCPtr pGCDst, GCPtr pGCSrc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCopyClip </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCSrc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy a GC's clip rects. </p>
+
+<p>References <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, and <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5a4221a9f3552a0abfe0e968991120bf"></a><!-- doxytag: member="dmxgc.h::dmxCopyGC" ref="a5a4221a9f3552a0abfe0e968991120bf" args="(GCPtr pGCSrc, unsigned long changes, GCPtr pGCDst)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCopyGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>changes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGCDst</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy <em>pGCSrc</em> to <em>pGCDst</em> on the back-end server associated with <em>pGCSrc's</em> screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a6b54ac639feed4b767ba31647ac6f8"></a><!-- doxytag: member="dmxgc.h::dmxCreateGC" ref="a6a6b54ac639feed4b767ba31647ac6f8" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a graphics context on the back-end server associated /a pGC's screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxGCFuncs</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">_dmxGCPriv::funcs</a>, <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>, <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv::msc</a>, and <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv::ops</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7661a8add19b4d73e7b5fe6f39ff7cc0"></a><!-- doxytag: member="dmxgc.h::dmxDestroyClip" ref="a7661a8add19b4d73e7b5fe6f39ff7cc0" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyClip </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a GC's clip rects. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f33d96c7308bec0eb74822316c7ff23"></a><!-- doxytag: member="dmxgc.h::dmxDestroyGC" ref="a7f33d96c7308bec0eb74822316c7ff23" args="(GCPtr pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the graphics context, <em>pGC</em> and free the corresponding GC on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3f58b7fe15764f42dfdcf6b9dfdd9146"></a><!-- doxytag: member="dmxgc.h::dmxInitGC" ref="a3f58b7fe15764f42dfdcf6b9dfdd9146" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitGC </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the GC on <em>pScreen</em> </p>
+
+<p>References <a class="el" href="dmx_8h.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad34a918e727baa65bea235ac16b5e08f"></a><!-- doxytag: member="dmxgc.h::dmxValidateGC" ref="ad34a918e727baa65bea235ac16b5e08f" args="(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxValidateGC </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>changes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Validate a graphics context, <em>pGC</em>, locally in the DMX server and recompute the composite clip, if necessary. </p>
+
+<p>References <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">DMX_GC_FUNC_EPILOGUE</a>, <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">DMX_GC_FUNC_PROLOGUE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, and <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv::ops</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxgc_8h.html">dmxgc.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxgc_8h_source.html b/hw/dmx/doc/html/dmxgc_8h_source.html
new file mode 100644
index 0000000..3f095ae
--- /dev/null
+++ b/hw/dmx/doc/html/dmxgc_8h_source.html
@@ -0,0 +1,139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxgc_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxgc.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxgc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXGC_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXGC_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;gcstruct.h&quot;</span>
+<a name="l00041"></a>00041
+<a name="l00043"></a><a class="code" href="struct__dmxGCPriv.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxGCPriv.html">_dmxGCPriv</a> {
+<a name="l00044"></a><a class="code" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">00044</a> GCOps *<a class="code" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">ops</a>;
+<a name="l00045"></a><a class="code" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">00045</a> GCFuncs *<a class="code" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">funcs</a>;
+<a name="l00046"></a><a class="code" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">00046</a> XlibGC <a class="code" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">gc</a>;
+<a name="l00047"></a><a class="code" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">00047</a> Bool <a class="code" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">msc</a>;
+<a name="l00048"></a>00048 } <a class="code" href="dmxgc_8h.html#a2d7a664f045bba899390f66832c1ccf8">dmxGCPrivRec</a>, *<a class="code" href="dmxgc_8h.html#a234db372824505de585d75173374f566">dmxGCPrivPtr</a>;
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 <span class="keyword">extern</span> Bool <a class="code" href="dmxgc_8c.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC</a>(ScreenPtr pScreen);
+<a name="l00052"></a>00052
+<a name="l00053"></a>00053 <span class="keyword">extern</span> Bool <a class="code" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC</a>(GCPtr pGC);
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC</a>(GCPtr pGC, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> changes,
+<a name="l00055"></a>00055 DrawablePtr pDrawable);
+<a name="l00056"></a>00056 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC</a>(GCPtr pGC, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC</a>(GCPtr pGCSrc, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> changes, GCPtr pGCDst);
+<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC</a>(GCPtr pGC);
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip</a>(GCPtr pGC, <span class="keywordtype">int</span> type, pointer pvalue, <span class="keywordtype">int</span> nrects);
+<a name="l00060"></a>00060 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip</a>(GCPtr pGC);
+<a name="l00061"></a>00061 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxCopyClip</a>(GCPtr pGCDst, GCPtr pGCSrc);
+<a name="l00062"></a>00062
+<a name="l00063"></a>00063 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC</a>(ScreenPtr pScreen, GCPtr pGC);
+<a name="l00064"></a>00064 <span class="keyword">extern</span> Bool <a class="code" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC</a>(GCPtr pGC);
+<a name="l00065"></a>00065
+<a name="l00067"></a><a class="code" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">00067</a> <span class="preprocessor">#define DMX_GET_GC_PRIV(_pGC) \</span>
+<a name="l00068"></a>00068 <span class="preprocessor"> (dmxGCPrivPtr)dixLookupPrivate(&amp;(_pGC)-&gt;devPrivates, dmxGCPrivateKey)</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>
+<a name="l00070"></a><a class="code" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">00070</a> <span class="preprocessor">#define DMX_GC_FUNC_PROLOGUE(_pGC) \</span>
+<a name="l00071"></a>00071 <span class="preprocessor">do { \</span>
+<a name="l00072"></a>00072 <span class="preprocessor"> dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \</span>
+<a name="l00073"></a>00073 <span class="preprocessor"> DMX_UNWRAP(funcs, _pGCPriv, (_pGC)); \</span>
+<a name="l00074"></a>00074 <span class="preprocessor"> if (_pGCPriv-&gt;ops) \</span>
+<a name="l00075"></a>00075 <span class="preprocessor"> DMX_UNWRAP(ops, _pGCPriv, (_pGC)); \</span>
+<a name="l00076"></a>00076 <span class="preprocessor">} while (0)</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>
+<a name="l00078"></a><a class="code" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">00078</a> <span class="preprocessor">#define DMX_GC_FUNC_EPILOGUE(_pGC) \</span>
+<a name="l00079"></a>00079 <span class="preprocessor">do { \</span>
+<a name="l00080"></a>00080 <span class="preprocessor"> dmxGCPrivPtr _pGCPriv = DMX_GET_GC_PRIV(_pGC); \</span>
+<a name="l00081"></a>00081 <span class="preprocessor"> DMX_WRAP(funcs, &amp;dmxGCFuncs, _pGCPriv, (_pGC)); \</span>
+<a name="l00082"></a>00082 <span class="preprocessor"> if (_pGCPriv-&gt;ops) \</span>
+<a name="l00083"></a>00083 <span class="preprocessor"> DMX_WRAP(ops, &amp;dmxGCOps, _pGCPriv, (_pGC)); \</span>
+<a name="l00084"></a>00084 <span class="preprocessor">} while (0)</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="preprocessor">#endif </span><span class="comment">/* DMXGC_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxgc_8h.html">dmxgc.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxgcops_8c.html b/hw/dmx/doc/html/dmxgcops_8c.html
new file mode 100644
index 0000000..ac88021
--- /dev/null
+++ b/hw/dmx/doc/html/dmxgcops_8c.html
@@ -0,0 +1,1412 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxgcops_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxgcops.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgc_8h_source.html">dmxgc.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgcops_8h_source.html">dmxgcops.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;mi.h&quot;</code><br/>
+<code>#include &quot;gcstruct.h&quot;</code><br/>
+<code>#include &quot;pixmapstr.h&quot;</code><br/>
+<code>#include &quot;dixfontstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>(_pDraw, _draw)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>(_pDraw)</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#aa70a52ce25b894154a610b0f3fc130cf">dmxFillSpans</a> (DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxSetSpans</a> (DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage</a> (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RegionPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RegionPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment</a> (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle</a> (DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle *pRects)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon</a> (DrawablePtr pDrawable, GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect</a> (DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a3feeb20d71e2368e436633eddf4b13ac">dmxImageGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#ae1200c166d613547b34d0adf04d152ea">dmxPolyGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a2ca1093683e50ef80846d76a83d2f102">dmxPushPixels</a> (GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap</a> (DrawablePtr pDrawable, XID *draw)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage</a> (DrawablePtr pDrawable, int sx, int sy, int w, int h, unsigned int format, unsigned long planeMask, char *pdstLine)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8c.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxGetSpans</a> (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for GC operations. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a95d43c03eb7e78bbe20269c5e7dc6e14"></a><!-- doxytag: member="dmxgcops.c::DMX_GCOPS_OFFSCREEN" ref="a95d43c03eb7e78bbe20269c5e7dc6e14" args="(_pDraw)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GCOPS_OFFSCREEN</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pDraw</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">(!<a class="code" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>[(_pDraw)-&gt;pScreen-&gt;myNum].<a class="code" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">beDisplay</a> || \
+ (<a class="code" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a> &amp;&amp; \
+ (_pDraw)-&gt;type == DRAWABLE_WINDOW &amp;&amp; \
+ (<a class="code" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>((WindowPtr)(_pDraw))-&gt;offscreen || \
+ !<a class="code" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>((WindowPtr)(_pDraw))-&gt;window)))
+</pre></div>
+<p>Referenced by <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, and <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e091318ff2a64af06aef315453b88a2"></a><!-- doxytag: member="dmxgcops.c::DMX_GCOPS_SET_DRAWABLE" ref="a4e091318ff2a64af06aef315453b88a2" args="(_pDraw, _draw)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GCOPS_SET_DRAWABLE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pDraw, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_draw&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ <span class="keywordflow">if</span> ((_pDraw)-&gt;type == DRAWABLE_WINDOW) { \
+ <a class="code" href="struct__dmxWinPriv.html">dmxWinPrivPtr</a> pWinPriv = \
+ <a class="code" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>((WindowPtr)(_pDraw)); \
+ (_draw) = (Drawable)pWinPriv-&gt;<a class="code" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">window</a>; \
+ } <span class="keywordflow">else</span> { \
+ <a class="code" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a> pPixPriv = \
+ <a class="code" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>((PixmapPtr)(_pDraw)); \
+ (_draw) = (Drawable)pPixPriv-&gt;<a class="code" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">pixmap</a>; \
+ } \
+} <span class="keywordflow">while</span> (0)
+</pre></div>
+<p>Referenced by <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, and <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a9165fc8e2f98c6d4d82154a1b52b7c0f"></a><!-- doxytag: member="dmxgcops.c::dmxCopyArea" ref="a9165fc8e2f98c6d4d82154a1b52b7c0f" args="(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegionPtr dmxCopyArea </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dstx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dsty</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy area from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6b3b34e3b0e151d5b2d5f081f6d6e0f"></a><!-- doxytag: member="dmxgcops.c::dmxCopyPlane" ref="aa6b3b34e3b0e151d5b2d5f081f6d6e0f" args="(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegionPtr dmxCopyPlane </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dstx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dsty</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>bitPlane</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy plane number <em>bitPlane</em> from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c24d2a2ddb121d2281084dd4f1361a6"></a><!-- doxytag: member="dmxgcops.c::dmxFillPolygon" ref="a4c24d2a2ddb121d2281084dd4f1361a6" args="(DrawablePtr pDrawable, GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxFillPolygon </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>shape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pPts</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render a filled polygons in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa70a52ce25b894154a610b0f3fc130cf"></a><!-- doxytag: member="dmxgcops.c::dmxFillSpans" ref="aa70a52ce25b894154a610b0f3fc130cf" args="(DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxFillSpans </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nInit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pptInit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>pwidthInit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fSorted</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill spans -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad44d59f0e4f0c77ca7278cb5d31f0121"></a><!-- doxytag: member="dmxgcops.c::dmxFindAlternatePixmap" ref="ad44d59f0e4f0c77ca7278cb5d31f0121" args="(DrawablePtr pDrawable, XID *draw)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxFindAlternatePixmap </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XID *&#160;</td>
+ <td class="paramname"><em>draw</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>When Xinerama is active, the client pixmaps are always obtained from screen 0. When screen 0 is detached, the pixmaps must be obtained from any other screen that is not detached. Usually, this is screen 1. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ace88d57bbb8edfcdc3e7206e59c1e30f"></a><!-- doxytag: member="dmxgcops.c::dmxGetImage" ref="ace88d57bbb8edfcdc3e7206e59c1e30f" args="(DrawablePtr pDrawable, int sx, int sy, int w, int h, unsigned int format, unsigned long planeMask, char *pdstLine)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetImage </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>sx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>sy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>planeMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>pdstLine</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get an image from the back-end server associated with <em>pDrawable's</em> screen. If <em>pDrawable</em> is a window, it must be viewable to get an image from it. If it is not viewable, then get the image from the first ancestor of <em>pDrawable</em> that is viewable. If no viewable ancestor is found, then simply return without getting an image. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2a6026c8f03a56ca5ab93dc2c9cf868f"></a><!-- doxytag: member="dmxgcops.c::dmxGetSpans" ref="a2a6026c8f03a56ca5ab93dc2c9cf868f" args="(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetSpans </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>wMax</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>ppt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>pwidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nspans</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>pdstStart</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get Spans -- this function should never be called. </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3feeb20d71e2368e436633eddf4b13ac"></a><!-- doxytag: member="dmxgcops.c::dmxImageGlyphBlt" ref="a3feeb20d71e2368e436633eddf4b13ac" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxImageGlyphBlt </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>nglyph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CharInfoPtr *&#160;</td>
+ <td class="paramname"><em>ppci</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pglyphBase</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Image Glyph Blt -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="acb19f9ef082c76f281679994057fafe1"></a><!-- doxytag: member="dmxgcops.c::dmxImageText16" ref="acb19f9ef082c76f281679994057fafe1" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxImageText16 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned short *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 16-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1fc863ca944469fc34d78db948f14053"></a><!-- doxytag: member="dmxgcops.c::dmxImageText8" ref="a1fc863ca944469fc34d78db948f14053" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxImageText8 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 8-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c4ff7ddf5b1a31d11e9124dc18f69f0"></a><!-- doxytag: member="dmxgcops.c::dmxPolyArc" ref="a7c4ff7ddf5b1a31d11e9124dc18f69f0" args="(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyArc </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>narcs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xArc *&#160;</td>
+ <td class="paramname"><em>parcs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of arc outlines, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5488891f016532e40ba5e31466fb67fd"></a><!-- doxytag: member="dmxgcops.c::dmxPolyFillArc" ref="a5488891f016532e40ba5e31466fb67fd" args="(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyFillArc </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>narcs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xArc *&#160;</td>
+ <td class="paramname"><em>parcs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of filled arcs, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d7eee30be7b445772f875b8cc1c8e0a"></a><!-- doxytag: member="dmxgcops.c::dmxPolyFillRect" ref="a7d7eee30be7b445772f875b8cc1c8e0a" args="(DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyFillRect </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nrectFill</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>prectInit</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of filled rectangles, <em>prectInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae1200c166d613547b34d0adf04d152ea"></a><!-- doxytag: member="dmxgcops.c::dmxPolyGlyphBlt" ref="ae1200c166d613547b34d0adf04d152ea" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyGlyphBlt </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>nglyph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CharInfoPtr *&#160;</td>
+ <td class="paramname"><em>ppci</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pglyphBase</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Poly Glyph Blt -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="abd3dea8c777a8e39ffbf2b9fa8e1405e"></a><!-- doxytag: member="dmxgcops.c::dmxPolylines" ref="abd3dea8c777a8e39ffbf2b9fa8e1405e" args="(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolylines </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pptInit</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of connected lines, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a03892f8e655a4bb743a264f121b096c6"></a><!-- doxytag: member="dmxgcops.c::dmxPolyPoint" ref="a03892f8e655a4bb743a264f121b096c6" args="(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyPoint </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pptInit</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of points, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6bc862a4f475154ff9ff5f30a0ffcf89"></a><!-- doxytag: member="dmxgcops.c::dmxPolyRectangle" ref="a6bc862a4f475154ff9ff5f30a0ffcf89" args="(DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle *pRects)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyRectangle </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nrects</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>pRects</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of rectangle outlines, <em>pRects</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9592aeb83549cbe036a47e9ac90dbf36"></a><!-- doxytag: member="dmxgcops.c::dmxPolySegment" ref="a9592aeb83549cbe036a47e9ac90dbf36" args="(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolySegment </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nseg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xSegment *&#160;</td>
+ <td class="paramname"><em>pSegs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of disjoint segments, <em>pSegs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2fe37b5892867df4c29292c975c17e52"></a><!-- doxytag: member="dmxgcops.c::dmxPolyText16" ref="a2fe37b5892867df4c29292c975c17e52" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPolyText16 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned short *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 16-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9b3a993a29bb01745ddbf7bd9ff97ef5"></a><!-- doxytag: member="dmxgcops.c::dmxPolyText8" ref="a9b3a993a29bb01745ddbf7bd9ff97ef5" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPolyText8 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 8-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ca1093683e50ef80846d76a83d2f102"></a><!-- doxytag: member="dmxgcops.c::dmxPushPixels" ref="a2ca1093683e50ef80846d76a83d2f102" args="(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPushPixels </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pBitMap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Push Pixels -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae1e930ec29cf8bd07acd6ccee4a548a3"></a><!-- doxytag: member="dmxgcops.c::dmxPutImage" ref="ae1e930ec29cf8bd07acd6ccee4a548a3" args="(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPutImage </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>depth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>leftPad</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>pBits</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Transfer <em>pBits</em> image to back-end server associated with <em>pDrawable's</em> screen. If primitive subdivision optimization is enabled, then only transfer the sections of <em>pBits</em> that are visible (i.e., not-clipped) to the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5fa3b658c712aa8a4f48a27eca05730d"></a><!-- doxytag: member="dmxgcops.c::dmxSetSpans" ref="a5fa3b658c712aa8a4f48a27eca05730d" args="(DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetSpans </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>psrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>ppt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>pwidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nspans</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fSorted</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set spans -- this function should never be called. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxgcops_8c.html">dmxgcops.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxgcops_8h.html b/hw/dmx/doc/html/dmxgcops_8h.html
new file mode 100644
index 0000000..8d401d1
--- /dev/null
+++ b/hw/dmx/doc/html/dmxgcops_8h.html
@@ -0,0 +1,1302 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxgcops_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxgcops.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxgcops_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#aa70a52ce25b894154a610b0f3fc130cf">dmxFillSpans</a> (DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxSetSpans</a> (DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage</a> (DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RegionPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RegionPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane</a> (DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines</a> (DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment</a> (DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle</a> (DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle *pRects)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon</a> (DrawablePtr pDrawable, GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect</a> (DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc</a> (DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a3feeb20d71e2368e436633eddf4b13ac">dmxImageGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#ae1200c166d613547b34d0adf04d152ea">dmxPolyGlyphBlt</a> (DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a2ca1093683e50ef80846d76a83d2f102">dmxPushPixels</a> (GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage</a> (DrawablePtr pDrawable, int sx, int sy, int w, int h, unsigned int format, unsigned long planeMask, char *pdstLine)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxgcops_8h.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxGetSpans</a> (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for gcops support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxgcops_8c.html">dmxgcops.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a9165fc8e2f98c6d4d82154a1b52b7c0f"></a><!-- doxytag: member="dmxgcops.h::dmxCopyArea" ref="a9165fc8e2f98c6d4d82154a1b52b7c0f" args="(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int w, int h, int dstx, int dsty)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegionPtr dmxCopyArea </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dstx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dsty</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy area from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6b3b34e3b0e151d5b2d5f081f6d6e0f"></a><!-- doxytag: member="dmxgcops.h::dmxCopyPlane" ref="aa6b3b34e3b0e151d5b2d5f081f6d6e0f" args="(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, int srcx, int srcy, int width, int height, int dstx, int dsty, unsigned long bitPlane)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegionPtr dmxCopyPlane </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>srcy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dstx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>dsty</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>bitPlane</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy plane number <em>bitPlane</em> from <em>pSrc</em> drawable to <em>pDst</em> drawable on the back-end server associated with <em>pSrc</em> drawable's screen. If the offscreen optimization is enabled, only copy when both <em>pSrc</em> and <em>pDst</em> are at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c24d2a2ddb121d2281084dd4f1361a6"></a><!-- doxytag: member="dmxgcops.h::dmxFillPolygon" ref="a4c24d2a2ddb121d2281084dd4f1361a6" args="(DrawablePtr pDrawable, GCPtr pGC, int shape, int mode, int count, DDXPointPtr pPts)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxFillPolygon </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>shape</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pPts</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render a filled polygons in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa70a52ce25b894154a610b0f3fc130cf"></a><!-- doxytag: member="dmxgcops.h::dmxFillSpans" ref="aa70a52ce25b894154a610b0f3fc130cf" args="(DrawablePtr pDrawable, GCPtr pGC, int nInit, DDXPointPtr pptInit, int *pwidthInit, int fSorted)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxFillSpans </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nInit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pptInit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>pwidthInit</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fSorted</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill spans -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="ace88d57bbb8edfcdc3e7206e59c1e30f"></a><!-- doxytag: member="dmxgcops.h::dmxGetImage" ref="ace88d57bbb8edfcdc3e7206e59c1e30f" args="(DrawablePtr pDrawable, int sx, int sy, int w, int h, unsigned int format, unsigned long planeMask, char *pdstLine)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetImage </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>sx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>sy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>planeMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>pdstLine</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get an image from the back-end server associated with <em>pDrawable's</em> screen. If <em>pDrawable</em> is a window, it must be viewable to get an image from it. If it is not viewable, then get the image from the first ancestor of <em>pDrawable</em> that is viewable. If no viewable ancestor is found, then simply return without getting an image. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2a6026c8f03a56ca5ab93dc2c9cf868f"></a><!-- doxytag: member="dmxgcops.h::dmxGetSpans" ref="a2a6026c8f03a56ca5ab93dc2c9cf868f" args="(DrawablePtr pDrawable, int wMax, DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetSpans </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>wMax</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>ppt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>pwidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nspans</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>pdstStart</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get Spans -- this function should never be called. </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3feeb20d71e2368e436633eddf4b13ac"></a><!-- doxytag: member="dmxgcops.h::dmxImageGlyphBlt" ref="a3feeb20d71e2368e436633eddf4b13ac" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxImageGlyphBlt </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>nglyph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CharInfoPtr *&#160;</td>
+ <td class="paramname"><em>ppci</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pglyphBase</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Image Glyph Blt -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="acb19f9ef082c76f281679994057fafe1"></a><!-- doxytag: member="dmxgcops.h::dmxImageText16" ref="acb19f9ef082c76f281679994057fafe1" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxImageText16 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned short *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 16-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1fc863ca944469fc34d78db948f14053"></a><!-- doxytag: member="dmxgcops.h::dmxImageText8" ref="a1fc863ca944469fc34d78db948f14053" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxImageText8 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 8-bit <em>chars</em> (both foreground and background) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c4ff7ddf5b1a31d11e9124dc18f69f0"></a><!-- doxytag: member="dmxgcops.h::dmxPolyArc" ref="a7c4ff7ddf5b1a31d11e9124dc18f69f0" args="(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyArc </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>narcs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xArc *&#160;</td>
+ <td class="paramname"><em>parcs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of arc outlines, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5488891f016532e40ba5e31466fb67fd"></a><!-- doxytag: member="dmxgcops.h::dmxPolyFillArc" ref="a5488891f016532e40ba5e31466fb67fd" args="(DrawablePtr pDrawable, GCPtr pGC, int narcs, xArc *parcs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyFillArc </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>narcs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xArc *&#160;</td>
+ <td class="paramname"><em>parcs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of filled arcs, <em>parcs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d7eee30be7b445772f875b8cc1c8e0a"></a><!-- doxytag: member="dmxgcops.h::dmxPolyFillRect" ref="a7d7eee30be7b445772f875b8cc1c8e0a" args="(DrawablePtr pDrawable, GCPtr pGC, int nrectFill, xRectangle *prectInit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyFillRect </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nrectFill</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>prectInit</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of filled rectangles, <em>prectInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae1200c166d613547b34d0adf04d152ea"></a><!-- doxytag: member="dmxgcops.h::dmxPolyGlyphBlt" ref="ae1200c166d613547b34d0adf04d152ea" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, unsigned int nglyph, CharInfoPtr *ppci, pointer pglyphBase)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyGlyphBlt </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>nglyph</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CharInfoPtr *&#160;</td>
+ <td class="paramname"><em>ppci</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pglyphBase</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Poly Glyph Blt -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="abd3dea8c777a8e39ffbf2b9fa8e1405e"></a><!-- doxytag: member="dmxgcops.h::dmxPolylines" ref="abd3dea8c777a8e39ffbf2b9fa8e1405e" args="(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolylines </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pptInit</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of connected lines, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a03892f8e655a4bb743a264f121b096c6"></a><!-- doxytag: member="dmxgcops.h::dmxPolyPoint" ref="a03892f8e655a4bb743a264f121b096c6" args="(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyPoint </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>pptInit</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of points, <em>pptInit</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6bc862a4f475154ff9ff5f30a0ffcf89"></a><!-- doxytag: member="dmxgcops.h::dmxPolyRectangle" ref="a6bc862a4f475154ff9ff5f30a0ffcf89" args="(DrawablePtr pDrawable, GCPtr pGC, int nrects, xRectangle *pRects)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolyRectangle </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nrects</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>pRects</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of rectangle outlines, <em>pRects</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9592aeb83549cbe036a47e9ac90dbf36"></a><!-- doxytag: member="dmxgcops.h::dmxPolySegment" ref="a9592aeb83549cbe036a47e9ac90dbf36" args="(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSegs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPolySegment </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nseg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xSegment *&#160;</td>
+ <td class="paramname"><em>pSegs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render list of disjoint segments, <em>pSegs</em> in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2fe37b5892867df4c29292c975c17e52"></a><!-- doxytag: member="dmxgcops.h::dmxPolyText16" ref="a2fe37b5892867df4c29292c975c17e52" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, unsigned short *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPolyText16 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned short *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 16-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9b3a993a29bb01745ddbf7bd9ff97ef5"></a><!-- doxytag: member="dmxgcops.h::dmxPolyText8" ref="a9b3a993a29bb01745ddbf7bd9ff97ef5" args="(DrawablePtr pDrawable, GCPtr pGC, int x, int y, int count, char *chars)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPolyText8 </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>count</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>chars</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Render string of 8-bit <em>chars</em> (foreground only) in <em>pDrawable</em> on the back-end server associated with <em>pDrawable's</em> screen. If the offscreen optimization is enabled, only draw when <em>pDrawable</em> is at least partially visible. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ca1093683e50ef80846d76a83d2f102"></a><!-- doxytag: member="dmxgcops.h::dmxPushPixels" ref="a2ca1093683e50ef80846d76a83d2f102" args="(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst, int w, int h, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPushPixels </td>
+ <td>(</td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pBitMap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Push Pixels -- this function should never be called. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae1e930ec29cf8bd07acd6ccee4a548a3"></a><!-- doxytag: member="dmxgcops.h::dmxPutImage" ref="ae1e930ec29cf8bd07acd6ccee4a548a3" args="(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y, int w, int h, int leftPad, int format, char *pBits)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPutImage </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>depth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>leftPad</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>pBits</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Transfer <em>pBits</em> image to back-end server associated with <em>pDrawable's</em> screen. If primitive subdivision optimization is enabled, then only transfer the sections of <em>pBits</em> that are visible (i.e., not-clipped) to the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">DMX_GCOPS_OFFSCREEN</a>, <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">DMX_GCOPS_SET_DRAWABLE</a>, <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5fa3b658c712aa8a4f48a27eca05730d"></a><!-- doxytag: member="dmxgcops.h::dmxSetSpans" ref="a5fa3b658c712aa8a4f48a27eca05730d" args="(DrawablePtr pDrawable, GCPtr pGC, char *psrc, DDXPointPtr ppt, int *pwidth, int nspans, int fSorted)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetSpans </td>
+ <td>(</td>
+ <td class="paramtype">DrawablePtr&#160;</td>
+ <td class="paramname"><em>pDrawable</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GCPtr&#160;</td>
+ <td class="paramname"><em>pGC</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>psrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointPtr&#160;</td>
+ <td class="paramname"><em>ppt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>pwidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nspans</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fSorted</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set spans -- this function should never be called. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxgcops_8h.html">dmxgcops.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxgcops_8h_source.html b/hw/dmx/doc/html/dmxgcops_8h_source.html
new file mode 100644
index 0000000..cf0fe33
--- /dev/null
+++ b/hw/dmx/doc/html/dmxgcops_8h_source.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxgcops_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxgcops.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxgcops_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXGCOPS_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXGCOPS_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#aa70a52ce25b894154a610b0f3fc130cf">dmxFillSpans</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00041"></a>00041 <span class="keywordtype">int</span> nInit, DDXPointPtr pptInit, <span class="keywordtype">int</span> *pwidthInit,
+<a name="l00042"></a>00042 <span class="keywordtype">int</span> fSorted);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxSetSpans</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00044"></a>00044 <span class="keywordtype">char</span> *psrc, DDXPointPtr ppt, <span class="keywordtype">int</span> *pwidth, <span class="keywordtype">int</span> nspans,
+<a name="l00045"></a>00045 <span class="keywordtype">int</span> fSorted);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00047"></a>00047 <span class="keywordtype">int</span> depth, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h,
+<a name="l00048"></a>00048 <span class="keywordtype">int</span> leftPad, <span class="keywordtype">int</span> format, <span class="keywordtype">char</span> *pBits);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> RegionPtr <a class="code" href="dmxgcops_8c.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea</a>(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
+<a name="l00050"></a>00050 <span class="keywordtype">int</span> srcx, <span class="keywordtype">int</span> srcy, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h,
+<a name="l00051"></a>00051 <span class="keywordtype">int</span> dstx, <span class="keywordtype">int</span> dsty);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> RegionPtr <a class="code" href="dmxgcops_8c.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane</a>(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC,
+<a name="l00053"></a>00053 <span class="keywordtype">int</span> srcx, <span class="keywordtype">int</span> srcy, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height,
+<a name="l00054"></a>00054 <span class="keywordtype">int</span> dstx, <span class="keywordtype">int</span> dsty, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bitPlane);
+<a name="l00055"></a>00055 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00056"></a>00056 <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> npt, DDXPointPtr pptInit);
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00058"></a>00058 <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> npt, DDXPointPtr pptInit);
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00060"></a>00060 <span class="keywordtype">int</span> nseg, xSegment *pSegs);
+<a name="l00061"></a>00061 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00062"></a>00062 <span class="keywordtype">int</span> nrects, xRectangle *pRects);
+<a name="l00063"></a>00063 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00064"></a>00064 <span class="keywordtype">int</span> narcs, xArc *parcs);
+<a name="l00065"></a>00065 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00066"></a>00066 <span class="keywordtype">int</span> shape, <span class="keywordtype">int</span> mode, <span class="keywordtype">int</span> count, DDXPointPtr pPts);
+<a name="l00067"></a>00067 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00068"></a>00068 <span class="keywordtype">int</span> nrectFill, xRectangle *prectInit);
+<a name="l00069"></a>00069 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00070"></a>00070 <span class="keywordtype">int</span> narcs, xArc *parcs);
+<a name="l00071"></a>00071 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxgcops_8c.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00072"></a>00072 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">char</span> *chars);
+<a name="l00073"></a>00073 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxgcops_8c.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00074"></a>00074 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> *chars);
+<a name="l00075"></a>00075 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00076"></a>00076 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">char</span> *chars);
+<a name="l00077"></a>00077 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00078"></a>00078 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> count, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> *chars);
+<a name="l00079"></a>00079 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a3feeb20d71e2368e436633eddf4b13ac">dmxImageGlyphBlt</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00080"></a>00080 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nglyph,
+<a name="l00081"></a>00081 CharInfoPtr *ppci, pointer pglyphBase);
+<a name="l00082"></a>00082 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#ae1200c166d613547b34d0adf04d152ea">dmxPolyGlyphBlt</a>(DrawablePtr pDrawable, GCPtr pGC,
+<a name="l00083"></a>00083 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nglyph,
+<a name="l00084"></a>00084 CharInfoPtr *ppci, pointer pglyphBase);
+<a name="l00085"></a>00085 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a2ca1093683e50ef80846d76a83d2f102">dmxPushPixels</a>(GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDst,
+<a name="l00086"></a>00086 <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00087"></a>00087
+<a name="l00088"></a>00088 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage</a>(DrawablePtr pDrawable, <span class="keywordtype">int</span> sx, <span class="keywordtype">int</span> sy, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h,
+<a name="l00089"></a>00089 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> format, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> planeMask,
+<a name="l00090"></a>00090 <span class="keywordtype">char</span> *pdstLine);
+<a name="l00091"></a>00091 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxgcops_8c.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxGetSpans</a>(DrawablePtr pDrawable, <span class="keywordtype">int</span> wMax,
+<a name="l00092"></a>00092 DDXPointPtr ppt, <span class="keywordtype">int</span> *pwidth, <span class="keywordtype">int</span> nspans,
+<a name="l00093"></a>00093 <span class="keywordtype">char</span> *pdstStart);
+<a name="l00094"></a>00094
+<a name="l00095"></a>00095 <span class="preprocessor">#endif </span><span class="comment">/* DMXGCOPS_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxgcops_8h.html">dmxgcops.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinit_8c.html b/hw/dmx/doc/html/dmxinit_8c.html
new file mode 100644
index 0000000..7a15f25
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinit_8c.html
@@ -0,0 +1,900 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinit_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxinit.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinit_8h_source.html">dmxinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxscrinit_8h_source.html">dmxscrinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcursor_8h_source.html">dmxcursor.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxfont_8h_source.html">dmxfont.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxconfig_8h_source.html">config/dmxconfig.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcb_8h_source.html">dmxcb.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprop_8h_source.html">dmxprop.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxstat_8h_source.html">dmxstat.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&quot;</code><br/>
+<code>#include &lt;X11/Xos.h&gt;</code><br/>
+<code>#include &quot;dixstruct.h&quot;</code><br/>
+<code>#include &lt;signal.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a9ddbdcc93fbd282591a6658afc26faac">DMX_ERROR_BUF_SIZE</a>&#160;&#160;&#160;256</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler</a> (Display *dpy, XErrorEvent *ev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats</a> (ScreenInfo *pScreenInfo, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a48c537b2dc0c7e3acf70c1b60c211bae">dmxExecOS</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#ac1f3e1fa60f11e75fe94b7629ec8c0f0">dmxBuildCompiler</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a609d59c7622777da5af1930d07b06e20">dmxExecHost</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput</a> (ScreenInfo *pScreenInfo, int argc, char *argv[])</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a18cb12b28844e363b3f43b3b3582d214">dmxSetDefaultFontPath</a> (char *fp)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">AbortDDX</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a37656cea0c901129a2feb6564a6dbfea">ddxGiveUp</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a01064ddfa83f5ae5440a15e6d4121af6">OsVendorInit</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#adaf9384688ad8a12254ccb5ce594c3e1">OsVendorFatalError</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a> (int argc, char *argv[], int i)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#add8bf8bb09cff9a75fb84594b08baa5a">ddxUseMsg</a> (void)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a> = FALSE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XErrorEvent&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxLastErrorEvent</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxErrorOccurred</a> = FALSE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a> = NULL</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a> = TRUE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a> = TRUE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a> = TRUE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a> = TRUE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a> = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxGLXProxy</a> = FALSE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a> = FALSE</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8c.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a> = FALSE</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide expected functions for initialization from the ddx layer and global variables for the DMX server. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a9ddbdcc93fbd282591a6658afc26faac"></a><!-- doxytag: member="dmxinit.c::DMX_ERROR_BUF_SIZE" ref="a9ddbdcc93fbd282591a6658afc26faac" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_ERROR_BUF_SIZE&#160;&#160;&#160;256</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a240efc1ef89432ea436d61512e7b1ca6"></a><!-- doxytag: member="dmxinit.c::AbortDDX" ref="a240efc1ef89432ea436d61512e7b1ca6" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void AbortDDX </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function is called in Xserver/os/utils.c from <em><a class="el" href="dmxlog_8c.html#a50d079f944b71e881c0c58562f96c6ad">AbortServer()</a></em>. We must ensure that backend and console state is restored in the event the server shutdown wasn't clean. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, and <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a37656cea0c901129a2feb6564a6dbfea">ddxGiveUp()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a37656cea0c901129a2feb6564a6dbfea"></a><!-- doxytag: member="dmxinit.c::ddxGiveUp" ref="a37656cea0c901129a2feb6564a6dbfea" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ddxGiveUp </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function is called in Xserver/dix/main.c from <em><a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a></em> when dispatchException &amp; DE_TERMINATE (which is the only way to exit the main loop without an interruption. </p>
+
+<p>References <a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">AbortDDX()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ed0a235a6d852bfe0cc0250159a5daf"></a><!-- doxytag: member="dmxinit.c::ddxProcessArgument" ref="a6ed0a235a6d852bfe0cc0250159a5daf" args="(int argc, char *argv[], int i)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ddxProcessArgument </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[], </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>i</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Process our command line arguments. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>, <a class="el" href="dmxconfig_8c.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, <a class="el" href="dmxconfig_8h.html#ad072d4dab0b5b0623c9b6d1b3b57e23a">dmxConfigSetXkbLayout()</a>, <a class="el" href="dmxconfig_8h.html#ab9b9a8c70f9fd1b051187c47427f4999">dmxConfigSetXkbModel()</a>, <a class="el" href="dmxconfig_8h.html#aef54e09cba9b65acbdcb6568de54b2b6">dmxConfigSetXkbOptions()</a>, <a class="el" href="dmxconfig_8h.html#ae3270803aaa7990900d8c123f2181485">dmxConfigSetXkbRules()</a>, <a class="el" href="dmxconfig_8h.html#af8922109f7462e6e246d8e06f1e21c5b">dmxConfigSetXkbVariant()</a>, <a class="el" href="dmxconfig_8c.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig()</a>, <a class="el" href="dmxconfig_8c.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>, <a class="el" href="dmxconfig_8c.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile()</a>, <a class="el" href="dmxconfig_8c.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput()</a>, <a class="el" href="dmxconfig_8c.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput()</a>, <a class="el" href="dmxcursor_8c.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxCursorNoMulti()</a>, <a class="el" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a>, <a class="el" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxGLXProxy</a>, <a class="el" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a>, <a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a>, <a class="el" href="dmxinit_8c.html#a18cb12b28844e363b3f43b3b3582d214">dmxSetDefaultFontPath()</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxstat_8c.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate()</a>, <a class="el" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a>, <a class="el" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate()</a>, <a class="el" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="add8bf8bb09cff9a75fb84594b08baa5a"></a><!-- doxytag: member="dmxinit.c::ddxUseMsg" ref="add8bf8bb09cff9a75fb84594b08baa5a" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ddxUseMsg </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Provide succinct usage information for the DMX server. </p>
+
+</div>
+</div>
+<a class="anchor" id="ac1f3e1fa60f11e75fe94b7629ec8c0f0"></a><!-- doxytag: member="dmxinit.c::dmxBuildCompiler" ref="ac1f3e1fa60f11e75fe94b7629ec8c0f0" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static const char* dmxBuildCompiler </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a339a0fdeb357fee53a56ba268c66b68d"></a><!-- doxytag: member="dmxinit.c::dmxCheckForWM" ref="a339a0fdeb357fee53a56ba268c66b68d" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCheckForWM </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">_DMXScreenInfo::WMRunningOnBE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25595691f1a78098823fd5cce077d9be"></a><!-- doxytag: member="dmxinit.c::dmxDisplayInit" ref="a25595691f1a78098823fd5cce077d9be" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDisplayInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the display and collect relevant information about the display properties </p>
+
+<p>References <a class="el" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>, <a class="el" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, <a class="el" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>, <a class="el" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab63a915fb3dc8db86b284bc7f98a01b1"></a><!-- doxytag: member="dmxinit.c::dmxErrorHandler" ref="ab63a915fb3dc8db86b284bc7f98a01b1" args="(Display *dpy, XErrorEvent *ev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XErrorEvent *&#160;</td>
+ <td class="paramname"><em>ev</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinit_8c.html#a9ddbdcc93fbd282591a6658afc26faac">DMX_ERROR_BUF_SIZE</a>, <a class="el" href="dmx_8h.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxErrorOccurred</a>, <a class="el" href="dmx_8h.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxLastErrorEvent</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a609d59c7622777da5af1930d07b06e20"></a><!-- doxytag: member="dmxinit.c::dmxExecHost" ref="a609d59c7622777da5af1930d07b06e20" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static const char* dmxExecHost </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48c537b2dc0c7e3acf70c1b60c211bae"></a><!-- doxytag: member="dmxinit.c::dmxExecOS" ref="a48c537b2dc0c7e3acf70c1b60c211bae" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static const char* dmxExecOS </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a04bd6a93ac85484e9eba0dcec858edf3"></a><!-- doxytag: member="dmxinit.c::dmxGetColormaps" ref="a04bd6a93ac85484e9eba0dcec858edf3" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetColormaps </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo::beBlackPixel</a>, <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo::beWhitePixel</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe45fd724cbfceb085e23ac62e276afd"></a><!-- doxytag: member="dmxinit.c::dmxGetPixmapFormats" ref="abe45fd724cbfceb085e23ac62e276afd" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetPixmapFormats </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaed1209f913cb233d4e093282ed829ef"></a><!-- doxytag: member="dmxinit.c::dmxGetScreenAttribs" ref="aaed1209f913cb233d4e093282ed829ef" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetScreenAttribs </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a>, <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo::beYDPI</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">_DMXScreenInfo::scrnXSign</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, and <a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">_DMXScreenInfo::scrnYSign</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ae3c95f86743822940a155e6770663d"></a><!-- doxytag: member="dmxinit.c::dmxGetVisualInfo" ref="a6ae3c95f86743822940a155e6770663d" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxGetVisualInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a>, and <a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe5a8715282907a3ffd7b992c8dd3661"></a><!-- doxytag: member="dmxinit.c::dmxOpenDisplay" ref="abe5a8715282907a3ffd7b992c8dd3661" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxOpenDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8f00de6f3ccc2c1af274ae74c07c53b"></a><!-- doxytag: member="dmxinit.c::dmxPrintScreenInfo" ref="ab8f00de6f3ccc2c1af274ae74c07c53b" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxPrintScreenInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont()</a>, <a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">_DMXScreenInfo::WMRunningOnBE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a18cb12b28844e363b3f43b3b3582d214"></a><!-- doxytag: member="dmxinit.c::dmxSetDefaultFontPath" ref="a18cb12b28844e363b3f43b3b3582d214" args="(char *fp)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSetDefaultFontPath </td>
+ <td>(</td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>fp</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2f19c6c0750ea1defb702c2d6231e4a8"></a><!-- doxytag: member="dmxinit.c::dmxSetErrorHandler" ref="a2f19c6c0750ea1defb702c2d6231e4a8" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a079d21ac984182efb7bb07bfa242f743"></a><!-- doxytag: member="dmxinit.c::dmxSetPixmapFormats" ref="a079d21ac984182efb7bb07bfa242f743" args="(ScreenInfo *pScreenInfo, DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxSetPixmapFormats </td>
+ <td>(</td>
+ <td class="paramtype">ScreenInfo *&#160;</td>
+ <td class="paramname"><em>pScreenInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a51c195c51f4f09e981384a4215f82321"></a><!-- doxytag: member="dmxinit.c::InitOutput" ref="a51c195c51f4f09e981384a4215f82321" args="(ScreenInfo *pScreenInfo, int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void InitOutput </td>
+ <td>(</td>
+ <td class="paramtype">ScreenInfo *&#160;</td>
+ <td class="paramname"><em>pScreenInfo</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called in Xserver/dix/main.c from <em><a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a></em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">DMX_NO_RECOMPUTE_BOUNDING_BOX</a>, <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a>, <a class="el" href="dmxinit_8c.html#ac1f3e1fa60f11e75fe94b7629ec8c0f0">dmxBuildCompiler()</a>, <a class="el" href="dmxcb_8c.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxcb_8c.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>, <a class="el" href="dmxinit_8c.html#a609d59c7622777da5af1930d07b06e20">dmxExecHost()</a>, <a class="el" href="dmxinit_8c.html#a48c537b2dc0c7e3acf70c1b60c211bae">dmxExecOS()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxGLXProxy</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxfont_8c.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxInitFonts()</a>, <a class="el" href="dmxcursor_8c.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8c.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxpict_8c.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>, <a class="el" href="dmxinput_8h.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, <a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a>, <a class="el" href="dmxscrinit_8c.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats()</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxstat_8c.html#a23687b91d203902bb293ba64c391cee4">dmxStatFree()</a>, <a class="el" href="dmxstat_8c.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit()</a>, <a class="el" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="dmx__glxvisuals_8c.html#a0ec26db964e7f051b0c53fa80f0ca64f">GetGLXFBConfigs()</a>, <a class="el" href="dmx__glxvisuals_8c.html#abe57e7081e90397658ffe52225891023">GetGLXVisualConfigs()</a>, <a class="el" href="dmx__glxvisuals_8c.html#a8c817583455230eb81b38c9fcdf3d363">GetGLXVisualConfigsFromFBConfigs()</a>, <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo::stat</a>, <a class="el" href="dmx-config_8h.html#aca03501ac22663ba1d6dcff24b2dd30f">VENDOR_RELEASE</a>, <a class="el" href="dmx-config_8h.html#a48a30090778ac60d0fdd8648ae0cac57">VENDOR_STRING</a>, <a class="el" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">dmxGlxVisualPrivate::x_visual_class</a>, and <a class="el" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">dmxGlxVisualPrivate::x_visual_depth</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adaf9384688ad8a12254ccb5ce594c3e1"></a><!-- doxytag: member="dmxinit.c::OsVendorFatalError" ref="adaf9384688ad8a12254ccb5ce594c3e1" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void OsVendorFatalError </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function is called in Xserver/os/utils.c from <em>FatalError()</em> and <em><a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">VFatalError()</a></em>. (Note that setting the function pointer <em>OsVendorVErrorFProc</em> will cause <em>VErrorF()</em> (which is called by the two routines mentioned here, as well as by others) to use the referenced routine instead of <em>vfprintf()</em>.) </p>
+
+<p>Referenced by <a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">VFatalError()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a01064ddfa83f5ae5440a15e6d4121af6"></a><!-- doxytag: member="dmxinit.c::OsVendorInit" ref="a01064ddfa83f5ae5440a15e6d4121af6" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void OsVendorInit </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function is called in Xserver/os/osinit.c from <em>OsInit()</em>. </p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a8d53c22ed93cbef2684016d3c7638671"></a><!-- doxytag: member="dmxinit.c::dmxAddRemoveScreens" ref="a8d53c22ed93cbef2684016d3c7638671" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a8d53c22ed93cbef2684016d3c7638671">dmxAddRemoveScreens</a> = FALSE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if add and remove screens support is enabled </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad2d0e8e1a260d9fdb7ea3a980d5fce8b"></a><!-- doxytag: member="dmxinit.c::dmxDepth" ref="ad2d0e8e1a260d9fdb7ea3a980d5fce8b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinit_8c.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a> = 0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Requested depth if non-zero </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9a817996c23e8669c5d9a8dc25e8cb51"></a><!-- doxytag: member="dmxinit.c::dmxErrorOccurred" ref="a9a817996c23e8669c5d9a8dc25e8cb51" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxErrorOccurred</a> = FALSE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if an error occurred </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a10581b0cb51e730e26cbc08913a76c5f"></a><!-- doxytag: member="dmxinit.c::dmxFontPath" ref="a10581b0cb51e730e26cbc08913a76c5f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxinit_8c.html#a10581b0cb51e730e26cbc08913a76c5f">dmxFontPath</a> = NULL</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>NULL if no font path is set on the command line; otherwise, a string of comma separated paths built from the command line specified font paths </p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, and <a class="el" href="dmxinit_8c.html#a18cb12b28844e363b3f43b3b3582d214">dmxSetDefaultFontPath()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0253d9b4aa523bbdee8aaafbe63c1a4"></a><!-- doxytag: member="dmxinit.c::dmxGLXProxy" ref="ae0253d9b4aa523bbdee8aaafbe63c1a4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxGLXProxy</a> = FALSE<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2eb1403caea1e0c8ac3cb9d1edc8d3c6"></a><!-- doxytag: member="dmxinit.c::dmxIgnoreBadFontPaths" ref="a2eb1403caea1e0c8ac3cb9d1edc8d3c6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxIgnoreBadFontPaths</a> = FALSE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if bad font paths should be ignored during server init </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a067017d9e67716c251357e9edf917e59"></a><!-- doxytag: member="dmxinit.c::dmxInputs" ref="a067017d9e67716c251357e9edf917e59" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of inputs </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxBlockHandler()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>, <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>, and <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf5b80f46b3ba1e46d7f1f12cfb158f"></a><!-- doxytag: member="dmxinit.c::dmxLastErrorEvent" ref="aacf5b80f46b3ba1e46d7f1f12cfb158f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XErrorEvent <a class="el" href="dmxinit_8c.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxLastErrorEvent</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Last error that occurred </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af266e8dde07901ede60eaa822b3e945a"></a><!-- doxytag: member="dmxinit.c::dmxLazyWindowCreation" ref="af266e8dde07901ede60eaa822b3e945a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a> = TRUE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if using the lazy window creation optimization </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c8f7f00098aec51d56c188a26747d9f"></a><!-- doxytag: member="dmxinit.c::dmxNumInputs" ref="a7c8f7f00098aec51d56c188a26747d9f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a> </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>, <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>, and <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5a881109fe1e32c74cda4a280b09a7c4"></a><!-- doxytag: member="dmxinit.c::dmxNumScreens" ref="a5a881109fe1e32c74cda4a280b09a7c4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of dmxScreens </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">AbortDDX()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxConsoleComputeWidthHeight()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxcommon_8h.html#a907580b7be71d9be0b771d32210f3cad">dmxFindPointerScreen()</a>, <a class="el" href="dmxextension_8h.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxGetNumScreens()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmxcursor_8c.html#aaf8a9878f12b6653247fc27d960beccf">dmxSLCreate()</a>, <a class="el" href="dmxcursor_8c.html#ab4dcb11cad339e72d843356841ffd203">dmxSLFindNext()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa8987e6ecde1821c659e8fe22336fd20"></a><!-- doxytag: member="dmxinit.c::dmxOffScreenOpt" ref="aa8987e6ecde1821c659e8fe22336fd20" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#aa8987e6ecde1821c659e8fe22336fd20">dmxOffScreenOpt</a> = TRUE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if using off screen optimizations </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e242a6818df05e547a4776919e3827f"></a><!-- doxytag: member="dmxinit.c::dmxScreens" ref="a3e242a6818df05e547a4776919e3827f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of outputs </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxBackendOffscreen()</a>, <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>, <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxProcSetFontPath()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>, <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a97d09d0d46e9e7df451072def499e4fe"></a><!-- doxytag: member="dmxinit.c::dmxShadowFB" ref="a97d09d0d46e9e7df451072def499e4fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinit_8c.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a> = FALSE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if using shadow frame-buffer (deprecated) </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8207510b34c9871015d1e9378c31c568"></a><!-- doxytag: member="dmxinit.c::dmxSubdividePrimitives" ref="a8207510b34c9871015d1e9378c31c568" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#a8207510b34c9871015d1e9378c31c568">dmxSubdividePrimitives</a> = TRUE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if using the primitive subdivision optimization </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab5b999218612af4136983694943737aa"></a><!-- doxytag: member="dmxinit.c::dmxUseXKB" ref="ab5b999218612af4136983694943737aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxinit_8c.html#ab5b999218612af4136983694943737aa">dmxUseXKB</a> = TRUE</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if the XKB extension should be used with the backend servers </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, and <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinit_8c.html">dmxinit.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinit_8h.html b/hw/dmx/doc/html/dmxinit_8h.html
new file mode 100644
index 0000000..e4dd110
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinit_8h.html
@@ -0,0 +1,225 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinit_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxinit.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;scrnintstr.h&quot;</code><br/>
+</div>
+<p><a href="dmxinit_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for initialization. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinit_8c.html">dmxinit.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a339a0fdeb357fee53a56ba268c66b68d"></a><!-- doxytag: member="dmxinit.h::dmxCheckForWM" ref="a339a0fdeb357fee53a56ba268c66b68d" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCheckForWM </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">_DMXScreenInfo::WMRunningOnBE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a04bd6a93ac85484e9eba0dcec858edf3"></a><!-- doxytag: member="dmxinit.h::dmxGetColormaps" ref="a04bd6a93ac85484e9eba0dcec858edf3" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetColormaps </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo::beBlackPixel</a>, <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo::beWhitePixel</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe45fd724cbfceb085e23ac62e276afd"></a><!-- doxytag: member="dmxinit.h::dmxGetPixmapFormats" ref="abe45fd724cbfceb085e23ac62e276afd" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetPixmapFormats </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaed1209f913cb233d4e093282ed829ef"></a><!-- doxytag: member="dmxinit.h::dmxGetScreenAttribs" ref="aaed1209f913cb233d4e093282ed829ef" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetScreenAttribs </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a>, <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo::beYDPI</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">_DMXScreenInfo::scrnXSign</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, and <a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">_DMXScreenInfo::scrnYSign</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ae3c95f86743822940a155e6770663d"></a><!-- doxytag: member="dmxinit.h::dmxGetVisualInfo" ref="a6ae3c95f86743822940a155e6770663d" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxGetVisualInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxDepth</a>, and <a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe5a8715282907a3ffd7b992c8dd3661"></a><!-- doxytag: member="dmxinit.h::dmxOpenDisplay" ref="abe5a8715282907a3ffd7b992c8dd3661" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxOpenDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2f19c6c0750ea1defb702c2d6231e4a8"></a><!-- doxytag: member="dmxinit.h::dmxSetErrorHandler" ref="a2f19c6c0750ea1defb702c2d6231e4a8" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinit_8h.html">dmxinit.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinit_8h_source.html b/hw/dmx/doc/html/dmxinit_8h_source.html
new file mode 100644
index 0000000..e541649
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinit_8h_source.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinit_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxinit.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxinit_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2004 Red Hat Inc., Raleigh, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXINIT_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXINIT_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;scrnintstr.h&quot;</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="keyword">extern</span> Bool <a class="code" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxSetErrorHandler</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> Bool <a class="code" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="preprocessor">#endif </span><span class="comment">/* DMXINIT_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinit_8h.html">dmxinit.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinput_8c.html b/hw/dmx/doc/html/dmxinput_8c.html
new file mode 100644
index 0000000..30a8c77
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinput_8c.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinput_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxinput.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;input.h&quot;</code><br/>
+<code>#include &quot;mi.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#a794cad8ab41d42457e19090e38c5b338">LegalModifier</a> (unsigned int key, DeviceIntPtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput</a> (int argc, char **argv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#a4f9d470e1f20101d9951d1dfcdca7d4e">CloseInput</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo</a> (<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#a8e64d097682947120de17cf9ff43586a">NewInputDeviceRequest</a> (InputOption *options, InputAttributes *attrs, DeviceIntPtr *pdev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8c.html#aad5437e77e383efb20d0720f2afe863a">DeleteInputDeviceRequest</a> (DeviceIntPtr pDev)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide the main entry points for input initialization and processing that arequired by the dix layer. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a4f9d470e1f20101d9951d1dfcdca7d4e"></a><!-- doxytag: member="dmxinput.c::CloseInput" ref="a4f9d470e1f20101d9951d1dfcdca7d4e" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CloseInput </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aad5437e77e383efb20d0720f2afe863a"></a><!-- doxytag: member="dmxinput.c::DeleteInputDeviceRequest" ref="aad5437e77e383efb20d0720f2afe863a" args="(DeviceIntPtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void DeleteInputDeviceRequest </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a122b762a283b031348730294d3aa1319"></a><!-- doxytag: member="dmxinput.c::dmxUpdateWindowInfo" ref="a122b762a283b031348730294d3aa1319" args="(DMXUpdateType type, WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxUpdateWindowInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called from <em><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a></em> whenever the layout of windows on the display might have changed. This information is used by input drivers (currently only the console driver) that provide information about window layout to the user. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo::updateWindowInfo</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1ffd49de15b6ee0cafe5e83740c7a316"></a><!-- doxytag: member="dmxinput.c::InitInput" ref="a1ffd49de15b6ee0cafe5e83740c7a316" args="(int argc, char **argv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void InitInput </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called from dix/main.c on each server generation to initialize inputs. All the work is done in dmxInputInit. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a> </dd></dl>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a794cad8ab41d42457e19090e38c5b338"></a><!-- doxytag: member="dmxinput.c::LegalModifier" ref="a794cad8ab41d42457e19090e38c5b338" args="(unsigned int key, DeviceIntPtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool LegalModifier </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns TRUE if the key is a valid modifier. For PC-class keyboards, all keys can be used as modifiers, so return TRUE always. </p>
+
+</div>
+</div>
+<a class="anchor" id="a8e64d097682947120de17cf9ff43586a"></a><!-- doxytag: member="dmxinput.c::NewInputDeviceRequest" ref="a8e64d097682947120de17cf9ff43586a" args="(InputOption *options, InputAttributes *attrs, DeviceIntPtr *pdev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int NewInputDeviceRequest </td>
+ <td>(</td>
+ <td class="paramtype">InputOption *&#160;</td>
+ <td class="paramname"><em>options</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">InputAttributes *&#160;</td>
+ <td class="paramname"><em>attrs</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr *&#160;</td>
+ <td class="paramname"><em>pdev</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acf517b24d6b846578e70c059b4afcb1b"></a><!-- doxytag: member="dmxinput.c::ProcessInputEvents" ref="acf517b24d6b846578e70c059b4afcb1b" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ProcessInputEvents </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called from dix/dispatch.c in Dispatch() whenever input events require processing. All the work is done in the lower level routines. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">_DMXInputInfo::processInputEvents</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinput_8c.html">dmxinput.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinput_8h.html b/hw/dmx/doc/html/dmxinput_8h.html
new file mode 100644
index 0000000..12bdf13
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinput_8h.html
@@ -0,0 +1,619 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinput_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxinput.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxinput_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">DMX_MAX_SIGIO_FDS</a>&#160;&#160;&#160;4</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">ProcessInputEventsProc</a> )(struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">UpdateWindowInfoProc</a> )(struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a> { <br/>
+&#160;&#160;<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">DMX_UPDATE_REALIZE</a>,
+<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">DMX_UPDATE_UNREALIZE</a>,
+<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">DMX_UPDATE_RESTACK</a>,
+<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">DMX_UPDATE_COPY</a>,
+<br/>
+&#160;&#160;<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">DMX_UPDATE_RESIZE</a>,
+<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">DMX_UPDATE_REPARENT</a>
+<br/>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxSigioState</a> { <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">DMX_NOSIGIO</a> = 0,
+<a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">DMX_USESIGIO</a>,
+<a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">DMX_ACTIVESIGIO</a>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> { <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">DMX_NO_BLOCK</a> = 0,
+<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f">DMX_BLOCK</a> = 1
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo</a> (<a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#ac30ee4be3ed3f25b13caba5cf17cf41d">dmxeqSwitchScreen</a> (DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition</a> (int *x, int *y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen</a> (int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a> (DevicePtr pDev, int x, int y, int delta, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput</a> (const char *name, int core)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides access to:</p>
+<ul>
+<li>global variables available to all hw/dmx routines, and</li>
+<li>enumerations and typedefs needed by input routines in hw/dmx (and hw/dmx/input).</li>
+</ul>
+<p>The goal is that no files in hw/dmx should include header files from hw/dmx/input -- the interface defined here should be the only interface exported to the hw/dmx layer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinputinit_8c.html">input/dmxinputinit.c</a>. </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="afc9c4f441bc6bd7d6ba0226d1415031c"></a><!-- doxytag: member="dmxinput.h::DMX_MAX_SIGIO_FDS" ref="afc9c4f441bc6bd7d6ba0226d1415031c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAX_SIGIO_FDS&#160;&#160;&#160;4</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Maximum number of file descriptors for SIGIO handling </p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="adb148db00fe0adf1938b815b9b934d26"></a><!-- doxytag: member="dmxinput.h::DMXLocalInputInfoPtr" ref="adb148db00fe0adf1938b815b9b934d26" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>* <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>An opaque structure that is only exposed in the dmx/input layer. </p>
+
+</div>
+</div>
+<a class="anchor" id="acb2c7d7b4029ad06b7bf51b71c37a638"></a><!-- doxytag: member="dmxinput.h::ProcessInputEventsProc" ref="acb2c7d7b4029ad06b7bf51b71c37a638" args=")(struct _DMXInputInfo *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">ProcessInputEventsProc</a>)(struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7d3f5360f968ed1d470b03fbee5d03f0"></a><!-- doxytag: member="dmxinput.h::UpdateWindowInfoProc" ref="a7d3f5360f968ed1d470b03fbee5d03f0" args=")(struct _DMXInputInfo *, DMXUpdateType, WindowPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">UpdateWindowInfoProc</a>)(struct <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="a3a7195ab3516c5354bac4ca80b2eedb7"></a><!-- doxytag: member="dmxinput.h::DMXBlockType" ref="a3a7195ab3516c5354bac4ca80b2eedb7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b"></a><!-- doxytag: member="DMX_NO_BLOCK" ref="a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b" args="" -->DMX_NO_BLOCK</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f"></a><!-- doxytag: member="DMX_BLOCK" ref="a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f" args="" -->DMX_BLOCK</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="abdcaa3561e4107b3e133d221a881fdd4"></a><!-- doxytag: member="dmxinput.h::dmxSigioState" ref="abdcaa3561e4107b3e133d221a881fdd4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxSigioState</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>State of the SIGIO engine </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596"></a><!-- doxytag: member="DMX_NOSIGIO" ref="abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596" args="" -->DMX_NOSIGIO</em>&nbsp;</td><td>
+<p>Device does not use SIGIO at all. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608"></a><!-- doxytag: member="DMX_USESIGIO" ref="abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608" args="" -->DMX_USESIGIO</em>&nbsp;</td><td>
+<p>Device can use SIGIO, but is not (e.g., because the VT is switch away). </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b"></a><!-- doxytag: member="DMX_ACTIVESIGIO" ref="abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b" args="" -->DMX_ACTIVESIGIO</em>&nbsp;</td><td>
+<p>Device is currently using SIGIO. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8"></a><!-- doxytag: member="dmxinput.h::DMXUpdateType" ref="ae16d9134720b35da8f258db9a1c039a8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reason why window layout was updated. </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9"></a><!-- doxytag: member="DMX_UPDATE_REALIZE" ref="ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9" args="" -->DMX_UPDATE_REALIZE</em>&nbsp;</td><td>
+<p>Window realized </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b"></a><!-- doxytag: member="DMX_UPDATE_UNREALIZE" ref="ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b" args="" -->DMX_UPDATE_UNREALIZE</em>&nbsp;</td><td>
+<p>Window unrealized </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25"></a><!-- doxytag: member="DMX_UPDATE_RESTACK" ref="ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25" args="" -->DMX_UPDATE_RESTACK</em>&nbsp;</td><td>
+<p>Stacking order changed </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72"></a><!-- doxytag: member="DMX_UPDATE_COPY" ref="ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72" args="" -->DMX_UPDATE_COPY</em>&nbsp;</td><td>
+<p>Window copied </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146"></a><!-- doxytag: member="DMX_UPDATE_RESIZE" ref="ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146" args="" -->DMX_UPDATE_RESIZE</em>&nbsp;</td><td>
+<p>Window resized </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c"></a><!-- doxytag: member="DMX_UPDATE_REPARENT" ref="ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c" args="" -->DMX_UPDATE_REPARENT</em>&nbsp;</td><td>
+<p>Window reparented </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a21dc2639218a59ae564d3eaeb4781a90"></a><!-- doxytag: member="dmxinput.h::dmxConfigAddInput" ref="a21dc2639218a59ae564d3eaeb4781a90" args="(const char *name, int core)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* dmxConfigAddInput </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>core</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, and <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adf2928cf693dab61adafad503e81d2dc"></a><!-- doxytag: member="dmxinput.h::dmxCoreMotion" ref="adf2928cf693dab61adafad503e81d2dc" args="(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCoreMotion </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>delta</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxevents_8c.html#a8ffd07ee80777c394a6ff32d1021347d">DMXDBG4</a>, <a class="el" href="dmxevents_8c.html#a753eef37715b6379d7d65e34a23d2e03">DMXDBG5</a>, <a class="el" href="dmxevents_8c.html#af703e1a00a515e2507f7d2a354429a24">DMXDBG6</a>, <a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen()</a>, <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxGlobalHeight</a>, <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxGlobalInvalid</a>, <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxGlobalWidth</a>, <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a>, <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock()</a>, <a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock()</a>, <a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">enqueueMotion()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>, <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a>, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">_DMXLocalInputInfo::update_position</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxMotion()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac30ee4be3ed3f25b13caba5cf17cf41d"></a><!-- doxytag: member="dmxinput.h::dmxeqSwitchScreen" ref="ac30ee4be3ed3f25b13caba5cf17cf41d" args="(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxeqSwitchScreen </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>fromDIX</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8bb7b5687d93b86df921eef6b7c28052"></a><!-- doxytag: member="dmxinput.h::dmxFindFirstScreen" ref="a8bb7b5687d93b86df921eef6b7c28052" args="(int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxFindFirstScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, and <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cb75edbb0cabbfd89b40309907bdee3"></a><!-- doxytag: member="dmxinput.h::dmxGetGlobalPosition" ref="a0cb75edbb0cabbfd89b40309907bdee3" args="(int *x, int *y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetGlobalPosition </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return DMX's notion of the pointer position in the global coordinate space. </p>
+
+<p>References <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxGlobalX</a>, and <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxGlobalY</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa044735ab6fae7c75c82243a5159611"></a><!-- doxytag: member="dmxinput.h::dmxInputFree" ref="afa044735ab6fae7c75c82243a5159611" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free all of the memory associated with <em>dmxInput</em> </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>, <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo::freename</a>, <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo::geometry</a>, <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo::keycodes</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo::symbols</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5845f0dbf305a8a233d3747489745faa"></a><!-- doxytag: member="dmxinput.h::dmxInputInit" ref="a5845f0dbf305a8a233d3747489745faa" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize all of the devices described in <em>dmxInput</em>. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">_DMXInputInfo::console</a>, <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC()</a>, <a class="el" href="dmxarg_8c.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree()</a>, <a class="el" href="dmxarg_8c.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse()</a>, <a class="el" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV()</a>, <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxBlockHandler()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo::geometry</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo::keycodes</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">_DMXInputInfo::processInputEvents</a>, <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo::symbols</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>, <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo::updateWindowInfo</a>, and <a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">_DMXInputInfo::windows</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, and <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d1185c140ba54b24312ff6c98105c15"></a><!-- doxytag: member="dmxinput.h::dmxInputLateReInit" ref="a9d1185c140ba54b24312ff6c98105c15" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputLateReInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialize all the devices described in <em>dmxInput</em>. Called from <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries</a> after the cursor is redisplayed. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">_DMXLocalInputInfo::latereinit</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5bfc30ece32ae2af838c9e45857dc36"></a><!-- doxytag: member="dmxinput.h::dmxInputLogDevices" ref="ac5bfc30ece32ae2af838c9e45857dc36" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputLogDevices </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log information about all of the known devices using <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo::deviceName</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, and <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8f3465a13cae73a3d657526643ef7b7"></a><!-- doxytag: member="dmxinput.h::dmxInputReInit" ref="ac8f3465a13cae73a3d657526643ef7b7" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputReInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialize all the devices described in <em>dmxInput</em>. Called from <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries</a> before the cursor is redisplayed. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">_DMXLocalInputInfo::reinit</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a122b762a283b031348730294d3aa1319"></a><!-- doxytag: member="dmxinput.h::dmxUpdateWindowInfo" ref="a122b762a283b031348730294d3aa1319" args="(DMXUpdateType type, WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxUpdateWindowInfo </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine is called from <em><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a></em> whenever the layout of windows on the display might have changed. This information is used by input drivers (currently only the console driver) that provide information about window layout to the user. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo::updateWindowInfo</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a067017d9e67716c251357e9edf917e59"></a><!-- doxytag: member="dmxinput.h::dmxInputs" ref="a067017d9e67716c251357e9edf917e59" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of inputs </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxBlockHandler()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>, <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>, and <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c8f7f00098aec51d56c188a26747d9f"></a><!-- doxytag: member="dmxinput.h::dmxNumInputs" ref="a7c8f7f00098aec51d56c188a26747d9f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a> </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>, <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>, and <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinput_8h.html">dmxinput.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinput_8h_source.html b/hw/dmx/doc/html/dmxinput_8h_source.html
new file mode 100644
index 0000000..0dc8c8d
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinput_8h_source.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinput_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxinput.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxinput_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * David H. Dawes &lt;dawes@xfree86.org&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00032"></a>00032 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00033"></a>00033 <span class="comment"> *</span>
+<a name="l00034"></a>00034 <span class="comment"> */</span>
+<a name="l00035"></a>00035
+<a name="l00047"></a>00047 <span class="preprocessor">#ifndef DMXINPUT_H</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define DMXINPUT_H</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00051"></a><a class="code" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">00051</a> <span class="preprocessor">#define DMX_MAX_SIGIO_FDS 4</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a>00053 <span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a>;
+<a name="l00054"></a>00054
+<a name="l00056"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">00056</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00057"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">00057</a> <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">DMX_UPDATE_REALIZE</a>,
+<a name="l00058"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">00058</a> <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">DMX_UPDATE_UNREALIZE</a>,
+<a name="l00059"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">00059</a> <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">DMX_UPDATE_RESTACK</a>,
+<a name="l00060"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">00060</a> <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">DMX_UPDATE_COPY</a>,
+<a name="l00061"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">00061</a> <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">DMX_UPDATE_RESIZE</a>,
+<a name="l00062"></a><a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">00062</a> <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">DMX_UPDATE_REPARENT</a>
+<a name="l00063"></a>00063 } <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>;
+<a name="l00064"></a>00064
+<a name="l00065"></a><a class="code" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">00065</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">ProcessInputEventsProc</a>)(<span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *);
+<a name="l00066"></a><a class="code" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">00066</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">UpdateWindowInfoProc</a>)(<span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> *,
+<a name="l00067"></a>00067 <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr);
+<a name="l00068"></a>00068
+<a name="l00070"></a><a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">00070</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> *<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>;
+<a name="l00071"></a>00071
+<a name="l00073"></a><a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">00073</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00074"></a><a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">00074</a> <a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">DMX_NOSIGIO</a> = 0,
+<a name="l00075"></a><a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">00075</a> <a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">DMX_USESIGIO</a>,
+<a name="l00078"></a><a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">00078</a> <a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">DMX_ACTIVESIGIO</a>
+<a name="l00079"></a>00079 } <a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxSigioState</a>;
+<a name="l00080"></a>00080
+<a name="l00084"></a><a class="code" href="struct__DMXInputInfo.html">00084</a> <span class="keyword">struct </span><a class="code" href="struct__DMXInputInfo.html">_DMXInputInfo</a> {
+<a name="l00085"></a><a class="code" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">00085</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">name</a>;
+<a name="l00088"></a><a class="code" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">00088</a> Bool <a class="code" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">freename</a>;
+<a name="l00089"></a><a class="code" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">00089</a> Bool <a class="code" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">detached</a>;
+<a name="l00090"></a><a class="code" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">00090</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">inputIdx</a>;
+<a name="l00091"></a><a class="code" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">00091</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">scrnIdx</a>;
+<a name="l00092"></a><a class="code" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">00092</a> Bool <a class="code" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">core</a>;
+<a name="l00095"></a><a class="code" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">00095</a> Bool <a class="code" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">console</a>;
+<a name="l00099"></a><a class="code" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">00099</a> Bool <a class="code" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">windows</a>;
+<a name="l00102"></a><a class="code" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">00102</a> <a class="code" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">ProcessInputEventsProc</a> <a class="code" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">processInputEvents</a>;
+<a name="l00103"></a><a class="code" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">00103</a> <a class="code" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">UpdateWindowInfoProc</a> <a class="code" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">updateWindowInfo</a>;
+<a name="l00104"></a>00104
+<a name="l00105"></a>00105 <span class="comment">/* Local input information */</span>
+<a name="l00106"></a><a class="code" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">00106</a> <a class="code" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxSigioState</a> <a class="code" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">sigioState</a>;
+<a name="l00107"></a><a class="code" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">00107</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">sigioFdCount</a>;
+<a name="l00108"></a><a class="code" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">00108</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">sigioFd</a>[<a class="code" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">DMX_MAX_SIGIO_FDS</a>];
+<a name="l00109"></a><a class="code" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">00109</a> Bool <a class="code" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">sigioAdded</a>[<a class="code" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">DMX_MAX_SIGIO_FDS</a>];
+<a name="l00113"></a><a class="code" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">00113</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">vt_switch_pending</a>;
+<a name="l00114"></a>00114
+<a name="l00116"></a><a class="code" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">00116</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">vt_switched</a>;
+<a name="l00117"></a>00117
+<a name="l00119"></a><a class="code" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">00119</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">numDevs</a>;
+<a name="l00120"></a>00120
+<a name="l00125"></a><a class="code" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">00125</a> DMXLocalInputInfoPtr *<a class="code" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">devs</a>;
+<a name="l00126"></a>00126
+<a name="l00127"></a><a class="code" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">00127</a> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">keycodes</a>;
+<a name="l00128"></a><a class="code" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">00128</a> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">symbols</a>;
+<a name="l00129"></a><a class="code" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">00129</a> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">geometry</a>;
+<a name="l00130"></a>00130 };
+<a name="l00131"></a>00131
+<a name="l00132"></a>00132 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>;
+<a name="l00133"></a>00133 <span class="keyword">extern</span> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *<a class="code" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>;
+<a name="l00135"></a>00135 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00136"></a>00136 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00137"></a>00137 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00138"></a>00138 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00139"></a>00139 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices</a>(<span class="keywordtype">void</span>);
+<a name="l00140"></a>00140 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo</a>(DMXUpdateType type, WindowPtr pWindow);
+<a name="l00141"></a>00141
+<a name="l00142"></a>00142 <span class="comment">/* These functions are defined in input/dmxeq.c */</span>
+<a name="l00143"></a>00143 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#ac30ee4be3ed3f25b13caba5cf17cf41d">dmxeqSwitchScreen</a>(DeviceIntPtr pDev, ScreenPtr pScreen, Bool fromDIX);
+<a name="l00144"></a>00144
+<a name="l00145"></a>00145 <span class="comment">/* This type is used in input/dmxevents.c. Also, these functions are</span>
+<a name="l00146"></a>00146 <span class="comment"> * defined in input/dmxevents.c */</span>
+<a name="l00147"></a><a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">00147</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00148"></a><a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">00148</a> <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">DMX_NO_BLOCK</a> = 0,
+<a name="l00149"></a><a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f">00149</a> <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f">DMX_BLOCK</a> = 1
+<a name="l00150"></a>00150 } <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>;
+<a name="l00151"></a>00151
+<a name="l00152"></a>00152 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxGetGlobalPosition</a>(<span class="keywordtype">int</span> *x, <span class="keywordtype">int</span> *y);
+<a name="l00153"></a>00153 <span class="keyword">extern</span> <a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *<a class="code" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxFindFirstScreen</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00154"></a>00154 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion</a>(DevicePtr pDev, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> delta,
+<a name="l00155"></a>00155 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00156"></a>00156
+<a name="l00157"></a>00157 <span class="comment">/* Support for dynamic addition of inputs. This functions is defined in</span>
+<a name="l00158"></a>00158 <span class="comment"> * config/dmxconfig.c */</span>
+<a name="l00159"></a>00159 <span class="keyword">extern</span> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *<a class="code" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> core);
+<a name="l00160"></a>00160 <span class="preprocessor">#endif </span><span class="comment">/* DMXINPUT_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinput_8h.html">dmxinput.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinputinit_8c.html b/hw/dmx/doc/html/dmxinputinit_8c.html
new file mode 100644
index 0000000..bf349e0
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinputinit_8c.html
@@ -0,0 +1,1451 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinputinit_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxinputinit.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;dmxextension.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxdummy_8h_source.html">dmxdummy.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxbackend_8h_source.html">dmxbackend.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxconsole_8h_source.html">dmxconsole.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcommon_8h_source.html">dmxcommon.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxevents_8h_source.html">dmxevents.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxmotion_8h_source.html">dmxmotion.h</a>&quot;</code><br/>
+<code>#include &quot;dmxprop.h&quot;</code><br/>
+<code>#include &quot;config/dmxconfig.h&quot;</code><br/>
+<code>#include &quot;dmxcursor.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="lnx-keyboard_8h_source.html">lnx-keyboard.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="lnx-ms_8h_source.html">lnx-ms.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="lnx-ps2_8h_source.html">lnx-ps2.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-keyboard_8h_source.html">usb-keyboard.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-mouse_8h_source.html">usb-mouse.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-other_8h_source.html">usb-other.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-common_8h_source.html">usb-common.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsigio_8h_source.html">dmxsigio.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxarg_8h_source.html">dmxarg.h</a>&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;input.h&quot;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+<code>#include &quot;mi.h&quot;</code><br/>
+<code>#include &quot;xkbsrv.h&quot;</code><br/>
+<code>#include &lt;X11/extensions/XI.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XIproto.h&gt;</code><br/>
+<code>#include &quot;exevents.h&quot;</code><br/>
+<code>#include &quot;extinit.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ae119931aa626ba4edf85defe5bebe2e7">DMX_WINDOW_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a05b49c662c073f89e86804f7856622a0">LEN</a>&#160;&#160;&#160;32</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ae708022d89f6e39813b8db1389bf64fe">DDXRingBell</a> (int volume, int pitch, int duration)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a4538a00d09ac3cd10b81598b39340da3">dmxKbdCtrl</a> (DeviceIntPtr pDevice, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ace8ffeb961580bf16d7c3ec044a00491">dmxBell</a> (int volume, DeviceIntPtr pDev, pointer arg, int something)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">_dmxChangePointerControl</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl</a> (DeviceIntPtr pDevice, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">_dmxKeyboardKbdCtrlProc</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc</a> (DeviceIntPtr pDevice, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">_dmxKeyboardBellProc</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int percent)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc</a> (int percent, DeviceIntPtr pDevice, pointer ctrl, int unknown)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#aef5e79cc27e75fdc3fdfb3e45c64dc9a">dmxKeyboardFreeNames</a> (XkbComponentNamesPtr names)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn</a> (DeviceIntPtr pDevice, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfo</a> *info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff</a> (DeviceIntPtr pDevice, int what)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a> type, WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxBlockHandler</a> (pointer blockData, OSTimePtr pTimeout, pointer pReadMask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler</a> (pointer blockData, int result, pointer pReadMask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxMakeUniqueDeviceName</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static DeviceIntPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#aa1d3565232f8ab962246c825bb565bd6">dmxLookupLocal</a> (const char *name)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> s)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="struct__dmxArg.html">dmxArg</a> a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxInputExtensionErrorHandler</a> (Display *dsp, _Xconst char *name, _Xconst char *reason)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int doXI)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> *local)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId</a> (int id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId</a> (int id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int *id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int *id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole</a> (const char *name, int isCore, int *id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend</a> (int physicalScreen, int isCore, int *id)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#ab34ec11967377e32bc0817fb3a8b939e">dmxLocalCorePointer</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a3041e526ae9e56b4a2d0a99f030af71f">DMXDummyMou</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#af0b33ec9267eea9d58f6792e33e02295">DMXDummyKbd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a420b4847b9c9f9992e042754c9a5d9c9">DMXBackendMou</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a4ad947489cdc8cae1835dbd5604e0cde">DMXBackendKbd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a3a58ba39e104b23698ca8ef19789caf3">DMXConsoleMou</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a3c213f84d74e74751787f916f509581f">DMXConsoleKbd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8c.html#a74cb9ef11048e61ab91acd98613210b8">DMXLocalDevices</a> []</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides generic input support. Functions here set up input and lead to the calling of low-level device drivers for input. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ae119931aa626ba4edf85defe5bebe2e7"></a><!-- doxytag: member="dmxinputinit.c::DMX_WINDOW_DEBUG" ref="ae119931aa626ba4edf85defe5bebe2e7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a05b49c662c073f89e86804f7856622a0"></a><!-- doxytag: member="dmxinputinit.c::LEN" ref="a05b49c662c073f89e86804f7856622a0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LEN&#160;&#160;&#160;32</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxMakeUniqueDeviceName()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a4f65a9b46fe88b8f530752e3b7769424"></a><!-- doxytag: member="dmxinputinit.c::_dmxChangePointerControl" ref="a4f65a9b46fe88b8f530752e3b7769424" args="(DMXLocalInputInfoPtr dmxLocal, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void _dmxChangePointerControl </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">_DMXLocalInputInfo::mCtrl</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">_DMXLocalInputInfo::mctrl</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adcea87288c189798602bd610f87ad785"></a><!-- doxytag: member="dmxinputinit.c::_dmxKeyboardBellProc" ref="adcea87288c189798602bd610f87ad785" args="(DMXLocalInputInfoPtr dmxLocal, int percent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void _dmxKeyboardBellProc </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">_DMXLocalInputInfo::kBell</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">_DMXLocalInputInfo::kctrl</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa785da3b31e5310dd1b1ea13325a83dc"></a><!-- doxytag: member="dmxinputinit.c::_dmxKeyboardKbdCtrlProc" ref="aa785da3b31e5310dd1b1ea13325a83dc" args="(DMXLocalInputInfoPtr dmxLocal, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void _dmxKeyboardKbdCtrlProc </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">_DMXLocalInputInfo::kCtrl</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">_DMXLocalInputInfo::kctrl</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae708022d89f6e39813b8db1389bf64fe"></a><!-- doxytag: member="dmxinputinit.c::DDXRingBell" ref="ae708022d89f6e39813b8db1389bf64fe" args="(int volume, int pitch, int duration)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void DDXRingBell </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>volume</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>duration</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a54b496c8474a33844549ed64913456fe"></a><!-- doxytag: member="dmxinputinit.c::dmxAddDevice" ref="a54b496c8474a33844549ed64913456fe" args="(DMXLocalInputInfoPtr dmxLocal)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static DeviceIntPtr dmxAddDevice </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">_DMXLocalInputInfo::create_private</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxMakeUniqueDeviceName()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">_DMXLocalInputInfo::name</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ace8ffeb961580bf16d7c3ec044a00491"></a><!-- doxytag: member="dmxinputinit.c::dmxBell" ref="ace8ffeb961580bf16d7c3ec044a00491" args="(int volume, DeviceIntPtr pDev, pointer arg, int something)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBell </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>volume</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>arg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>something</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abd6a885883606f21d4342486d8fd5ab6"></a><!-- doxytag: member="dmxinputinit.c::dmxBlockHandler" ref="abd6a885883606f21d4342486d8fd5ab6" args="(pointer blockData, OSTimePtr pTimeout, pointer pReadMask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxBlockHandler </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>blockData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">OSTimePtr&#160;</td>
+ <td class="paramname"><em>pTimeout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pReadMask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaba396b9c08ac672d3dcf6561ac57b40"></a><!-- doxytag: member="dmxinputinit.c::dmxChangePointerControl" ref="aaba396b9c08ac672d3dcf6561ac57b40" args="(DeviceIntPtr pDevice, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangePointerControl </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the pointer control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the pointer devices that send core events. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">_dmxChangePointerControl()</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5f11f622380645150bc9ca3a465ca382"></a><!-- doxytag: member="dmxinputinit.c::dmxCollectAll" ref="a5f11f622380645150bc9ca3a465ca382" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxCollectAll </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">_DMXLocalInputInfo::collect_events</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f">DMX_BLOCK</a>, <a class="el" href="dmxevents_8c.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxevents_8c.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxevents_8c.html#ae08f1801d0215396a7f39bd083ddca11">dmxMotion()</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxBlockHandler()</a>, and <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aee6196e74882c16d5cd939d88b3b6fdc"></a><!-- doxytag: member="dmxinputinit.c::dmxDeviceOnOff" ref="aee6196e74882c16d5cd939d88b3b6fdc" args="(DeviceIntPtr pDevice, int what)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxDeviceOnOff </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>what</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">_DMXLocalInitInfo::belFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="dmxinputinit_8c.html#ace8ffeb961580bf16d7c3ec044a00491">dmxBell()</a>, <a class="el" href="dmxinputinit_8c.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxconfig_8h.html#a5d7b9c934bac97af375cfc1425e4d71c">dmxConfigGetXkbLayout()</a>, <a class="el" href="dmxconfig_8h.html#a9789c9f2428105bd9e896ddd25ea9a76">dmxConfigGetXkbModel()</a>, <a class="el" href="dmxconfig_8h.html#ae5986f5f5ba901313f950db2b4d8b340">dmxConfigGetXkbOptions()</a>, <a class="el" href="dmxconfig_8h.html#a144614ca8f250e559b030eef79189aac">dmxConfigGetXkbRules()</a>, <a class="el" href="dmxconfig_8h.html#a3206dcb48297854a1d47e8aaa88d647e">dmxConfigGetXkbVariant()</a>, <a class="el" href="dmxinputinit_8c.html#a4538a00d09ac3cd10b81598b39340da3">dmxKbdCtrl()</a>, <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxmotion_8c.html#a71e31cfbffb3603068d897374e173400">dmxPointerGetMotionBufferSize()</a>, <a class="el" href="dmxsigio_8c.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>, <a class="el" href="dmxsigio_8c.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a>, <a class="el" href="dmxcommon_8h.html#a7067dd8545db11300dc1ee7f461b346d">GETDMXINPUTFROMPDEVICE</a>, <a class="el" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">_DMXLocalInitInfo::intFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">_DMXLocalInitInfo::ledFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo::numAbsAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">_DMXLocalInitInfo::proximityClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">_DMXLocalInitInfo::strFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">_DMXLocalInitInfo::xkb</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ee085307a1dba7b07fa2eb34639815c"></a><!-- doxytag: member="dmxinputinit.c::dmxInputAttachBackend" ref="a2ee085307a1dba7b07fa2eb34639815c" args="(int physicalScreen, int isCore, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputAttachBackend </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>physicalScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>isCore</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3f9807875f237589d57ab9f006735af"></a><!-- doxytag: member="dmxinputinit.c::dmxInputAttachConsole" ref="ac3f9807875f237589d57ab9f006735af" args="(const char *name, int isCore, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputAttachConsole </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>isCore</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo::freename</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a15cdf4e2066f64c2d9bd51906d6ca9a2"></a><!-- doxytag: member="dmxinputinit.c::dmxInputAttachNew" ref="a15cdf4e2066f64c2d9bd51906d6ca9a2" args="(DMXInputInfo *dmxInput, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxInputAttachNew </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, and <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a328d0a700148af94b3dccf354b313c84"></a><!-- doxytag: member="dmxinputinit.c::dmxInputAttachOld" ref="a328d0a700148af94b3dccf354b313c84" args="(DMXInputInfo *dmxInput, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxInputAttachOld </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, and <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a816d1052ef5a587ef8e16b0005b06662"></a><!-- doxytag: member="dmxinputinit.c::dmxInputCopyLocal" ref="a816d1052ef5a587ef8e16b0005b06662" args="(DMXInputInfo *dmxInput, DMXLocalInputInfoPtr s)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxInputCopyLocal </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy the local input information from <em>s</em> into a new <em>devs</em> slot in <em>dmxInput</em>. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo::inputIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">_DMXLocalInputInfo::savedSendsCore</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4d026f31f7b32bd571bdcf9e091c419"></a><!-- doxytag: member="dmxinputinit.c::dmxInputDetach" ref="ac4d026f31f7b32bd571bdcf9e091c419" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputDetach </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Detach an input </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adec246343ae8402c7cc47b19020c7ef7"></a><!-- doxytag: member="dmxinputinit.c::dmxInputDetachAll" ref="adec246343ae8402c7cc47b19020c7ef7" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputDetachAll </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Search for input associated with <em>dmxScreen</em>, and detach. </p>
+
+<p>References <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad7a3f09eeaf98373c261119fba907c47"></a><!-- doxytag: member="dmxinputinit.c::dmxInputDetachId" ref="ad7a3f09eeaf98373c261119fba907c47" args="(int id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputDetachId </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Search for input associated with <em>deviceId</em>, and detach. </p>
+
+<p>References <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, and <a class="el" href="dmxinputinit_8c.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a55936739d6df4e5b8a048d5d34c6cd39">dmxRemoveInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a50c2f7d406a3aacf3bf95b94d616527c"></a><!-- doxytag: member="dmxinputinit.c::dmxInputExtensionErrorHandler" ref="a50c2f7d406a3aacf3bf95b94d616527c" args="(Display *dsp, _Xconst char *name, _Xconst char *reason)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputExtensionErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dsp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">_Xconst char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">_Xconst char *&#160;</td>
+ <td class="paramname"><em>reason</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, and <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa044735ab6fae7c75c82243a5159611"></a><!-- doxytag: member="dmxinputinit.c::dmxInputFree" ref="afa044735ab6fae7c75c82243a5159611" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free all of the memory associated with <em>dmxInput</em> </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>, <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo::freename</a>, <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo::geometry</a>, <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo::keycodes</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo::symbols</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa124c7cd547a9993834becc6e4aebe63"></a><!-- doxytag: member="dmxinputinit.c::dmxInputFreeLocal" ref="aa124c7cd547a9993834becc6e4aebe63" args="(DMXLocalInputInfoRec *local)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxInputFreeLocal </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> *&#160;</td>
+ <td class="paramname"><em>local</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">_DMXLocalInputInfo::destroy_private</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo::deviceName</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">_DMXLocalInputInfo::history</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">_DMXLocalInputInfo::valuators</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5845f0dbf305a8a233d3747489745faa"></a><!-- doxytag: member="dmxinputinit.c::dmxInputInit" ref="a5845f0dbf305a8a233d3747489745faa" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize all of the devices described in <em>dmxInput</em>. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">_DMXInputInfo::console</a>, <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC()</a>, <a class="el" href="dmxarg_8c.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree()</a>, <a class="el" href="dmxarg_8c.html#a7d872851e86ae8063cd13e85ed203d09">dmxArgParse()</a>, <a class="el" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV()</a>, <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxBlockHandler()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo::geometry</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo::keycodes</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">_DMXInputInfo::processInputEvents</a>, <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo::symbols</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>, <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo::updateWindowInfo</a>, and <a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">_DMXInputInfo::windows</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, and <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d1185c140ba54b24312ff6c98105c15"></a><!-- doxytag: member="dmxinputinit.c::dmxInputLateReInit" ref="a9d1185c140ba54b24312ff6c98105c15" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputLateReInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialize all the devices described in <em>dmxInput</em>. Called from <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries</a> after the cursor is redisplayed. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">_DMXLocalInputInfo::latereinit</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0bcd445301dd91f20c9eb0b6dce0b42"></a><!-- doxytag: member="dmxinputinit.c::dmxInputLocateId" ref="ae0bcd445301dd91f20c9eb0b6dce0b42" args="(int id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* dmxInputLocateId </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5bfc30ece32ae2af838c9e45857dc36"></a><!-- doxytag: member="dmxinputinit.c::dmxInputLogDevices" ref="ac5bfc30ece32ae2af838c9e45857dc36" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputLogDevices </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log information about all of the known devices using <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo::deviceName</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxGetInputCount()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, and <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8f3465a13cae73a3d657526643ef7b7"></a><!-- doxytag: member="dmxinputinit.c::dmxInputReInit" ref="ac8f3465a13cae73a3d657526643ef7b7" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputReInit </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Re-initialize all the devices described in <em>dmxInput</em>. Called from <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries</a> before the cursor is redisplayed. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">_DMXLocalInputInfo::reinit</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab57781b7672c11bee1430a47d5118e9e"></a><!-- doxytag: member="dmxinputinit.c::dmxInputScanForExtensions" ref="ab57781b7672c11bee1430a47d5118e9e" args="(DMXInputInfo *dmxInput, int doXI)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxInputScanForExtensions </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>doXI</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo::deviceName</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxInputExtensionErrorHandler()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4538a00d09ac3cd10b81598b39340da3"></a><!-- doxytag: member="dmxinputinit.c::dmxKbdCtrl" ref="a4538a00d09ac3cd10b81598b39340da3" args="(DeviceIntPtr pDevice, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxKbdCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab127903bdb6bf262e51f128b4cec4960"></a><!-- doxytag: member="dmxinputinit.c::dmxKeyboardBellProc" ref="ab127903bdb6bf262e51f128b4cec4960" args="(int percent, DeviceIntPtr pDevice, pointer ctrl, int unknown)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxKeyboardBellProc </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>ctrl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>unknown</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sound the bell on the device. If the device send core events, then sound the bell on all of the devices that send core events. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">_dmxKeyboardBellProc()</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef5e79cc27e75fdc3fdfb3e45c64dc9a"></a><!-- doxytag: member="dmxinputinit.c::dmxKeyboardFreeNames" ref="aef5e79cc27e75fdc3fdfb3e45c64dc9a" args="(XkbComponentNamesPtr names)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxKeyboardFreeNames </td>
+ <td>(</td>
+ <td class="paramtype">XkbComponentNamesPtr&#160;</td>
+ <td class="paramname"><em>names</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad23e145891ad0fb1c909d85ca8e4fe19"></a><!-- doxytag: member="dmxinputinit.c::dmxKeyboardKbdCtrlProc" ref="ad23e145891ad0fb1c909d85ca8e4fe19" args="(DeviceIntPtr pDevice, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxKeyboardKbdCtrlProc </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the keyboard control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the keyboard devices that send core events. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">_dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2969aeffcc1a403f00be11a8d06b3926"></a><!-- doxytag: member="dmxinputinit.c::dmxKeyboardOn" ref="a2969aeffcc1a403f00be11a8d06b3926" args="(DeviceIntPtr pDevice, DMXLocalInitInfo *info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxKeyboardOn </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfo</a> *&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxconfig_8h.html#a5d7b9c934bac97af375cfc1425e4d71c">dmxConfigGetXkbLayout()</a>, <a class="el" href="dmxconfig_8h.html#a9789c9f2428105bd9e896ddd25ea9a76">dmxConfigGetXkbModel()</a>, <a class="el" href="dmxconfig_8h.html#ae5986f5f5ba901313f950db2b4d8b340">dmxConfigGetXkbOptions()</a>, <a class="el" href="dmxconfig_8h.html#a144614ca8f250e559b030eef79189aac">dmxConfigGetXkbRules()</a>, <a class="el" href="dmxconfig_8h.html#a3206dcb48297854a1d47e8aaa88d647e">dmxConfigGetXkbVariant()</a>, <a class="el" href="dmxinputinit_8c.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8c.html#aef5e79cc27e75fdc3fdfb3e45c64dc9a">dmxKeyboardFreeNames()</a>, <a class="el" href="dmxinputinit_8c.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxlog_8c.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxLogInputCont()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">_DMXLocalInitInfo::freenames</a>, <a class="el" href="dmxcommon_8h.html#a7067dd8545db11300dc1ee7f461b346d">GETDMXINPUTFROMPDEVICE</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa1d3565232f8ab962246c825bb565bd6"></a><!-- doxytag: member="dmxinputinit.c::dmxLookupLocal" ref="aa1d3565232f8ab962246c825bb565bd6" args="(const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLookupLocal </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">_DMXLocalInputInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac312d24e4289c3b39964428a6e39a219"></a><!-- doxytag: member="dmxinputinit.c::dmxMakeUniqueDeviceName" ref="ac312d24e4289c3b39964428a6e39a219" args="(DMXLocalInputInfoPtr dmxLocal)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static char* dmxMakeUniqueDeviceName </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxinputinit_8c.html#a05b49c662c073f89e86804f7856622a0">LEN</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4ea57a3ba798705d63254cdbbefb63d"></a><!-- doxytag: member="dmxinputinit.c::dmxPopulateLocal" ref="ac4ea57a3ba798705d63254cdbbefb63d" args="(DMXInputInfo *dmxInput, dmxArg a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxPopulateLocal </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__dmxArg.html">dmxArg</a>&#160;</td>
+ <td class="paramname"><em>a</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="el" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC()</a>, <a class="el" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxinputinit_8c.html#aa1d3565232f8ab962246c825bb565bd6">dmxLookupLocal()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">_DMXLocalInputInfo::name</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5f2e0a323aa9ea0dc0a0d1f5195c5e26"></a><!-- doxytag: member="dmxinputinit.c::dmxProcessInputEvents" ref="a5f2e0a323aa9ea0dc0a0d1f5195c5e26" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxProcessInputEvents </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">_DMXLocalInputInfo::process_input</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a72e77569074807987e358e4eda38c044"></a><!-- doxytag: member="dmxinputinit.c::dmxSwitchReturn" ref="a72e77569074807987e358e4eda38c044" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSwitchReturn </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">_DMXLocalInputInfo::vt_post_switch</a>, and <a class="el" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">_DMXInputInfo::vt_switched</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8d8ef4b4e4f8e022a1452765e1f1e12"></a><!-- doxytag: member="dmxinputinit.c::dmxUpdateWindowInformation" ref="ab8d8ef4b4e4f8e022a1452765e1f1e12" args="(DMXInputInfo *dmxInput, DMXUpdateType type, WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxUpdateWindowInformation </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">DMX_UPDATE_COPY</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">DMX_UPDATE_REALIZE</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">DMX_UPDATE_REPARENT</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">DMX_UPDATE_RESIZE</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">DMX_UPDATE_RESTACK</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">DMX_UPDATE_UNREALIZE</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">_DMXLocalInputInfo::update_info</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a812e98c3ae4436f403739fc6f58eda6c"></a><!-- doxytag: member="dmxinputinit.c::dmxWakeupHandler" ref="a812e98c3ae4436f403739fc6f58eda6c" args="(pointer blockData, int result, pointer pReadMask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxWakeupHandler </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>blockData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pReadMask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsigio_8c.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">_DMXLocalInputInfo::vt_pre_switch</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">_DMXLocalInputInfo::vt_switch</a>, <a class="el" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">_DMXInputInfo::vt_switch_pending</a>, and <a class="el" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">_DMXInputInfo::vt_switched</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a4ad947489cdc8cae1835dbd5604e0cde"></a><!-- doxytag: member="dmxinputinit.c::DMXBackendKbd" ref="a4ad947489cdc8cae1835dbd5604e0cde" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#a4ad947489cdc8cae1835dbd5604e0cde">DMXBackendKbd</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <span class="stringliteral">&quot;backend-kbd&quot;</span>, <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">DMX_LOCAL_TYPE_BACKEND</a>,
+ 1,
+ <a class="code" href="dmxcommon_8c.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate</a>, NULL,
+ <a class="code" href="dmxbackend_8c.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit</a>, NULL, NULL, <a class="code" href="dmxbackend_8c.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo</a>,
+ <a class="code" href="dmxcommon_8c.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn</a>, <a class="code" href="dmxcommon_8c.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff</a>, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, <a class="code" href="dmxcommon_8c.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl</a>, <a class="code" href="dmxcommon_8c.html#aa069076ebf89f8b89668cffafb731cfe">dmxCommonKbdBell</a>
+}
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a420b4847b9c9f9992e042754c9a5d9c9"></a><!-- doxytag: member="dmxinputinit.c::DMXBackendMou" ref="a420b4847b9c9f9992e042754c9a5d9c9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#a420b4847b9c9f9992e042754c9a5d9c9">DMXBackendMou</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <span class="stringliteral">&quot;backend-mou&quot;</span>, <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">DMX_LOCAL_TYPE_BACKEND</a>, 2,
+ <a class="code" href="dmxbackend_8c.html#a2a875125c1316c123e45c7e7a9251c2e">dmxBackendCreatePrivate</a>, <a class="code" href="dmxbackend_8c.html#acd47377dd517a5494edae5920e3ae946">dmxBackendDestroyPrivate</a>,
+ <a class="code" href="dmxbackend_8c.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit</a>, NULL, <a class="code" href="dmxbackend_8c.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxBackendLateReInit</a>, <a class="code" href="dmxbackend_8c.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo</a>,
+ <a class="code" href="dmxcommon_8c.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn</a>, <a class="code" href="dmxcommon_8c.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff</a>, <a class="code" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition</a>,
+ NULL, NULL, NULL,
+ <a class="code" href="dmxbackend_8c.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents</a>, <a class="code" href="dmxbackend_8c.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput</a>, <a class="code" href="dmxbackend_8c.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxBackendFunctions</a>, NULL,
+ <a class="code" href="dmxcommon_8c.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl</a>
+}
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a3c213f84d74e74751787f916f509581f"></a><!-- doxytag: member="dmxinputinit.c::DMXConsoleKbd" ref="a3c213f84d74e74751787f916f509581f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#a3c213f84d74e74751787f916f509581f">DMXConsoleKbd</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <span class="stringliteral">&quot;console-kbd&quot;</span>, <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>,
+ 1,
+ <a class="code" href="dmxcommon_8c.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate</a>, NULL,
+ <a class="code" href="dmxconsole_8c.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit</a>, <a class="code" href="dmxconsole_8c.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit</a>, NULL, <a class="code" href="dmxconsole_8c.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo</a>,
+ <a class="code" href="dmxcommon_8c.html#a60cd36c3430ead2858986fe5f93165c1">dmxCommonKbdOn</a>, <a class="code" href="dmxcommon_8c.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxCommonKbdOff</a>, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, <a class="code" href="dmxcommon_8c.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxCommonKbdCtrl</a>, <a class="code" href="dmxcommon_8c.html#aa069076ebf89f8b89668cffafb731cfe">dmxCommonKbdBell</a>
+}
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a3a58ba39e104b23698ca8ef19789caf3"></a><!-- doxytag: member="dmxinputinit.c::DMXConsoleMou" ref="a3a58ba39e104b23698ca8ef19789caf3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#a3a58ba39e104b23698ca8ef19789caf3">DMXConsoleMou</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <span class="stringliteral">&quot;console-mou&quot;</span>, <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>, 2,
+ <a class="code" href="dmxconsole_8c.html#a44f5875f978cc85c2190eacef51debac">dmxConsoleCreatePrivate</a>, <a class="code" href="dmxconsole_8c.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxConsoleDestroyPrivate</a>,
+ <a class="code" href="dmxconsole_8c.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit</a>, <a class="code" href="dmxconsole_8c.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxConsoleReInit</a>, NULL, <a class="code" href="dmxconsole_8c.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo</a>,
+ <a class="code" href="dmxcommon_8c.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn</a>, <a class="code" href="dmxcommon_8c.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff</a>, <a class="code" href="dmxconsole_8c.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition</a>,
+ NULL, NULL, NULL,
+ <a class="code" href="dmxconsole_8c.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents</a>, NULL, <a class="code" href="dmxconsole_8c.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions</a>, <a class="code" href="dmxconsole_8c.html#a180def32863f7bdddf3637181661c505">dmxConsoleUpdateInfo</a>,
+ <a class="code" href="dmxcommon_8c.html#a11aa027975061ee6f3e684ee66f0f18c">dmxCommonMouCtrl</a>
+}
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="af0b33ec9267eea9d58f6792e33e02295"></a><!-- doxytag: member="dmxinputinit.c::DMXDummyKbd" ref="af0b33ec9267eea9d58f6792e33e02295" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#af0b33ec9267eea9d58f6792e33e02295">DMXDummyKbd</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <span class="stringliteral">&quot;dummy-kbd&quot;</span>, <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>, <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">DMX_LOCAL_TYPE_LOCAL</a>, 1,
+ NULL, NULL, NULL, NULL, NULL, <a class="code" href="dmxdummy_8c.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo</a>
+}
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a3041e526ae9e56b4a2d0a99f030af71f"></a><!-- doxytag: member="dmxinputinit.c::DMXDummyMou" ref="a3041e526ae9e56b4a2d0a99f030af71f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#a3041e526ae9e56b4a2d0a99f030af71f">DMXDummyMou</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Initial value:</b><div class="fragment"><pre class="fragment"> {
+ <span class="stringliteral">&quot;dummy-mou&quot;</span>, <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>, <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">DMX_LOCAL_TYPE_LOCAL</a>, 1,
+ NULL, NULL, NULL, NULL, NULL, <a class="code" href="dmxdummy_8c.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo</a>
+}
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="afbf8cd02f52e073392a645f6ef0bcf78"></a><!-- doxytag: member="dmxinputinit.c::dmxLocalCoreKeyboard" ref="afbf8cd02f52e073392a645f6ef0bcf78" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="el" href="dmxinputinit_8h.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, and <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab34ec11967377e32bc0817fb3a8b939e"></a><!-- doxytag: member="dmxinputinit.c::dmxLocalCorePointer" ref="ab34ec11967377e32bc0817fb3a8b939e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="el" href="dmxinputinit_8h.html#ab34ec11967377e32bc0817fb3a8b939e">dmxLocalCorePointer</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a74cb9ef11048e61ab91acd98613210b8"></a><!-- doxytag: member="dmxinputinit.c::DMXLocalDevices" ref="a74cb9ef11048e61ab91acd98613210b8" args="[]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a> <a class="el" href="dmxinputinit_8c.html#a74cb9ef11048e61ab91acd98613210b8">DMXLocalDevices</a>[]<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinputinit_8c.html">dmxinputinit.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinputinit_8h.html b/hw/dmx/doc/html/dmxinputinit_8h.html
new file mode 100644
index 0000000..c20237f
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinputinit_8h.html
@@ -0,0 +1,1122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinputinit_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxinputinit.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;dmx.h&quot;</code><br/>
+<code>#include &quot;dmxinput.h&quot;</code><br/>
+<code>#include &quot;dmxlog.h&quot;</code><br/>
+</div>
+<p><a href="dmxinputinit_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aa1870074757b46ee3d10dec90cdf2b64">DMX_LOCAL_DEFAULT_KEYBOARD</a>&#160;&#160;&#160;&quot;kbd&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a71db83edc922dbedc5f8b9d7bed08be8">DMX_LOCAL_DEFAULT_POINTER</a>&#160;&#160;&#160;&quot;ps2&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">DMX_MAX_BUTTONS</a>&#160;&#160;&#160;256</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>&#160;&#160;&#160;256</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aa3be211c7a2902aa6358627c1a2fe697">DMX_MAX_VALUATORS</a>&#160;&#160;&#160;32</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>&#160;&#160;&#160;32</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">DMX_MAX_XINPUT_EVENT_TYPES</a>&#160;&#160;&#160;100</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>&#160;&#160;&#160;16</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">DMX_MAP_MASK</a>&#160;&#160;&#160;(DMX_MAP_ENTRIES - 1)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a3c9d38c22c8aff8456167d8990cbded0">DMXLocalInitInfo</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a6f7eba570368d4ee72420f0cdb70f5c5">DMXLocalInitInfoPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef pointer(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxCreatePrivateProcPtr</a> )(DeviceIntPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxDestroyPrivateProcPtr</a> )(pointer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxInitProcPtr</a> )(DevicePtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxReInitProcPtr</a> )(DevicePtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxLateReInitProcPtr</a> )(DevicePtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxGetInfoProcPtr</a> )(DevicePtr, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxOnProcPtr</a> )(DevicePtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxOffProcPtr</a> )(DevicePtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxUpdatePositionProcPtr</a> )(pointer, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxVTPreSwitchProcPtr</a> )(pointer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxVTPostSwitchProcPtr</a> )(pointer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a> )(pointer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxVTSwitchProcPtr</a> )(pointer, int vt, <a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a>, pointer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> )(DevicePtr, int *valuators, int firstAxis, int axesCount, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> )(DevicePtr, int type, int detail, KeySym keySym, XEvent *e, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> )(DevicePtr, KeySym keySym)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxCollectEventsProcPtr</a> )(DevicePtr, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxProcessInputProcPtr</a> )(pointer)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxUpdateInfoProcPtr</a> )(pointer, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxFunctionsProcPtr</a> )(pointer, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxKBCtrlProcPtr</a> )(DevicePtr, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxMCtrlProcPtr</a> )(DevicePtr, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxKBBellProcPtr</a> )(DevicePtr, int percent, int volume, int pitch, int duration)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a8143582d36de7cbdda4cca97cc4fb4f8">DMXEventMap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a18d50c3ccca9422952b75ceed4e26e8e">DMXLocalInputInfoRec</a></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a> { <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">DMX_FUNCTION_GRAB</a>,
+<a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>,
+<a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">DMX_FUNCTION_FINE</a>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">DMXLocalInputType</a> { <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618">DMX_LOCAL_HIGHLEVEL</a>,
+<a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>,
+<a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>,
+<a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e">DMX_LOCAL_OTHER</a>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">DMXLocalInputExtType</a> { <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">DMX_LOCAL_TYPE_LOCAL</a>,
+<a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>,
+<a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">DMX_LOCAL_TYPE_BACKEND</a>,
+<a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">DMX_LOCAL_TYPE_COMMON</a>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> { <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>,
+<a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>,
+<a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">DMX_ABSOLUTE_CONFINED</a>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a5ed320a98bbcf4d2970316dff3ddb349">dmxLocalInitInput</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> s)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl</a> (DeviceIntPtr pDevice, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc</a> (DeviceIntPtr pDevice, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc</a> (int percent, DeviceIntPtr pDevice, pointer ctrl, int unknown)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxInputExtensionErrorHandler</a> (Display *dsp, _Xconst char *name, _Xconst char *reason)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId</a> (int id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId</a> (int id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole</a> (const char *name, int isCore, int *id)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend</a> (int physicalScreen, int isCore, int *id)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#ab34ec11967377e32bc0817fb3a8b939e">dmxLocalCorePointer</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxinputinit_8h.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for low-level input support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinputinit_8c.html">dmxinputinit.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aa1870074757b46ee3d10dec90cdf2b64"></a><!-- doxytag: member="dmxinputinit.h::DMX_LOCAL_DEFAULT_KEYBOARD" ref="aa1870074757b46ee3d10dec90cdf2b64" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_LOCAL_DEFAULT_KEYBOARD&#160;&#160;&#160;&quot;kbd&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a71db83edc922dbedc5f8b9d7bed08be8"></a><!-- doxytag: member="dmxinputinit.h::DMX_LOCAL_DEFAULT_POINTER" ref="a71db83edc922dbedc5f8b9d7bed08be8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_LOCAL_DEFAULT_POINTER&#160;&#160;&#160;&quot;ps2&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a13002c58c62fa0d9c65076f22c4df452"></a><!-- doxytag: member="dmxinputinit.h::DMX_MAP_ENTRIES" ref="a13002c58c62fa0d9c65076f22c4df452" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAP_ENTRIES&#160;&#160;&#160;16</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear()</a>, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, and <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a51a3f23fde19e452c34d472758710b90"></a><!-- doxytag: member="dmxinputinit.h::DMX_MAP_MASK" ref="a51a3f23fde19e452c34d472758710b90" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAP_MASK&#160;&#160;&#160;(DMX_MAP_ENTRIES - 1)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, and <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a144e2f1a618a0d14e2c9ce4fda50104a"></a><!-- doxytag: member="dmxinputinit.h::DMX_MAX_AXES" ref="a144e2f1a618a0d14e2c9ce4fda50104a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAX_AXES&#160;&#160;&#160;32</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a612274ec201ce93ff486a18bf84225ec"></a><!-- doxytag: member="dmxinputinit.h::DMX_MAX_BUTTONS" ref="a612274ec201ce93ff486a18bf84225ec" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAX_BUTTONS&#160;&#160;&#160;256</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a9ce209ad340f84644115a165eadfa540">dmxCommonMouGetMap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa3be211c7a2902aa6358627c1a2fe697"></a><!-- doxytag: member="dmxinputinit.h::DMX_MAX_VALUATORS" ref="aa3be211c7a2902aa6358627c1a2fe697" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAX_VALUATORS&#160;&#160;&#160;32</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae754d74afaf08d6e9b46b3bc7581623e"></a><!-- doxytag: member="dmxinputinit.h::DMX_MAX_XINPUT_EVENT_TYPES" ref="ae754d74afaf08d6e9b46b3bc7581623e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAX_XINPUT_EVENT_TYPES&#160;&#160;&#160;100</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5877f857ec01a4754c187147f3e34f1"></a><!-- doxytag: member="dmxinputinit.h::DMX_MOTION_SIZE" ref="aa5877f857ec01a4754c187147f3e34f1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MOTION_SIZE&#160;&#160;&#160;256</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxmotion_8h.html#a71e31cfbffb3603068d897374e173400">dmxPointerGetMotionBufferSize()</a>, <a class="el" href="dmxmotion_8h.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxPointerGetMotionEvents()</a>, and <a class="el" href="dmxmotion_8h.html#abe71ba14a07f4077ca2658f81426f4c6">dmxPointerPutMotionEvent()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a838cb45fd92d5cf506e4179b601f7dbc"></a><!-- doxytag: member="dmxinputinit.h::dmxCheckSpecialProcPtr" ref="a838cb45fd92d5cf506e4179b601f7dbc" args=")(DevicePtr, KeySym keySym)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>)(DevicePtr, KeySym keySym)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adcfb97363d7c30f429637f857e07ab89"></a><!-- doxytag: member="dmxinputinit.h::dmxCollectEventsProcPtr" ref="adcfb97363d7c30f429637f857e07ab89" args=")(DevicePtr, dmxMotionProcPtr, dmxEnqueueProcPtr, dmxCheckSpecialProcPtr, DMXBlockType)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxCollectEventsProcPtr</a>)(DevicePtr, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aee05637c82c5006dc39a8a208e59681d"></a><!-- doxytag: member="dmxinputinit.h::dmxCreatePrivateProcPtr" ref="aee05637c82c5006dc39a8a208e59681d" args=")(DeviceIntPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef pointer(* <a class="el" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxCreatePrivateProcPtr</a>)(DeviceIntPtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2da7d7738bd1daf6c24aab0ba07caf54"></a><!-- doxytag: member="dmxinputinit.h::dmxDestroyPrivateProcPtr" ref="a2da7d7738bd1daf6c24aab0ba07caf54" args=")(pointer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxDestroyPrivateProcPtr</a>)(pointer)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adbd955b9ddbc5ffe38ff65e3f068f205"></a><!-- doxytag: member="dmxinputinit.h::dmxEnqueueProcPtr" ref="adbd955b9ddbc5ffe38ff65e3f068f205" args=")(DevicePtr, int type, int detail, KeySym keySym, XEvent *e, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>)(DevicePtr, int type, int detail, KeySym keySym, XEvent *e, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8143582d36de7cbdda4cca97cc4fb4f8"></a><!-- doxytag: member="dmxinputinit.h::DMXEventMap" ref="a8143582d36de7cbdda4cca97cc4fb4f8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a> <a class="el" href="struct__DMXEventMap.html">DMXEventMap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores a mapping between the device id on the remote X server and the id on the DMX server </p>
+
+</div>
+</div>
+<a class="anchor" id="a8b1303060b18fcc2d85f44d658ae75c4"></a><!-- doxytag: member="dmxinputinit.h::dmxFunctionsProcPtr" ref="a8b1303060b18fcc2d85f44d658ae75c4" args=")(pointer, DMXFunctionType)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxFunctionsProcPtr</a>)(pointer, <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a26894f455a9a482ea75157931a1458d7"></a><!-- doxytag: member="dmxinputinit.h::dmxGetInfoProcPtr" ref="a26894f455a9a482ea75157931a1458d7" args=")(DevicePtr, DMXLocalInitInfoPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxGetInfoProcPtr</a>)(DevicePtr, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a170923459cb2d78f2a9aa623d3af2a5e"></a><!-- doxytag: member="dmxinputinit.h::dmxInitProcPtr" ref="a170923459cb2d78f2a9aa623d3af2a5e" args=")(DevicePtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxInitProcPtr</a>)(DevicePtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7e43ef34585bcd2dfb1f6c72b46674b0"></a><!-- doxytag: member="dmxinputinit.h::dmxKBBellProcPtr" ref="a7e43ef34585bcd2dfb1f6c72b46674b0" args=")(DevicePtr, int percent, int volume, int pitch, int duration)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxKBBellProcPtr</a>)(DevicePtr, int percent, int volume, int pitch, int duration)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afd1aa8768fbb96900d4a206a33f0fa10"></a><!-- doxytag: member="dmxinputinit.h::dmxKBCtrlProcPtr" ref="afd1aa8768fbb96900d4a206a33f0fa10" args=")(DevicePtr, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxKBCtrlProcPtr</a>)(DevicePtr, KeybdCtrl *ctrl)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7710375b1daf4c8a43e1bc45b1459885"></a><!-- doxytag: member="dmxinputinit.h::dmxLateReInitProcPtr" ref="a7710375b1daf4c8a43e1bc45b1459885" args=")(DevicePtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxLateReInitProcPtr</a>)(DevicePtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3c9d38c22c8aff8456167d8990cbded0"></a><!-- doxytag: member="dmxinputinit.h::DMXLocalInitInfo" ref="a3c9d38c22c8aff8456167d8990cbded0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfo</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores information from low-level device that is used to initialize the device at the dix level. </p>
+
+</div>
+</div>
+<a class="anchor" id="a6f7eba570368d4ee72420f0cdb70f5c5"></a><!-- doxytag: member="dmxinputinit.h::DMXLocalInitInfoPtr" ref="a6f7eba570368d4ee72420f0cdb70f5c5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> * <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a18d50c3ccca9422952b75ceed4e26e8e"></a><!-- doxytag: member="dmxinputinit.h::DMXLocalInputInfoRec" ref="a18d50c3ccca9422952b75ceed4e26e8e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> <a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This is the device-independent structure used by the low-level input routines. The contents are not exposed to top-level .c files (except dmxextensions.c). </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html">dmxinput.h</a> </dd>
+<dd>
+dmxextensions.c </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="a663082c69800179ce7177163c231ac9c"></a><!-- doxytag: member="dmxinputinit.h::dmxMCtrlProcPtr" ref="a663082c69800179ce7177163c231ac9c" args=")(DevicePtr, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxMCtrlProcPtr</a>)(DevicePtr, PtrCtrl *ctrl)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1279820425966adabf5c77357e4a289c"></a><!-- doxytag: member="dmxinputinit.h::dmxMotionProcPtr" ref="a1279820425966adabf5c77357e4a289c" args=")(DevicePtr, int *valuators, int firstAxis, int axesCount, DMXMotionType type, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>)(DevicePtr, int *valuators, int firstAxis, int axesCount, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a73975f436d350bc9d62310c3aa18b970"></a><!-- doxytag: member="dmxinputinit.h::dmxOffProcPtr" ref="a73975f436d350bc9d62310c3aa18b970" args=")(DevicePtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxOffProcPtr</a>)(DevicePtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac047d21e0ad6e06d7e1c8d4ff4bcb689"></a><!-- doxytag: member="dmxinputinit.h::dmxOnProcPtr" ref="ac047d21e0ad6e06d7e1c8d4ff4bcb689" args=")(DevicePtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxOnProcPtr</a>)(DevicePtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad4cb1ed046822462a5d60edeebcbf586"></a><!-- doxytag: member="dmxinputinit.h::dmxProcessInputProcPtr" ref="ad4cb1ed046822462a5d60edeebcbf586" args=")(pointer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxProcessInputProcPtr</a>)(pointer)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae9c6f42a280d980b6b99d7e05b27c3c9"></a><!-- doxytag: member="dmxinputinit.h::dmxReInitProcPtr" ref="ae9c6f42a280d980b6b99d7e05b27c3c9" args=")(DevicePtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxReInitProcPtr</a>)(DevicePtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a85e276bf34bacc668c901e37fd787dfc"></a><!-- doxytag: member="dmxinputinit.h::dmxUpdateInfoProcPtr" ref="a85e276bf34bacc668c901e37fd787dfc" args=")(pointer, DMXUpdateType, WindowPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxUpdateInfoProcPtr</a>)(pointer, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a23f7990e959535436e5a29aaf43e09f0"></a><!-- doxytag: member="dmxinputinit.h::dmxUpdatePositionProcPtr" ref="a23f7990e959535436e5a29aaf43e09f0" args=")(pointer, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxUpdatePositionProcPtr</a>)(pointer, int x, int y)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aba1f3ed3e0d93c6fea0448b6f928132b"></a><!-- doxytag: member="dmxinputinit.h::dmxVTPostSwitchProcPtr" ref="aba1f3ed3e0d93c6fea0448b6f928132b" args=")(pointer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxVTPostSwitchProcPtr</a>)(pointer)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af7ef16143e5a5fa77c00cacdd710abf0"></a><!-- doxytag: member="dmxinputinit.h::dmxVTPreSwitchProcPtr" ref="af7ef16143e5a5fa77c00cacdd710abf0" args=")(pointer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxVTPreSwitchProcPtr</a>)(pointer)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af276a0d0ad01b9c9f8485cdf9b218b92"></a><!-- doxytag: member="dmxinputinit.h::dmxVTSwitchProcPtr" ref="af276a0d0ad01b9c9f8485cdf9b218b92" args=")(pointer, int vt, dmxVTSwitchReturnProcPtr, pointer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef int(* <a class="el" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxVTSwitchProcPtr</a>)(pointer, int vt, <a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a>, pointer)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adb9019a46004e627338bfb4a02800636"></a><!-- doxytag: member="dmxinputinit.h::dmxVTSwitchReturnProcPtr" ref="adb9019a46004e627338bfb4a02800636" args=")(pointer)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef void(* <a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a>)(pointer)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="a9537dacd464c8445848fb808e172039c"></a><!-- doxytag: member="dmxinputinit.h::DMXFunctionType" ref="a9537dacd464c8445848fb808e172039c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4"></a><!-- doxytag: member="DMX_FUNCTION_GRAB" ref="a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4" args="" -->DMX_FUNCTION_GRAB</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a"></a><!-- doxytag: member="DMX_FUNCTION_TERMINATE" ref="a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a" args="" -->DMX_FUNCTION_TERMINATE</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f"></a><!-- doxytag: member="DMX_FUNCTION_FINE" ref="a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f" args="" -->DMX_FUNCTION_FINE</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="adb3d11ae6b6d741bc4ac9be219eae9ba"></a><!-- doxytag: member="dmxinputinit.h::DMXLocalInputExtType" ref="adb3d11ae6b6d741bc4ac9be219eae9ba" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">DMXLocalInputExtType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16"></a><!-- doxytag: member="DMX_LOCAL_TYPE_LOCAL" ref="adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16" args="" -->DMX_LOCAL_TYPE_LOCAL</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8"></a><!-- doxytag: member="DMX_LOCAL_TYPE_CONSOLE" ref="adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8" args="" -->DMX_LOCAL_TYPE_CONSOLE</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa"></a><!-- doxytag: member="DMX_LOCAL_TYPE_BACKEND" ref="adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa" args="" -->DMX_LOCAL_TYPE_BACKEND</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee"></a><!-- doxytag: member="DMX_LOCAL_TYPE_COMMON" ref="adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee" args="" -->DMX_LOCAL_TYPE_COMMON</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="aa3fce3ce186af0687bc43e0e4930181b"></a><!-- doxytag: member="dmxinputinit.h::DMXLocalInputType" ref="aa3fce3ce186af0687bc43e0e4930181b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">DMXLocalInputType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618"></a><!-- doxytag: member="DMX_LOCAL_HIGHLEVEL" ref="aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618" args="" -->DMX_LOCAL_HIGHLEVEL</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2"></a><!-- doxytag: member="DMX_LOCAL_KEYBOARD" ref="aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2" args="" -->DMX_LOCAL_KEYBOARD</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818"></a><!-- doxytag: member="DMX_LOCAL_MOUSE" ref="aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818" args="" -->DMX_LOCAL_MOUSE</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e"></a><!-- doxytag: member="DMX_LOCAL_OTHER" ref="aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e" args="" -->DMX_LOCAL_OTHER</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a009c1c06db97e0347237f11a701db349"></a><!-- doxytag: member="dmxinputinit.h::DMXMotionType" ref="a009c1c06db97e0347237f11a701db349" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412"></a><!-- doxytag: member="DMX_RELATIVE" ref="a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412" args="" -->DMX_RELATIVE</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06"></a><!-- doxytag: member="DMX_ABSOLUTE" ref="a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06" args="" -->DMX_ABSOLUTE</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c"></a><!-- doxytag: member="DMX_ABSOLUTE_CONFINED" ref="a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c" args="" -->DMX_ABSOLUTE_CONFINED</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aaba396b9c08ac672d3dcf6561ac57b40"></a><!-- doxytag: member="dmxinputinit.h::dmxChangePointerControl" ref="aaba396b9c08ac672d3dcf6561ac57b40" args="(DeviceIntPtr pDevice, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangePointerControl </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the pointer control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the pointer devices that send core events. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">_dmxChangePointerControl()</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ee085307a1dba7b07fa2eb34639815c"></a><!-- doxytag: member="dmxinputinit.h::dmxInputAttachBackend" ref="a2ee085307a1dba7b07fa2eb34639815c" args="(int physicalScreen, int isCore, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputAttachBackend </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>physicalScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>isCore</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3f9807875f237589d57ab9f006735af"></a><!-- doxytag: member="dmxinputinit.h::dmxInputAttachConsole" ref="ac3f9807875f237589d57ab9f006735af" args="(const char *name, int isCore, int *id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputAttachConsole </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>isCore</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>id</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo::freename</a>, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a816d1052ef5a587ef8e16b0005b06662"></a><!-- doxytag: member="dmxinputinit.h::dmxInputCopyLocal" ref="a816d1052ef5a587ef8e16b0005b06662" args="(DMXInputInfo *dmxInput, DMXLocalInputInfoPtr s)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxInputCopyLocal </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>s</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Copy the local input information from <em>s</em> into a new <em>devs</em> slot in <em>dmxInput</em>. </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo::inputIdx</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">_DMXLocalInputInfo::savedSendsCore</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4d026f31f7b32bd571bdcf9e091c419"></a><!-- doxytag: member="dmxinputinit.h::dmxInputDetach" ref="ac4d026f31f7b32bd571bdcf9e091c419" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputDetach </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Detach an input </p>
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adec246343ae8402c7cc47b19020c7ef7"></a><!-- doxytag: member="dmxinputinit.h::dmxInputDetachAll" ref="adec246343ae8402c7cc47b19020c7ef7" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInputDetachAll </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Search for input associated with <em>dmxScreen</em>, and detach. </p>
+
+<p>References <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, and <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad7a3f09eeaf98373c261119fba907c47"></a><!-- doxytag: member="dmxinputinit.h::dmxInputDetachId" ref="ad7a3f09eeaf98373c261119fba907c47" args="(int id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputDetachId </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Search for input associated with <em>deviceId</em>, and detach. </p>
+
+<p>References <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, and <a class="el" href="dmxinputinit_8c.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a55936739d6df4e5b8a048d5d34c6cd39">dmxRemoveInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a50c2f7d406a3aacf3bf95b94d616527c"></a><!-- doxytag: member="dmxinputinit.h::dmxInputExtensionErrorHandler" ref="a50c2f7d406a3aacf3bf95b94d616527c" args="(Display *dsp, _Xconst char *name, _Xconst char *reason)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxInputExtensionErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dsp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">_Xconst char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">_Xconst char *&#160;</td>
+ <td class="paramname"><em>reason</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, and <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0bcd445301dd91f20c9eb0b6dce0b42"></a><!-- doxytag: member="dmxinputinit.h::dmxInputLocateId" ref="ae0bcd445301dd91f20c9eb0b6dce0b42" args="(int id)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* dmxInputLocateId </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>id</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab127903bdb6bf262e51f128b4cec4960"></a><!-- doxytag: member="dmxinputinit.h::dmxKeyboardBellProc" ref="ab127903bdb6bf262e51f128b4cec4960" args="(int percent, DeviceIntPtr pDevice, pointer ctrl, int unknown)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxKeyboardBellProc </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>ctrl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>unknown</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sound the bell on the device. If the device send core events, then sound the bell on all of the devices that send core events. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">_dmxKeyboardBellProc()</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad23e145891ad0fb1c909d85ca8e4fe19"></a><!-- doxytag: member="dmxinputinit.h::dmxKeyboardKbdCtrlProc" ref="ad23e145891ad0fb1c909d85ca8e4fe19" args="(DeviceIntPtr pDevice, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxKeyboardKbdCtrlProc </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the keyboard control information for the <em>pDevice</em>. If the device sends core events, then also change the control information for all of the keyboard devices that send core events. </p>
+
+<p>References <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">_dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, and <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5ed320a98bbcf4d2970316dff3ddb349"></a><!-- doxytag: member="dmxinputinit.h::dmxLocalInitInput" ref="a5ed320a98bbcf4d2970316dff3ddb349" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLocalInitInput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="afbf8cd02f52e073392a645f6ef0bcf78"></a><!-- doxytag: member="dmxinputinit.h::dmxLocalCoreKeyboard" ref="afbf8cd02f52e073392a645f6ef0bcf78" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="el" href="dmxinputinit_8h.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, and <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab34ec11967377e32bc0817fb3a8b939e"></a><!-- doxytag: member="dmxinputinit.h::dmxLocalCorePointer" ref="ab34ec11967377e32bc0817fb3a8b939e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="el" href="dmxinputinit_8h.html#ab34ec11967377e32bc0817fb3a8b939e">dmxLocalCorePointer</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinputinit_8h.html">dmxinputinit.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxinputinit_8h_source.html b/hw/dmx/doc/html/dmxinputinit_8h_source.html
new file mode 100644
index 0000000..4ea9771
--- /dev/null
+++ b/hw/dmx/doc/html/dmxinputinit_8h_source.html
@@ -0,0 +1,291 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxinputinit_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxinputinit.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxinputinit_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXINPUTINIT_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXINPUTINIT_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;dmx.h&quot;</span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include &quot;dmxinput.h&quot;</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include &quot;dmxlog.h&quot;</span>
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044
+<a name="l00045"></a><a class="code" href="dmxinputinit_8h.html#aa1870074757b46ee3d10dec90cdf2b64">00045</a> <span class="preprocessor">#define DMX_LOCAL_DEFAULT_KEYBOARD &quot;kbd&quot;</span>
+<a name="l00046"></a><a class="code" href="dmxinputinit_8h.html#a71db83edc922dbedc5f8b9d7bed08be8">00046</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_LOCAL_DEFAULT_POINTER &quot;ps2&quot;</span>
+<a name="l00047"></a><a class="code" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">00047</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_BUTTONS 256</span>
+<a name="l00048"></a><a class="code" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">00048</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_MOTION_SIZE 256</span>
+<a name="l00049"></a><a class="code" href="dmxinputinit_8h.html#aa3be211c7a2902aa6358627c1a2fe697">00049</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_VALUATORS 32</span>
+<a name="l00050"></a><a class="code" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">00050</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_AXES 32</span>
+<a name="l00051"></a><a class="code" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">00051</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAX_XINPUT_EVENT_TYPES 100</span>
+<a name="l00052"></a><a class="code" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">00052</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_MAP_ENTRIES 16 </span><span class="comment">/* Must be a power of 2 */</span>
+<a name="l00053"></a><a class="code" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">00053</a> <span class="preprocessor">#define DMX_MAP_MASK (DMX_MAP_ENTRIES - 1)</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a><a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">00055</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00056"></a><a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">00056</a> <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">DMX_FUNCTION_GRAB</a>,
+<a name="l00057"></a><a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">00057</a> <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">DMX_FUNCTION_TERMINATE</a>,
+<a name="l00058"></a><a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">00058</a> <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">DMX_FUNCTION_FINE</a>
+<a name="l00059"></a>00059 } <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>;
+<a name="l00060"></a>00060
+<a name="l00061"></a><a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">00061</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00062"></a><a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618">00062</a> <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618">DMX_LOCAL_HIGHLEVEL</a>,
+<a name="l00063"></a><a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">00063</a> <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">DMX_LOCAL_KEYBOARD</a>,
+<a name="l00064"></a><a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">00064</a> <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">DMX_LOCAL_MOUSE</a>,
+<a name="l00065"></a><a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e">00065</a> <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e">DMX_LOCAL_OTHER</a>
+<a name="l00066"></a>00066 } <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">DMXLocalInputType</a>;
+<a name="l00067"></a>00067
+<a name="l00068"></a><a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">00068</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00069"></a><a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">00069</a> <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">DMX_LOCAL_TYPE_LOCAL</a>,
+<a name="l00070"></a><a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">00070</a> <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">DMX_LOCAL_TYPE_CONSOLE</a>,
+<a name="l00071"></a><a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">00071</a> <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">DMX_LOCAL_TYPE_BACKEND</a>,
+<a name="l00072"></a><a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">00072</a> <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">DMX_LOCAL_TYPE_COMMON</a>
+<a name="l00073"></a>00073 } <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">DMXLocalInputExtType</a>;
+<a name="l00074"></a>00074
+<a name="l00075"></a><a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">00075</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00076"></a><a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">00076</a> <a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>,
+<a name="l00077"></a><a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">00077</a> <a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>,
+<a name="l00078"></a><a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">00078</a> <a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">DMX_ABSOLUTE_CONFINED</a>
+<a name="l00079"></a>00079 } <a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a>;
+<a name="l00080"></a>00080
+<a name="l00083"></a><a class="code" href="struct__DMXLocalInitInfo.html">00083</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> {
+<a name="l00084"></a><a class="code" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">00084</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">keyboard</a>;
+<a name="l00086"></a><a class="code" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">00086</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">keyClass</a>;
+<a name="l00087"></a><a class="code" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">00087</a> KeySymsRec <a class="code" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">keySyms</a>;
+<a name="l00088"></a><a class="code" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">00088</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">freemap</a>;
+<a name="l00089"></a><a class="code" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">00089</a> CARD8 <a class="code" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">modMap</a>[MAP_LENGTH];
+<a name="l00090"></a><a class="code" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">00090</a> XkbDescPtr <a class="code" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">xkb</a>;
+<a name="l00091"></a><a class="code" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">00091</a> XkbComponentNamesRec <a class="code" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">names</a>;
+<a name="l00092"></a><a class="code" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">00092</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">freenames</a>;
+<a name="l00093"></a><a class="code" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">00093</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">force</a>;
+<a name="l00095"></a><a class="code" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">00095</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">buttonClass</a>;
+<a name="l00096"></a><a class="code" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">00096</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">numButtons</a>;
+<a name="l00097"></a><a class="code" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">00097</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">map</a>[<a class="code" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">DMX_MAX_BUTTONS</a>];
+<a name="l00099"></a><a class="code" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">00099</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">valuatorClass</a>;
+<a name="l00101"></a><a class="code" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">00101</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">numRelAxes</a>;
+<a name="l00102"></a><a class="code" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">00102</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">numAbsAxes</a>;
+<a name="l00103"></a><a class="code" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">00103</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">minval</a>[<a class="code" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00104"></a><a class="code" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">00104</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">maxval</a>[<a class="code" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00105"></a><a class="code" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">00105</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">res</a>[<a class="code" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00106"></a><a class="code" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">00106</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">minres</a>[<a class="code" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00107"></a><a class="code" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">00107</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">maxres</a>[<a class="code" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00109"></a><a class="code" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">00109</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">focusClass</a>;
+<a name="l00111"></a><a class="code" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">00111</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">proximityClass</a>;
+<a name="l00113"></a><a class="code" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">00113</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">kbdFeedbackClass</a>;
+<a name="l00115"></a><a class="code" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">00115</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">ptrFeedbackClass</a>;
+<a name="l00117"></a><a class="code" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">00117</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">ledFeedbackClass</a>;
+<a name="l00119"></a><a class="code" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">00119</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">belFeedbackClass</a>;
+<a name="l00121"></a><a class="code" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">00121</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">intFeedbackClass</a>;
+<a name="l00123"></a><a class="code" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">00123</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">strFeedbackClass</a>;
+<a name="l00126"></a><a class="code" href="struct__DMXLocalInitInfo.html#ae5dc18536a191e46bfe6682f82afd583">00126</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#ae5dc18536a191e46bfe6682f82afd583">maxSymbols</a>;
+<a name="l00127"></a><a class="code" href="struct__DMXLocalInitInfo.html#a8a8933752768b613acbda0743bbcfbe6">00127</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInitInfo.html#a8a8933752768b613acbda0743bbcfbe6">maxSymbolsSupported</a>;
+<a name="l00128"></a><a class="code" href="struct__DMXLocalInitInfo.html#a6b496d0ba54c63d406ef46ddcf714790">00128</a> KeySym *<a class="code" href="struct__DMXLocalInitInfo.html#a6b496d0ba54c63d406ef46ddcf714790">symbols</a>;
+<a name="l00129"></a>00129 } <a class="code" href="dmxinputinit_8h.html#a3c9d38c22c8aff8456167d8990cbded0">DMXLocalInitInfo</a>, *<a class="code" href="dmxinputinit_8h.html#a6f7eba570368d4ee72420f0cdb70f5c5">DMXLocalInitInfoPtr</a>;
+<a name="l00130"></a>00130
+<a name="l00131"></a><a class="code" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">00131</a> <span class="keyword">typedef</span> pointer (*<a class="code" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxCreatePrivateProcPtr</a>)(DeviceIntPtr);
+<a name="l00132"></a><a class="code" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">00132</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxDestroyPrivateProcPtr</a>)(pointer);
+<a name="l00133"></a>00133
+<a name="l00134"></a><a class="code" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">00134</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxInitProcPtr</a>)(DevicePtr);
+<a name="l00135"></a><a class="code" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">00135</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxReInitProcPtr</a>)(DevicePtr);
+<a name="l00136"></a><a class="code" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">00136</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxLateReInitProcPtr</a>)(DevicePtr);
+<a name="l00137"></a><a class="code" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">00137</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxGetInfoProcPtr</a>)(DevicePtr, <a class="code" href="dmxinputinit_8h.html#a6f7eba570368d4ee72420f0cdb70f5c5">DMXLocalInitInfoPtr</a>);
+<a name="l00138"></a><a class="code" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">00138</a> <span class="keyword">typedef</span> int (*<a class="code" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxOnProcPtr</a>)(DevicePtr);
+<a name="l00139"></a><a class="code" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">00139</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxOffProcPtr</a>)(DevicePtr);
+<a name="l00140"></a><a class="code" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">00140</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxUpdatePositionProcPtr</a>)(pointer, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00141"></a>00141
+<a name="l00142"></a><a class="code" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">00142</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxVTPreSwitchProcPtr</a>)(pointer); <span class="comment">/* Turn I/O Off */</span>
+<a name="l00143"></a><a class="code" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">00143</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxVTPostSwitchProcPtr</a>)(pointer); <span class="comment">/* Turn I/O On */</span>
+<a name="l00144"></a><a class="code" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">00144</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a>)(pointer);
+<a name="l00145"></a><a class="code" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">00145</a> <span class="keyword">typedef</span> int (*<a class="code" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxVTSwitchProcPtr</a>)(pointer, <span class="keywordtype">int</span> vt,
+<a name="l00146"></a>00146 <a class="code" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a>, pointer);
+<a name="l00147"></a>00147
+<a name="l00148"></a><a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">00148</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>)(DevicePtr,
+<a name="l00149"></a>00149 <span class="keywordtype">int</span> *valuators,
+<a name="l00150"></a>00150 <span class="keywordtype">int</span> firstAxis,
+<a name="l00151"></a>00151 <span class="keywordtype">int</span> axesCount,
+<a name="l00152"></a>00152 <a class="code" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">DMXMotionType</a> type,
+<a name="l00153"></a>00153 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00154"></a><a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">00154</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>)(DevicePtr, <span class="keywordtype">int</span> type, <span class="keywordtype">int</span> detail,
+<a name="l00155"></a>00155 KeySym keySym, XEvent *e,
+<a name="l00156"></a>00156 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00157"></a><a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">00157</a> <span class="keyword">typedef</span> int (*<a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>)(DevicePtr, KeySym keySym);
+<a name="l00158"></a><a class="code" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">00158</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxCollectEventsProcPtr</a>)(DevicePtr,
+<a name="l00159"></a>00159 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>,
+<a name="l00160"></a>00160 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>,
+<a name="l00161"></a>00161 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>,
+<a name="l00162"></a>00162 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>);
+<a name="l00163"></a><a class="code" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">00163</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxProcessInputProcPtr</a>)(pointer);
+<a name="l00164"></a><a class="code" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">00164</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxUpdateInfoProcPtr</a>)(pointer, <a class="code" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">DMXUpdateType</a>, WindowPtr);
+<a name="l00165"></a><a class="code" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">00165</a> <span class="keyword">typedef</span> int (*<a class="code" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxFunctionsProcPtr</a>)(pointer, <a class="code" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">DMXFunctionType</a>);
+<a name="l00166"></a>00166
+<a name="l00167"></a><a class="code" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">00167</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxKBCtrlProcPtr</a>)(DevicePtr, KeybdCtrl *ctrl);
+<a name="l00168"></a><a class="code" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">00168</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxMCtrlProcPtr</a>)(DevicePtr, PtrCtrl *ctrl);
+<a name="l00169"></a><a class="code" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">00169</a> <span class="keyword">typedef</span> void (*<a class="code" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxKBBellProcPtr</a>)(DevicePtr, <span class="keywordtype">int</span> percent,
+<a name="l00170"></a>00170 <span class="keywordtype">int</span> volume, <span class="keywordtype">int</span> pitch, <span class="keywordtype">int</span> duration);
+<a name="l00171"></a>00171
+<a name="l00174"></a><a class="code" href="struct__DMXEventMap.html">00174</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXEventMap.html">_DMXEventMap</a> {
+<a name="l00175"></a><a class="code" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">00175</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">remote</a>;
+<a name="l00176"></a><a class="code" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">00176</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">server</a>;
+<a name="l00177"></a>00177 } <a class="code" href="dmxinputinit_8h.html#a8143582d36de7cbdda4cca97cc4fb4f8">DMXEventMap</a>;
+<a name="l00178"></a>00178
+<a name="l00182"></a><a class="code" href="struct__DMXLocalInputInfo.html">00182</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> {
+<a name="l00183"></a><a class="code" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">00183</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">name</a>;
+<a name="l00184"></a><a class="code" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">00184</a> <a class="code" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">DMXLocalInputType</a> <a class="code" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">type</a>;
+<a name="l00185"></a><a class="code" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">00185</a> <a class="code" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">DMXLocalInputExtType</a> <a class="code" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">extType</a>;
+<a name="l00186"></a><a class="code" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">00186</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">binding</a>;
+<a name="l00190"></a>00190 <span class="comment">/* Low-level (e.g., keyboard/mouse drivers) */</span>
+<a name="l00191"></a>00191
+<a name="l00192"></a><a class="code" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">00192</a> <a class="code" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxCreatePrivateProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">create_private</a>;
+<a name="l00195"></a><a class="code" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">00195</a> <a class="code" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxDestroyPrivateProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">destroy_private</a>;
+<a name="l00198"></a><a class="code" href="struct__DMXLocalInputInfo.html#ac7d8e55012dcd7fd721802069a4cda7c">00198</a> <a class="code" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxInitProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#ac7d8e55012dcd7fd721802069a4cda7c">init</a>;
+<a name="l00199"></a><a class="code" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">00199</a> <a class="code" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxReInitProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">reinit</a>;
+<a name="l00202"></a><a class="code" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">00202</a> <a class="code" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxLateReInitProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">latereinit</a>;
+<a name="l00206"></a><a class="code" href="struct__DMXLocalInputInfo.html#a4d215378947d50a9abc74adcec917313">00206</a> <a class="code" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxGetInfoProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a4d215378947d50a9abc74adcec917313">get_info</a>;
+<a name="l00207"></a><a class="code" href="struct__DMXLocalInputInfo.html#a52fc64a76d0954ed17a1d6ec8abbcce2">00207</a> <a class="code" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxOnProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a52fc64a76d0954ed17a1d6ec8abbcce2">on</a>;
+<a name="l00208"></a><a class="code" href="struct__DMXLocalInputInfo.html#abbc252251f0694ad7754f021c9b0fdd4">00208</a> <a class="code" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxOffProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#abbc252251f0694ad7754f021c9b0fdd4">off</a>;
+<a name="l00209"></a><a class="code" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">00209</a> <a class="code" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxUpdatePositionProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">update_position</a>;
+<a name="l00212"></a><a class="code" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">00212</a> <a class="code" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxVTPreSwitchProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">vt_pre_switch</a>;
+<a name="l00213"></a><a class="code" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">00213</a> <a class="code" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxVTPostSwitchProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">vt_post_switch</a>;
+<a name="l00214"></a><a class="code" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">00214</a> <a class="code" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxVTSwitchProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">vt_switch</a>;
+<a name="l00216"></a><a class="code" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">00216</a> <a class="code" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxCollectEventsProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">collect_events</a>;
+<a name="l00219"></a><a class="code" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">00219</a> <a class="code" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxProcessInputProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">process_input</a>;
+<a name="l00221"></a><a class="code" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">00221</a> <a class="code" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxFunctionsProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">functions</a>;
+<a name="l00222"></a><a class="code" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">00222</a> <a class="code" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxUpdateInfoProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">update_info</a>;
+<a name="l00225"></a><a class="code" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">00225</a> <a class="code" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxMCtrlProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">mCtrl</a>;
+<a name="l00226"></a><a class="code" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">00226</a> <a class="code" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxKBCtrlProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">kCtrl</a>;
+<a name="l00227"></a><a class="code" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">00227</a> <a class="code" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxKBBellProcPtr</a> <a class="code" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">kBell</a>;
+<a name="l00229"></a><a class="code" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">00229</a> pointer <span class="keyword">private</span>;
+<a name="l00230"></a><a class="code" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">00230</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">isCore</a>;
+<a name="l00231"></a><a class="code" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">00231</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">sendsCore</a>;
+<a name="l00232"></a><a class="code" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">00232</a> KeybdCtrl <a class="code" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">kctrl</a>;
+<a name="l00233"></a><a class="code" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">00233</a> PtrCtrl <a class="code" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">mctrl</a>;
+<a name="l00235"></a><a class="code" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">00235</a> DeviceIntPtr <a class="code" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">pDevice</a>;
+<a name="l00236"></a><a class="code" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">00236</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">inputIdx</a>;
+<a name="l00237"></a><a class="code" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">00237</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#a65e0e7a4d6928067ba63183c7ddbd03c">lastX</a>, <a class="code" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">lastY</a>;
+<a name="l00241"></a><a class="code" href="struct__DMXLocalInputInfo.html#a41f2eeca657b0ed5e3000a97a965cb44">00241</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#a41f2eeca657b0ed5e3000a97a965cb44">head</a>;
+<a name="l00243"></a><a class="code" href="struct__DMXLocalInputInfo.html#aff792bdb6105dd4b58f57107e8e10ddd">00243</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#aff792bdb6105dd4b58f57107e8e10ddd">tail</a>;
+<a name="l00245"></a><a class="code" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">00245</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *<a class="code" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">history</a>;
+<a name="l00246"></a><a class="code" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">00246</a> <span class="keywordtype">int</span> *<a class="code" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">valuators</a>;
+<a name="l00248"></a>00248 <span class="comment">/* for XInput ChangePointerDevice */</span>
+<a name="l00249"></a><a class="code" href="struct__DMXLocalInputInfo.html#a27f8606aec1028f80bd9b21c421e78fe">00249</a> int (*<a class="code" href="struct__DMXLocalInputInfo.html#a27f8606aec1028f80bd9b21c421e78fe">savedMotionProc</a>)(DeviceIntPtr,
+<a name="l00250"></a>00250 xTimecoord *,
+<a name="l00251"></a>00251 <span class="keywordtype">unsigned</span> long,
+<a name="l00252"></a>00252 <span class="keywordtype">unsigned</span> long,
+<a name="l00253"></a>00253 ScreenPtr);
+<a name="l00254"></a><a class="code" href="struct__DMXLocalInputInfo.html#af6c6062b7601a71a4dc0b97ef918f150">00254</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#af6c6062b7601a71a4dc0b97ef918f150">savedMotionEvents</a>;
+<a name="l00255"></a><a class="code" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">00255</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">savedSendsCore</a>;
+<a name="l00257"></a><a class="code" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">00257</a> <a class="code" href="struct__DMXEventMap.html">DMXEventMap</a> <a class="code" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">map</a>[<a class="code" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>];
+<a name="l00258"></a><a class="code" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">00258</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">mapOptimize</a>;
+<a name="l00262"></a><a class="code" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">00262</a> <span class="keywordtype">long</span> <a class="code" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">deviceId</a>;
+<a name="l00264"></a><a class="code" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">00264</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">deviceName</a>;
+<a name="l00266"></a>00266 } <a class="code" href="dmxinputinit_8h.html#a18d50c3ccca9422952b75ceed4e26e8e">DMXLocalInputInfoRec</a>;
+<a name="l00267"></a>00267
+<a name="l00268"></a>00268 <span class="keyword">extern</span> <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="code" href="dmxinputinit_8c.html#ab34ec11967377e32bc0817fb3a8b939e">dmxLocalCorePointer</a>, <a class="code" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxLocalCoreKeyboard</a>;
+<a name="l00269"></a>00269
+<a name="l00270"></a>00270 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8h.html#a5ed320a98bbcf4d2970316dff3ddb349">dmxLocalInitInput</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00271"></a>00271 <span class="keyword">extern</span> <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> <a class="code" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput,
+<a name="l00272"></a>00272 <a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> s);
+<a name="l00273"></a>00273
+<a name="l00274"></a>00274 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl</a>(DeviceIntPtr pDevice, PtrCtrl *ctrl);
+<a name="l00275"></a>00275 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc</a>(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
+<a name="l00276"></a>00276 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc</a>(<span class="keywordtype">int</span> percent, DeviceIntPtr pDevice,
+<a name="l00277"></a>00277 pointer ctrl, <span class="keywordtype">int</span> unknown);
+<a name="l00278"></a>00278
+<a name="l00279"></a>00279 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxInputExtensionErrorHandler</a>(Display *dsp, _Xconst <span class="keywordtype">char</span> *name,
+<a name="l00280"></a>00280 _Xconst <span class="keywordtype">char</span> *reason);
+<a name="l00281"></a>00281
+<a name="l00282"></a>00282 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00283"></a>00283 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxinputinit_8c.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00284"></a>00284 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxinputinit_8c.html#ad7a3f09eeaf98373c261119fba907c47">dmxInputDetachId</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>);
+<a name="l00285"></a>00285 <span class="keyword">extern</span> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *<a class="code" href="dmxinputinit_8c.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>);
+<a name="l00286"></a>00286 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxinputinit_8c.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> isCore,
+<a name="l00287"></a>00287 <span class="keywordtype">int</span> *<span class="keywordtype">id</span>);
+<a name="l00288"></a>00288 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxinputinit_8c.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend</a>(<span class="keywordtype">int</span> physicalScreen, <span class="keywordtype">int</span> isCore,
+<a name="l00289"></a>00289 <span class="keywordtype">int</span> *<span class="keywordtype">id</span>);
+<a name="l00290"></a>00290
+<a name="l00291"></a>00291 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxinputinit_8h.html">dmxinputinit.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxlog_8c.html b/hw/dmx/doc/html/dmxlog_8c.html
new file mode 100644
index 0000000..17cc604
--- /dev/null
+++ b/hw/dmx/doc/html/dmxlog_8c.html
@@ -0,0 +1,652 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxlog_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxlog.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &lt;X11/extensions/XI.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XIproto.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a1fb44232c682fab283ef2726255e8759">dmxSetLogLevel</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> newLevel)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a917ecdf378ddb91bb2aece6583bd449d">dmxGetLogLevel</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a50d079f944b71e881c0c58562f96c6ad">AbortServer</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">VFatalError</a> (const char *format, va_list args)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, <a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, const char *format, va_list args)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxLogInputCont</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxLogArgs</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, int argc, char **argv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, XVisualInfo *vi, int defaultVisual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxXInputEventName</a> (int type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName</a> (int type)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a> = dmxDebug</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file encapsulated all of the logging functions that are used by DMX for informational, warning, and error messages. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a50d079f944b71e881c0c58562f96c6ad"></a><!-- doxytag: member="dmxlog.c::AbortServer" ref="a50d079f944b71e881c0c58562f96c6ad" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void AbortServer </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function was removed between XFree86 4.3.0 and XFree86 4.4.0. </p>
+
+<p>Referenced by <a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">VFatalError()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad06725902753399035cb0ebde9c45e9a"></a><!-- doxytag: member="dmxlog.c::dmxEventName" ref="ad06725902753399035cb0ebde9c45e9a" args="(int type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxEventName </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Translate an event <em>type</em> into a human-readable string. </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, and <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a917ecdf378ddb91bb2aece6583bd449d"></a><!-- doxytag: member="dmxlog.c::dmxGetLogLevel" ref="a917ecdf378ddb91bb2aece6583bd449d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> dmxGetLogLevel </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the log level set by <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8944deeabab7bb4d5badd37244ec19f5"></a><!-- doxytag: member="dmxlog.c::dmxHeader" ref="a8944deeabab7bb4d5badd37244ec19f5" args="(dmxLogLevel logLevel, DMXInputInfo *dmxInput, DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxHeader </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxlog_8h.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxlog_8h.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, and <a class="el" href="dmxlog_8h.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab6259430a57c3cffdfc9f6259df0ad23"></a><!-- doxytag: member="dmxlog.c::dmxLog" ref="ab6259430a57c3cffdfc9f6259df0ad23" args="(dmxLogLevel logLevel, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLog </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log the specified message at the specified <em>logLevel</em>. <em>format</em> can be a printf-like format expression. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, <a class="el" href="dmxconfig_8h.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig()</a>, <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>, <a class="el" href="dmxconfig_8h.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile()</a>, <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput()</a>, <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput()</a>, <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxConsoleCreateEmptyCursor()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>, <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxGetButtonMapping()</a>, <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxGetFontPath()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8h.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxLogArgs()</a>, <a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>, <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>, <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc95eb36d0aadc52b34ee3e506f70f7b"></a><!-- doxytag: member="dmxlog.c::dmxLogArgs" ref="afc95eb36d0aadc52b34ee3e506f70f7b" args="(dmxLogLevel logLevel, int argc, char **argv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogArgs </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Print <em>argc</em> messages, each describing an element in <em>argv</em>. This is maingly for debugging purposes. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a661111d53827a1a15c715b7b32f05a0e"></a><!-- doxytag: member="dmxlog.c::dmxLogCont" ref="a661111d53827a1a15c715b7b32f05a0e" args="(dmxLogLevel logLevel, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogCont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Continue a log message without printing the message prefix. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8d8dc0ec631bab1d1d95815c238d574"></a><!-- doxytag: member="dmxlog.c::dmxLogInput" ref="ac8d8dc0ec631bab1d1d95815c238d574" args="(DMXInputInfo *dmxInput, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogInput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log an informational message (at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>) related to input. The message prefix will contain information from <em>dmxInput</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afee1d7a707ad9d9b0fd4facacf1b06c0"></a><!-- doxytag: member="dmxlog.c::dmxLogInputCont" ref="afee1d7a707ad9d9b0fd4facacf1b06c0" args="(DMXInputInfo *dmxInput, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogInputCont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Continue a message related to input without printing the message prefix. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aabe50ca33403c25a9e57a06d1d3a089a"></a><!-- doxytag: member="dmxlog.c::dmxLogOutput" ref="aabe50ca33403c25a9e57a06d1d3a089a" args="(DMXScreenInfo *dmxScreen, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogOutput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log an informational message (at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>) related to ouput. The message prefix will contain backend information from <em>dmxScreen</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ee9ef3403a0905596796cfcac2334d2"></a><!-- doxytag: member="dmxlog.c::dmxLogOutputCont" ref="a9ee9ef3403a0905596796cfcac2334d2" args="(DMXScreenInfo *dmxScreen, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogOutputCont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Continue a message related to output without printing the message prefix. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, and <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a079f70db20eaa2ba22b976851da820b6"></a><!-- doxytag: member="dmxlog.c::dmxLogOutputWarning" ref="a079f70db20eaa2ba22b976851da820b6" args="(DMXScreenInfo *dmxScreen, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogOutputWarning </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log a warning message (at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>) related to output. The message prefix will contain backend information from <em>dmxScreen</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, and <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6223e183bab18f6eaa27cb29bf5dcfae"></a><!-- doxytag: member="dmxlog.c::dmxLogVisual" ref="a6223e183bab18f6eaa27cb29bf5dcfae" args="(DMXScreenInfo *dmxScreen, XVisualInfo *vi, int defaultVisual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogVisual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XVisualInfo *&#160;</td>
+ <td class="paramname"><em>vi</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>defaultVisual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Print messages at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a> describing the visuals in <em>vi</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, and <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab39e0a74201e4118158bc87063dd4a2e"></a><!-- doxytag: member="dmxlog.c::dmxMessage" ref="ab39e0a74201e4118158bc87063dd4a2e" args="(dmxLogLevel logLevel, const char *format, va_list args)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxMessage </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">va_list&#160;</td>
+ <td class="paramname"><em>args</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, and <a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">VFatalError()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxlog_8h.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont()</a>, <a class="el" href="dmxlog_8h.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput()</a>, <a class="el" href="dmxlog_8h.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxLogInputCont()</a>, <a class="el" href="dmxlog_8h.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8h.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont()</a>, and <a class="el" href="dmxlog_8h.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1fb44232c682fab283ef2726255e8759"></a><!-- doxytag: member="dmxlog.c::dmxSetLogLevel" ref="a1fb44232c682fab283ef2726255e8759" args="(dmxLogLevel newLevel)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> dmxSetLogLevel </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>newLevel</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the default level for logging to <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>. Returns the previous log level. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a57b865e3469d22f9dedb3cf7dc97ed2e"></a><!-- doxytag: member="dmxlog.c::dmxXInputEventName" ref="a57b865e3469d22f9dedb3cf7dc97ed2e" args="(int type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxXInputEventName </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Translate a (normalized) XInput event <em>type</em> into a human-readable string. </p>
+
+</div>
+</div>
+<a class="anchor" id="af1c88ef4a6df132f586cf7605ca8192a"></a><!-- doxytag: member="dmxlog.c::VFatalError" ref="af1c88ef4a6df132f586cf7605ca8192a" args="(const char *format, va_list args)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void VFatalError </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">va_list&#160;</td>
+ <td class="paramname"><em>args</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxlog_8c.html#a50d079f944b71e881c0c58562f96c6ad">AbortServer()</a>, and <a class="el" href="dmxinit_8c.html#adaf9384688ad8a12254ccb5ce594c3e1">OsVendorFatalError()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="adec7b3dba0fe95f6ff8c96575cbd29b1"></a><!-- doxytag: member="dmxlog.c::dmxCurrentLogLevel" ref="adec7b3dba0fe95f6ff8c96575cbd29b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a> = dmxDebug<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxlog_8h.html#a917ecdf378ddb91bb2aece6583bd449d">dmxGetLogLevel()</a>, <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>, and <a class="el" href="dmxlog_8h.html#a1fb44232c682fab283ef2726255e8759">dmxSetLogLevel()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxlog_8c.html">dmxlog.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxlog_8h.html b/hw/dmx/doc/html/dmxlog_8h.html
new file mode 100644
index 0000000..bda5f77
--- /dev/null
+++ b/hw/dmx/doc/html/dmxlog_8h.html
@@ -0,0 +1,546 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxlog_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxlog.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxlog_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> { <br/>
+&#160;&#160;<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>,
+<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>,
+<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>,
+<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>,
+<br/>
+&#160;&#160;<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a1fb44232c682fab283ef2726255e8759">dmxSetLogLevel</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> newLevel)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a917ecdf378ddb91bb2aece6583bd449d">dmxGetLogLevel</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName</a> (int type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxLogInputCont</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxLogArgs</a> (<a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, int argc, char **argv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, XVisualInfo *vi, int defaultVisual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxlog_8h.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxXInputEventName</a> (int type)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This header is included by all files that need to use the DMX logging facilities. </p>
+</div><hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="aeed612a5c0be196e23bd6b71b76b917f"></a><!-- doxytag: member="dmxlog.h::dmxLogLevel" ref="aeed612a5c0be196e23bd6b71b76b917f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Logging levels -- output is tunable with <a class="el" href="dmxlog_8h.html#a1fb44232c682fab283ef2726255e8759">dmxSetLogLevel</a>. </p>
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe"></a><!-- doxytag: member="dmxDebug" ref="aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe" args="" -->dmxDebug</em>&nbsp;</td><td>
+<p>Usually verbose debugging info </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea"></a><!-- doxytag: member="dmxInfo" ref="aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea" args="" -->dmxInfo</em>&nbsp;</td><td>
+<p>Non-warning information </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a"></a><!-- doxytag: member="dmxWarning" ref="aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a" args="" -->dmxWarning</em>&nbsp;</td><td>
+<p>A warning that may indicate DMX will not function as the user intends. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890"></a><!-- doxytag: member="dmxError" ref="aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890" args="" -->dmxError</em>&nbsp;</td><td>
+<p>A non-fatal error that probably indicates DMX will not function as desired. </p>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70"></a><!-- doxytag: member="dmxFatal" ref="aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70" args="" -->dmxFatal</em>&nbsp;</td><td>
+<p>A fatal error that will cause DMX to shut down. </p>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ad06725902753399035cb0ebde9c45e9a"></a><!-- doxytag: member="dmxlog.h::dmxEventName" ref="ad06725902753399035cb0ebde9c45e9a" args="(int type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxEventName </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Translate an event <em>type</em> into a human-readable string. </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, and <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a917ecdf378ddb91bb2aece6583bd449d"></a><!-- doxytag: member="dmxlog.h::dmxGetLogLevel" ref="a917ecdf378ddb91bb2aece6583bd449d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> dmxGetLogLevel </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns the log level set by <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab6259430a57c3cffdfc9f6259df0ad23"></a><!-- doxytag: member="dmxlog.h::dmxLog" ref="ab6259430a57c3cffdfc9f6259df0ad23" args="(dmxLogLevel logLevel, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLog </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log the specified message at the specified <em>logLevel</em>. <em>format</em> can be a printf-like format expression. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>, <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxCommonOthOn()</a>, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, <a class="el" href="dmxconfig_8h.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig()</a>, <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>, <a class="el" href="dmxconfig_8h.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile()</a>, <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput()</a>, <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput()</a>, <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxConsoleCreateEmptyCursor()</a>, <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxConsoleDrawWindows()</a>, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxConsoleFunctions()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>, <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxErrorHandler()</a>, <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxFixup()</a>, <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxGetButtonMapping()</a>, <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxGetFontPath()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxlog_8h.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxLogArgs()</a>, <a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>, <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">InitInput()</a>, <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc95eb36d0aadc52b34ee3e506f70f7b"></a><!-- doxytag: member="dmxlog.h::dmxLogArgs" ref="afc95eb36d0aadc52b34ee3e506f70f7b" args="(dmxLogLevel logLevel, int argc, char **argv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogArgs </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Print <em>argc</em> messages, each describing an element in <em>argv</em>. This is maingly for debugging purposes. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a661111d53827a1a15c715b7b32f05a0e"></a><!-- doxytag: member="dmxlog.h::dmxLogCont" ref="a661111d53827a1a15c715b7b32f05a0e" args="(dmxLogLevel logLevel, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogCont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>logLevel</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Continue a log message without printing the message prefix. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac8d8dc0ec631bab1d1d95815c238d574"></a><!-- doxytag: member="dmxlog.h::dmxLogInput" ref="ac8d8dc0ec631bab1d1d95815c238d574" args="(DMXInputInfo *dmxInput, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogInput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log an informational message (at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>) related to input. The message prefix will contain information from <em>dmxInput</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxCommonRestoreState()</a>, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afee1d7a707ad9d9b0fd4facacf1b06c0"></a><!-- doxytag: member="dmxlog.h::dmxLogInputCont" ref="afee1d7a707ad9d9b0fd4facacf1b06c0" args="(DMXInputInfo *dmxInput, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogInputCont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Continue a message related to input without printing the message prefix. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aabe50ca33403c25a9e57a06d1d3a089a"></a><!-- doxytag: member="dmxlog.h::dmxLogOutput" ref="aabe50ca33403c25a9e57a06d1d3a089a" args="(DMXScreenInfo *dmxScreen, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogOutput </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log an informational message (at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>) related to ouput. The message prefix will contain backend information from <em>dmxScreen</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9ee9ef3403a0905596796cfcac2334d2"></a><!-- doxytag: member="dmxlog.h::dmxLogOutputCont" ref="a9ee9ef3403a0905596796cfcac2334d2" args="(DMXScreenInfo *dmxScreen, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogOutputCont </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Continue a message related to output without printing the message prefix. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, and <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, and <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a079f70db20eaa2ba22b976851da820b6"></a><!-- doxytag: member="dmxlog.h::dmxLogOutputWarning" ref="a079f70db20eaa2ba22b976851da820b6" args="(DMXScreenInfo *dmxScreen, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogOutputWarning </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Log a warning message (at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>) related to output. The message prefix will contain backend information from <em>dmxScreen</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxMessage()</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, and <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6223e183bab18f6eaa27cb29bf5dcfae"></a><!-- doxytag: member="dmxlog.h::dmxLogVisual" ref="a6223e183bab18f6eaa27cb29bf5dcfae" args="(DMXScreenInfo *dmxScreen, XVisualInfo *vi, int defaultVisual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxLogVisual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XVisualInfo *&#160;</td>
+ <td class="paramname"><em>vi</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>defaultVisual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Print messages at level <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a> describing the visuals in <em>vi</em>. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, and <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1fb44232c682fab283ef2726255e8759"></a><!-- doxytag: member="dmxlog.h::dmxSetLogLevel" ref="a1fb44232c682fab283ef2726255e8759" args="(dmxLogLevel newLevel)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> dmxSetLogLevel </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>&#160;</td>
+ <td class="paramname"><em>newLevel</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the default level for logging to <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>. Returns the previous log level. </p>
+
+<p>References <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxCurrentLogLevel</a>, and <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a57b865e3469d22f9dedb3cf7dc97ed2e"></a><!-- doxytag: member="dmxlog.h::dmxXInputEventName" ref="a57b865e3469d22f9dedb3cf7dc97ed2e" args="(int type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxXInputEventName </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Translate a (normalized) XInput event <em>type</em> into a human-readable string. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxlog_8h.html">dmxlog.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxlog_8h_source.html b/hw/dmx/doc/html/dmxlog_8h_source.html
new file mode 100644
index 0000000..249b107
--- /dev/null
+++ b/hw/dmx/doc/html/dmxlog_8h_source.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxlog_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxlog.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxlog_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _DMXLOG_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _DMXLOG_H_</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00042"></a><a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">00042</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00043"></a><a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">00043</a> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>,
+<a name="l00044"></a><a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">00044</a> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>,
+<a name="l00045"></a><a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">00045</a> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>,
+<a name="l00048"></a><a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">00048</a> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxError</a>,
+<a name="l00051"></a><a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">00051</a> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>
+<a name="l00053"></a>00053 } <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a>;
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="comment">/* Logging functions used by Xserver/hw/dmx routines. */</span>
+<a name="l00056"></a>00056 <span class="keyword">extern</span> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> <a class="code" href="dmxlog_8c.html#a1fb44232c682fab283ef2726255e8759">dmxSetLogLevel</a>(<a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> newLevel);
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> <a class="code" href="dmxlog_8c.html#a917ecdf378ddb91bb2aece6583bd449d">dmxGetLogLevel</a>(<span class="keywordtype">void</span>);
+<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog</a>(<a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont</a>(<a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
+<a name="l00060"></a>00060 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxEventName</a>(<span class="keywordtype">int</span> type);
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="preprocessor">#ifndef DMX_LOG_STANDALONE</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
+<a name="l00064"></a>00064 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxLogOutputCont</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *format,
+<a name="l00065"></a>00065 ...);
+<a name="l00066"></a>00066 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *format,
+<a name="l00067"></a>00067 ...);
+<a name="l00068"></a>00068 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxLogInput</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
+<a name="l00069"></a>00069 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxLogInputCont</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
+<a name="l00070"></a>00070 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxLogArgs</a>(<a class="code" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxLogLevel</a> logLevel, <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv);
+<a name="l00071"></a>00071 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxLogVisual</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, XVisualInfo *vi,
+<a name="l00072"></a>00072 <span class="keywordtype">int</span> defaultVisual);
+<a name="l00073"></a>00073 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="dmxlog_8c.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxXInputEventName</a>(<span class="keywordtype">int</span> type);
+<a name="l00074"></a>00074 <span class="preprocessor">#endif</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxlog_8h.html">dmxlog.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxmap_8c.html b/hw/dmx/doc/html/dmxmap_8c.html
new file mode 100644
index 0000000..21127b2
--- /dev/null
+++ b/hw/dmx/doc/html/dmxmap_8c.html
@@ -0,0 +1,163 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxmap_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxmap.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxmap_8h_source.html">dmxmap.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmap_8c.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent, int serverEvent)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmap_8c.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmap_8c.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file implements a mapping from remote XInput event types to Xdmx XInput event types.</p>
+<p>The exglobals.h file defines global server-side variables with names Device* to be integers that hold the value of the type of the server-side XInput extension event.</p>
+<p>The client-side X11/extensions/XInput.h file defines macros with THE EXACT SAME Device* names!</p>
+<p>Using those macros to extract remote server event type values from the (opaque) XDevice structure is appropriate, but makes a direct mapping to the Device* integers impossible. So we use the normalized XI_Device* names for these routines. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a27107d43f96e7c09241d7ef0b5e9c0f5"></a><!-- doxytag: member="dmxmap.c::dmxMapClear" ref="a27107d43f96e7c09241d7ef0b5e9c0f5" args="(DMXLocalInputInfoPtr dmxLocal)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMapClear </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Remove all mappings there were inserted with <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a>, and <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada5a28e0c746708e0f5c45e9e193d907"></a><!-- doxytag: member="dmxmap.c::dmxMapInsert" ref="ada5a28e0c746708e0f5c45e9e193d907" args="(DMXLocalInputInfoPtr dmxLocal, int remoteEvent, int serverEvent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMapInsert </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>remoteEvent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>serverEvent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a mapping from <em>remoteEvent</em> to <em>serverEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The <em>serverEvent</em> is from the XI_* list of events in include/extensions/XIproto.h. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>, <a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">DMX_MAP_MASK</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a>, <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a>, and <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap::server</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abc1a46c87c4acd45e4e5f79370be6169"></a><!-- doxytag: member="dmxmap.c::dmxMapLookup" ref="abc1a46c87c4acd45e4e5f79370be6169" args="(DMXLocalInputInfoPtr dmxLocal, int remoteEvent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxMapLookup </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>remoteEvent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Lookup a mapping for <em>remoteEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The return value is that which was passed into <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a> (i.e., a value from the XI_* list in include/extensions/XIproto.h). If a mapping is not available, -1 is returned. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>, <a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">DMX_MAP_MASK</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a>, <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a>, and <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap::server</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxmap_8c.html">dmxmap.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxmap_8h.html b/hw/dmx/doc/html/dmxmap_8h.html
new file mode 100644
index 0000000..7a5b3e9
--- /dev/null
+++ b/hw/dmx/doc/html/dmxmap_8h.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxmap_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxmap.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxmap_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent, int serverEvent)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup</a> (<a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, int remoteEvent)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to XInput event mapping support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxmap_8c.html">dmxmap.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a27107d43f96e7c09241d7ef0b5e9c0f5"></a><!-- doxytag: member="dmxmap.h::dmxMapClear" ref="a27107d43f96e7c09241d7ef0b5e9c0f5" args="(DMXLocalInputInfoPtr dmxLocal)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMapClear </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Remove all mappings there were inserted with <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a>. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a>, and <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ada5a28e0c746708e0f5c45e9e193d907"></a><!-- doxytag: member="dmxmap.h::dmxMapInsert" ref="ada5a28e0c746708e0f5c45e9e193d907" args="(DMXLocalInputInfoPtr dmxLocal, int remoteEvent, int serverEvent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxMapInsert </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>remoteEvent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>serverEvent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a mapping from <em>remoteEvent</em> to <em>serverEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The <em>serverEvent</em> is from the XI_* list of events in include/extensions/XIproto.h. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>, <a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">DMX_MAP_MASK</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a>, <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a>, and <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap::server</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abc1a46c87c4acd45e4e5f79370be6169"></a><!-- doxytag: member="dmxmap.h::dmxMapLookup" ref="abc1a46c87c4acd45e4e5f79370be6169" args="(DMXLocalInputInfoPtr dmxLocal, int remoteEvent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxMapLookup </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>dmxLocal</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>remoteEvent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Lookup a mapping for <em>remoteEvent</em>. The <em>remoteEvent</em> is the type returned from the remote server. The return value is that which was passed into <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a> (i.e., a value from the XI_* list in include/extensions/XIproto.h). If a mapping is not available, -1 is returned. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">DMX_MAP_ENTRIES</a>, <a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">DMX_MAP_MASK</a>, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>, <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a>, <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a>, and <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap::server</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxmap_8h.html">dmxmap.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxmap_8h_source.html b/hw/dmx/doc/html/dmxmap_8h_source.html
new file mode 100644
index 0000000..f76e0cf
--- /dev/null
+++ b/hw/dmx/doc/html/dmxmap_8h_source.html
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxmap_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxmap.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxmap_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2003 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> */</span>
+<a name="l00032"></a>00032
+<a name="l00036"></a>00036 <span class="preprocessor">#ifndef _DMXMAP_H_</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define _DMXMAP_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxmap_8c.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert</a>(<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal,
+<a name="l00039"></a>00039 <span class="keywordtype">int</span> remoteEvent, <span class="keywordtype">int</span> serverEvent);
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxmap_8c.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear</a>(<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxmap_8c.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup</a>(<a class="code" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> dmxLocal, <span class="keywordtype">int</span> remoteEvent);
+<a name="l00042"></a>00042 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxmap_8h.html">dmxmap.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxmotion_8c.html b/hw/dmx/doc/html/dmxmotion_8c.html
new file mode 100644
index 0000000..5c4f481
--- /dev/null
+++ b/hw/dmx/doc/html/dmxmotion_8c.html
@@ -0,0 +1,228 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxmotion_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxmotion.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcommon_8h_source.html">dmxcommon.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxmotion_8h_source.html">dmxmotion.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">OFFSET</a>(offset, element)&#160;&#160;&#160;((offset) * (numAxes + 1) + (element))</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8c.html#a71e31cfbffb3603068d897374e173400">dmxPointerGetMotionBufferSize</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8c.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxPointerGetMotionEvents</a> (DeviceIntPtr pDevice, xTimecoord *coords, unsigned long start, unsigned long stop, ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8c.html#abe71ba14a07f4077ca2658f81426f4c6">dmxPointerPutMotionEvent</a> (DeviceIntPtr pDevice, int firstAxis, int axesCount, int *v, unsigned long time)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides functions similar to miPointerGetMotionEvents and miPointerPutMotionEvents, with the exception that devices with more than two axes are fully supported. These routines may be used only for motion buffers for extension devices, and are <em>not</em> compatible replacements for the mi routines. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ab1f1378062fc8a2c5b4132193e143c95"></a><!-- doxytag: member="dmxmotion.c::OFFSET" ref="ab1f1378062fc8a2c5b4132193e143c95" args="(offset, element)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define OFFSET</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">offset, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">element&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;((offset) * (numAxes + 1) + (element))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxmotion_8h.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxPointerGetMotionEvents()</a>, and <a class="el" href="dmxmotion_8h.html#abe71ba14a07f4077ca2658f81426f4c6">dmxPointerPutMotionEvent()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a71e31cfbffb3603068d897374e173400"></a><!-- doxytag: member="dmxmotion.c::dmxPointerGetMotionBufferSize" ref="a71e31cfbffb3603068d897374e173400" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPointerGetMotionBufferSize </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return size of motion buffer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a> </dd></dl>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ebfa18908cd0473f3f23643e9ca2a58"></a><!-- doxytag: member="dmxmotion.c::dmxPointerGetMotionEvents" ref="a6ebfa18908cd0473f3f23643e9ca2a58" args="(DeviceIntPtr pDevice, xTimecoord *coords, unsigned long start, unsigned long stop, ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPointerGetMotionEvents </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xTimecoord *&#160;</td>
+ <td class="paramname"><em>coords</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>stop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine performs the same function as <em>miPointerGetMotionEvents:</em> the events in the motion history that are between the start and stop times (in mS) are placed in the coords vector, and the count of the number of items so placed is returned. This routine is called from dix/devices.c so that coords can hold valuator-&gt;numMotionEvents events. This routine is called from <em>Xi/gtmotion.c</em> with coords large enough to hold the same number of events in a variable-length extended <em>xTimecoord</em> structure. This provides sufficient data for the <em>XGetDeviceMotionEvents</em> library call, and would be identical to <em>miPointerGetMotionEvents</em> for devices with only 2 axes (i.e., core pointers) if <em>xTimecoord</em> used 32bit integers.</p>
+<p>Because DMX uses the mi* routines for all core devices, this routine only has to support extension devices using the polymorphic coords. Because compatibility with miPointerGetMotionEvents is not possible, it is not provided. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, and <a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">OFFSET</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe71ba14a07f4077ca2658f81426f4c6"></a><!-- doxytag: member="dmxmotion.c::dmxPointerPutMotionEvent" ref="abe71ba14a07f4077ca2658f81426f4c6" args="(DeviceIntPtr pDevice, int firstAxis, int axesCount, int *v, unsigned long time)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPointerPutMotionEvent </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>firstAxis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axesCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>time</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine adds an event to the motion history. A similar function is performed by miPointerMove for the mi versions of these routines. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, and <a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">OFFSET</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxmotion_8c.html">dmxmotion.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxmotion_8h.html b/hw/dmx/doc/html/dmxmotion_8h.html
new file mode 100644
index 0000000..9281f6f
--- /dev/null
+++ b/hw/dmx/doc/html/dmxmotion_8h.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxmotion_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxmotion.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxmotion_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8h.html#a71e31cfbffb3603068d897374e173400">dmxPointerGetMotionBufferSize</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8h.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxPointerGetMotionEvents</a> (DeviceIntPtr pDevice, xTimecoord *coords, unsigned long start, unsigned long stop, ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxmotion_8h.html#abe71ba14a07f4077ca2658f81426f4c6">dmxPointerPutMotionEvent</a> (DeviceIntPtr pDevice, int firstAxis, int axesCount, int *v, unsigned long time)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to functions supporting motion events. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxmotion_8c.html">dmxmotion.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a71e31cfbffb3603068d897374e173400"></a><!-- doxytag: member="dmxmotion.h::dmxPointerGetMotionBufferSize" ref="a71e31cfbffb3603068d897374e173400" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPointerGetMotionBufferSize </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return size of motion buffer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a> </dd></dl>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ebfa18908cd0473f3f23643e9ca2a58"></a><!-- doxytag: member="dmxmotion.h::dmxPointerGetMotionEvents" ref="a6ebfa18908cd0473f3f23643e9ca2a58" args="(DeviceIntPtr pDevice, xTimecoord *coords, unsigned long start, unsigned long stop, ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPointerGetMotionEvents </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xTimecoord *&#160;</td>
+ <td class="paramname"><em>coords</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>stop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine performs the same function as <em>miPointerGetMotionEvents:</em> the events in the motion history that are between the start and stop times (in mS) are placed in the coords vector, and the count of the number of items so placed is returned. This routine is called from dix/devices.c so that coords can hold valuator-&gt;numMotionEvents events. This routine is called from <em>Xi/gtmotion.c</em> with coords large enough to hold the same number of events in a variable-length extended <em>xTimecoord</em> structure. This provides sufficient data for the <em>XGetDeviceMotionEvents</em> library call, and would be identical to <em>miPointerGetMotionEvents</em> for devices with only 2 axes (i.e., core pointers) if <em>xTimecoord</em> used 32bit integers.</p>
+<p>Because DMX uses the mi* routines for all core devices, this routine only has to support extension devices using the polymorphic coords. Because compatibility with miPointerGetMotionEvents is not possible, it is not provided. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, and <a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">OFFSET</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe71ba14a07f4077ca2658f81426f4c6"></a><!-- doxytag: member="dmxmotion.h::dmxPointerPutMotionEvent" ref="abe71ba14a07f4077ca2658f81426f4c6" args="(DeviceIntPtr pDevice, int firstAxis, int axesCount, int *v, unsigned long time)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPointerPutMotionEvent </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>firstAxis</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>axesCount</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>v</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>time</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This routine adds an event to the motion history. A similar function is performed by miPointerMove for the mi versions of these routines. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">DMX_MOTION_SIZE</a>, <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">GETDMXLOCALFROMPDEVICE</a>, and <a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">OFFSET</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxmotion_8h.html">dmxmotion.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxmotion_8h_source.html b/hw/dmx/doc/html/dmxmotion_8h_source.html
new file mode 100644
index 0000000..92fe716
--- /dev/null
+++ b/hw/dmx/doc/html/dmxmotion_8h_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxmotion_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxmotion.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxmotion_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXMOTION_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXMOTION_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxmotion_8c.html#a71e31cfbffb3603068d897374e173400">dmxPointerGetMotionBufferSize</a>(<span class="keywordtype">void</span>);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxmotion_8c.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxPointerGetMotionEvents</a>(DeviceIntPtr pDevice,
+<a name="l00042"></a>00042 xTimecoord *coords,
+<a name="l00043"></a>00043 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> start,
+<a name="l00044"></a>00044 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> stop,
+<a name="l00045"></a>00045 ScreenPtr pScreen);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxmotion_8c.html#abe71ba14a07f4077ca2658f81426f4c6">dmxPointerPutMotionEvent</a>(DeviceIntPtr pDevice,
+<a name="l00047"></a>00047 <span class="keywordtype">int</span> firstAxis, <span class="keywordtype">int</span> axesCount, <span class="keywordtype">int</span> *v,
+<a name="l00048"></a>00048 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> time);
+<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxmotion_8h.html">dmxmotion.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxparse_8c.html b/hw/dmx/doc/html/dmxparse_8c.html
new file mode 100644
index 0000000..6bbfd19
--- /dev/null
+++ b/hw/dmx/doc/html/dmxparse_8c.html
@@ -0,0 +1,1394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxparse_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxparse.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br/>
+<code>#include &lt;stdlib.h&gt;</code><br/>
+<code>#include &lt;string.h&gt;</code><br/>
+<code>#include &lt;stdarg.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog</a> (const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc</a> (unsigned long bytes)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#af8e13444fded1f7707ab7dfc40655fd3">dmxConfigRealloc</a> (void *orig, unsigned long orig_bytes, unsigned long bytes)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString</a> (const char *string, int length)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree</a> (void *area)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken</a> (int token, int line, const char *comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString</a> (int token, int line, const char *comment, const char *string)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString</a> (<a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber</a> (int token, int line, const char *comment, int number)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a2b8a343fe122733af82e802a01a5f30b">dmxConfigFreeNumber</a> (<a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair</a> (int token, int line, const char *comment, int x, int y, int xsign, int ysign)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair</a> (<a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment</a> (int token, int line, const char *comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim</a> (<a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pDim, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pOffset)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim</a> (<a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim</a> (<a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> pScrn, <a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> pRoot)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim</a> (<a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pName, <a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> pDim, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pOrigin, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay</a> (<a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pWallDim, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pDisplayDim, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pNameList, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall</a> (<a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pOption, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption</a> (<a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> p, const char *key, int *argc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pOpen, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pParam, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pClose, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub</a> (<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> type, <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment, <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> wall, <a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> option, <a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> param)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub</a> (<a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> sub)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a825d125808e8992c740315d3b78e493d">dmxConfigSubComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay</a> (<a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#aac05245a327cc10096f1a049e675caef">dmxConfigSubWall</a> (<a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> wall)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a23a35d27aa7bf22d815d2a9cff809307">dmxConfigSubOption</a> (<a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> option)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a16047d4ba67462084a85156432c7cf05">dmxConfigSubParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> param)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub</a> (<a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> head, <a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> sub)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pName, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pDim, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pOpen, <a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> pSubentry, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pClose)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual</a> (<a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry</a> (<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> type, <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry</a> (<a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry</a> (<a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> head, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> type, <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#acee635a4deedd0f4b488d951346f4622">dmxConfigEntryComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8c.html#a643b2c9c57d3009965318d20aad1ca0d">dmxConfigEntryVirtual</a> (<a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support routines and helper functions to be used by the DMX configuration file parser.</p>
+<p>Because the DMX configuration file parsing should be capable of being used in a stand-alone fashion (i.e., independent from the DMX server source tree), no dependencies on other DMX routines are made. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="acec532235fc1d75b24779b3ed50aa037"></a><!-- doxytag: member="dmxparse.c::dmxConfigAddEntry" ref="acec532235fc1d75b24779b3ed50aa037" args="(DMXConfigEntryPtr head, DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigAddEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>head</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, and <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a75e3403d28e2cb5b3b6da5461ef1bbca"></a><!-- doxytag: member="dmxparse.c::dmxConfigAddSub" ref="a75e3403d28e2cb5b3b6da5461ef1bbca" args="(DMXConfigSubPtr head, DMXConfigSubPtr sub)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigAddSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>head</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>sub</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1794b2e8571596d46f01ff8cf692410f"></a><!-- doxytag: member="dmxparse.c::dmxConfigAlloc" ref="a1794b2e8571596d46f01ff8cf692410f" args="(unsigned long bytes)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* dmxConfigAlloc </td>
+ <td>(</td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>bytes</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString()</a>, <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim()</a>, <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber()</a>, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim()</a>, <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, and <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d1c3d922b777254300e346b0111943c"></a><!-- doxytag: member="dmxparse.c::dmxConfigCopyString" ref="a0d1c3d922b777254300e346b0111943c" args="(const char *string, int length)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxConfigCopyString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>length</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0619f5f0850b65fefe4df5112aaac05"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateComment" ref="ae0619f5f0850b65fefe4df5112aaac05" args="(int token, int line, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> dmxConfigCreateComment </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">_DMXConfigComment::line</a>, and <a class="el" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">_DMXConfigComment::token</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab3f5b4d4a5b535faf87b3bf7cb30d2d0"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateDisplay" ref="ab3f5b4d4a5b535faf87b3bf7cb30d2d0" args="(DMXConfigTokenPtr pStart, DMXConfigStringPtr pName, DMXConfigFullDimPtr pDim, DMXConfigPairPtr pOrigin, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> dmxConfigCreateDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td>
+ <td class="paramname"><em>pDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pOrigin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay::dim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay::dname</a>, <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay::end</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>, <a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">_DMXConfigDisplay::origin</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay::rootHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay::rootWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay::rootX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay::rootXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay::rootY</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay::rootYSign</a>, <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay::start</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a402a182c5c9922807ffc7998b4228b24"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateEntry" ref="a402a182c5c9922807ffc7998b4228b24" args="(DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigCreateEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry()</a>, <a class="el" href="dmxparse_8h.html#acee635a4deedd0f4b488d951346f4622">dmxConfigEntryComment()</a>, and <a class="el" href="dmxparse_8h.html#a643b2c9c57d3009965318d20aad1ca0d">dmxConfigEntryVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac75eb1b376fb8a510d123ca119ef215e"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateFullDim" ref="ac75eb1b376fb8a510d123ca119ef215e" args="(DMXConfigPartDimPtr pScrn, DMXConfigPartDimPtr pRoot)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> dmxConfigCreateFullDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td>
+ <td class="paramname"><em>pScrn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td>
+ <td class="paramname"><em>pRoot</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, and <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a40cfc16a7a8a6f4b21bfb81d03490458"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateNumber" ref="a40cfc16a7a8a6f4b21bfb81d03490458" args="(int token, int line, const char *comment, int number)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a> dmxConfigCreateNumber </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>number</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">_DMXConfigNumber::line</a>, <a class="el" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">_DMXConfigNumber::number</a>, and <a class="el" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">_DMXConfigNumber::token</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad183386657a3549f60760a156fad4fb8"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateOption" ref="ad183386657a3549f60760a156fad4fb8" args="(DMXConfigTokenPtr pStart, DMXConfigStringPtr pOption, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> dmxConfigCreateOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption::end</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption::option</a>, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption::start</a>, <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a488a03d25bc380f1bdf786693c644957"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreatePair" ref="a488a03d25bc380f1bdf786693c644957" args="(int token, int line, const char *comment, int x, int y, int xsign, int ysign)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> dmxConfigCreatePair </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>xsign</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ysign</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">_DMXConfigPair::line</a>, <a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">_DMXConfigPair::token</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0a4ebd4b3769682daf7a6fed9f11744d"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateParam" ref="a0a4ebd4b3769682daf7a6fed9f11744d" args="(DMXConfigTokenPtr pStart, DMXConfigTokenPtr pOpen, DMXConfigStringPtr pParam, DMXConfigTokenPtr pClose, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> dmxConfigCreateParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pOpen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pParam</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pClose</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam::argc</a>, <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a>, <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam::close</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam::end</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam::open</a>, <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam::param</a>, <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam::start</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1740a9f650d43464836c9b0ec44f9659"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreatePartDim" ref="a1740a9f650d43464836c9b0ec44f9659" args="(DMXConfigPairPtr pDim, DMXConfigPairPtr pOffset)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> dmxConfigCreatePartDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pOffset</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, and <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae285ab0da6d63770365886d413f58432"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateString" ref="ae285ab0da6d63770365886d413f58432" args="(int token, int line, const char *comment, const char *string)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> dmxConfigCreateString </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">_DMXConfigString::line</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, and <a class="el" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">_DMXConfigString::token</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7e24c7be4cc3880e15274a53b627267"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateSub" ref="aa7e24c7be4cc3880e15274a53b627267" args="(DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigDisplayPtr display, DMXConfigWallPtr wall, DMXConfigOptionPtr option, DMXConfigParamPtr param)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigCreateSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>display</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>wall</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>option</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>param</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub::comment</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>, <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a>, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, and <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a825d125808e8992c740315d3b78e493d">dmxConfigSubComment()</a>, <a class="el" href="dmxparse_8h.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay()</a>, <a class="el" href="dmxparse_8h.html#a23a35d27aa7bf22d815d2a9cff809307">dmxConfigSubOption()</a>, <a class="el" href="dmxparse_8h.html#a16047d4ba67462084a85156432c7cf05">dmxConfigSubParam()</a>, and <a class="el" href="dmxparse_8h.html#aac05245a327cc10096f1a049e675caef">dmxConfigSubWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf6df2ea6db8e6f959c72fc28c46f1b2"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateToken" ref="aaf6df2ea6db8e6f959c72fc28c46f1b2" args="(int token, int line, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> dmxConfigCreateToken </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">_DMXConfigToken::line</a>, and <a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">_DMXConfigToken::token</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a427549ab2ffa269ca34bdb1a60e87bb0"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateVirtual" ref="a427549ab2ffa269ca34bdb1a60e87bb0" args="(DMXConfigTokenPtr pStart, DMXConfigStringPtr pName, DMXConfigPairPtr pDim, DMXConfigTokenPtr pOpen, DMXConfigSubPtr pSubentry, DMXConfigTokenPtr pClose)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> dmxConfigCreateVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pOpen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>pSubentry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pClose</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">_DMXConfigVirtual::close</a>, <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual::dim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, <a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">_DMXConfigVirtual::open</a>, <a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">_DMXConfigVirtual::start</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, <a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">_DMXConfigVirtual::vname</a>, <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, and <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6078c6ad23fc49e4992cade35f7351b2"></a><!-- doxytag: member="dmxparse.c::dmxConfigCreateWall" ref="a6078c6ad23fc49e4992cade35f7351b2" args="(DMXConfigTokenPtr pStart, DMXConfigPairPtr pWallDim, DMXConfigPairPtr pDisplayDim, DMXConfigStringPtr pNameList, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> dmxConfigCreateWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pWallDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pDisplayDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pNameList</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall::displayDim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall::end</a>, <a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">_DMXConfigWall::height</a>, <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a>, <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall::start</a>, <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall::wallDim</a>, <a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">_DMXConfigWall::width</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">_DMXConfigWall::xwall</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">_DMXConfigWall::ywall</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acee635a4deedd0f4b488d951346f4622"></a><!-- doxytag: member="dmxparse.c::dmxConfigEntryComment" ref="acee635a4deedd0f4b488d951346f4622" args="(DMXConfigCommentPtr comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigEntryComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, and <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a643b2c9c57d3009965318d20aad1ca0d"></a><!-- doxytag: member="dmxparse.c::dmxConfigEntryVirtual" ref="a643b2c9c57d3009965318d20aad1ca0d" args="(DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigEntryVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a890429fea43e1039967b94fadc1f4e29"></a><!-- doxytag: member="dmxparse.c::dmxConfigFree" ref="a890429fea43e1039967b94fadc1f4e29" args="(void *area)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFree </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>area</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>, <a class="el" href="dmxparse_8h.html#a2b8a343fe122733af82e802a01a5f30b">dmxConfigFreeNumber()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8h.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="dmxparse_8h.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c9b5f8f879ee6872295618c6e1dd232"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeComment" ref="a1c9b5f8f879ee6872295618c6e1dd232" args="(DMXConfigCommentPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, and <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a34126fa5dccdee442dce2b2413c43c53"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeDisplay" ref="a34126fa5dccdee442dce2b2413c43c53" args="(DMXConfigDisplayPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay::dim</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay::dname</a>, <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay::end</a>, and <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay::start</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, and <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab18dcd503e9fbe9d81caa16bf07026ea"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeEntry" ref="ab18dcd503e9fbe9d81caa16bf07026ea" args="(DMXConfigEntryPtr entry)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>entry</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, <a class="el" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad09f9037b194ad32029047499003a60a"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeFullDim" ref="ad09f9037b194ad32029047499003a60a" args="(DMXConfigFullDimPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeFullDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, and <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2b8a343fe122733af82e802a01a5f30b"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeNumber" ref="a2b8a343fe122733af82e802a01a5f30b" args="(DMXConfigNumberPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeNumber </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a87d839927d1775c43e099e87f6e2ca8d"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeOption" ref="a87d839927d1775c43e099e87f6e2ca8d" args="(DMXConfigOptionPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption::end</a>, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption::option</a>, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption::start</a>, and <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a382b3c46caeb7e134e381d732f8d185e"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreePair" ref="a382b3c46caeb7e134e381d732f8d185e" args="(DMXConfigPairPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreePair </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, and <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af978e4f2f42e4d7e01d3d45a4c1b9a4d"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeParam" ref="af978e4f2f42e4d7e01d3d45a4c1b9a4d" args="(DMXConfigParamPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a>, <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam::close</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam::end</a>, <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam::next</a>, <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam::open</a>, <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam::param</a>, and <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam::start</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8cb0f116f7c3c5ac3939cd69df06c0fe"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreePartDim" ref="a8cb0f116f7c3c5ac3939cd69df06c0fe" args="(DMXConfigPartDimPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreePartDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, and <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a679f8776dd1a503057891de6483adc49"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeString" ref="a679f8776dd1a503057891de6483adc49" args="(DMXConfigStringPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString::comment</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, and <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a07ef1f7f192d2c0d29332fc5c71e89b8"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeSub" ref="a07ef1f7f192d2c0d29332fc5c71e89b8" args="(DMXConfigSubPtr sub)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>sub</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub::comment</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, <a class="el" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8c.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8c.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8c.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a>, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, and <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a08b933b0269ebf4b22a6b43abbda19e2"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeToken" ref="a08b933b0269ebf4b22a6b43abbda19e2" args="(DMXConfigTokenPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeToken </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, and <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6e48a41d83e97afcbd542a210ea30258"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeVirtual" ref="a6e48a41d83e97afcbd542a210ea30258" args="(DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, and <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, and <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac254e191bb664ec87d44f70f52ce897"></a><!-- doxytag: member="dmxparse.c::dmxConfigFreeWall" ref="aac254e191bb664ec87d44f70f52ce897" args="(DMXConfigWallPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall::displayDim</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall::end</a>, <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a>, <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall::start</a>, and <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall::wallDim</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2c4e1260c486d4898c5bb21ff221c89d"></a><!-- doxytag: member="dmxparse.c::dmxConfigLog" ref="a2c4e1260c486d4898c5bb21ff221c89d" args="(const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigLog </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>A general error logging routine that does not depend on the dmxLog functions. </p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>, <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>, <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>, and <a class="el" href="dmxparse_8h.html#af8e13444fded1f7707ab7dfc40655fd3">dmxConfigRealloc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a782be9a8b3118f8a52825041b5c2e8e8"></a><!-- doxytag: member="dmxparse.c::dmxConfigLookupParam" ref="a782be9a8b3118f8a52825041b5c2e8e8" args="(DMXConfigParamPtr p, const char *key, int *argc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char** dmxConfigLookupParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>argc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam::argc</a>, <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a>, and <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af8e13444fded1f7707ab7dfc40655fd3"></a><!-- doxytag: member="dmxparse.c::dmxConfigRealloc" ref="af8e13444fded1f7707ab7dfc40655fd3" args="(void *orig, unsigned long orig_bytes, unsigned long bytes)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* dmxConfigRealloc </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>orig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>orig_bytes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>bytes</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a825d125808e8992c740315d3b78e493d"></a><!-- doxytag: member="dmxparse.c::dmxConfigSubComment" ref="a825d125808e8992c740315d3b78e493d" args="(DMXConfigCommentPtr comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, and <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f26909fb7f97007567e5514839c3a53"></a><!-- doxytag: member="dmxparse.c::dmxConfigSubDisplay" ref="a4f26909fb7f97007567e5514839c3a53" args="(DMXConfigDisplayPtr display)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>display</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a23a35d27aa7bf22d815d2a9cff809307"></a><!-- doxytag: member="dmxparse.c::dmxConfigSubOption" ref="a23a35d27aa7bf22d815d2a9cff809307" args="(DMXConfigOptionPtr option)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>option</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16047d4ba67462084a85156432c7cf05"></a><!-- doxytag: member="dmxparse.c::dmxConfigSubParam" ref="a16047d4ba67462084a85156432c7cf05" args="(DMXConfigParamPtr param)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>param</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac05245a327cc10096f1a049e675caef"></a><!-- doxytag: member="dmxparse.c::dmxConfigSubWall" ref="aac05245a327cc10096f1a049e675caef" args="(DMXConfigWallPtr wall)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>wall</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxparse_8c.html">dmxparse.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxparse_8h.html b/hw/dmx/doc/html/dmxparse_8h.html
new file mode 100644
index 0000000..5fd20b4
--- /dev/null
+++ b/hw/dmx/doc/html/dmxparse_8h.html
@@ -0,0 +1,1934 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxparse_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxparse.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br/>
+</div>
+<p><a href="dmxparse_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aa553d8e6837818d31707e48941f2c755">DMXConfigToken</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aa54f2be8a82814626992b0e2c2fd76ab">DMXConfigTokenPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a997735bb2e5362d670bd0eaf006e1336">DMXConfigString</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a163965084bb791376852afc3c8e2a3cd">DMXConfigStringPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a09ee4bfd4fb105b8d12a3debde0bedd9">DMXConfigNumber</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a0595f026bf3e261dda1479c3c3664ed7">DMXConfigNumberPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a67fb30fb9b3f930220aeea0e7258e5d1">DMXConfigPair</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a311865c935a9669ca901705d5b28db02">DMXConfigPairPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ac53f3a487c56877ce84e621b93c75e63">DMXConfigComment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a3eaf8193499e4474fa2f2c8363ff9558">DMXConfigCommentPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a0040a762f091a14803e78efa90c2b3aa">DMXConfigPartDim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a62dde6c86a1db2e243c3d5804770ac98">DMXConfigPartDimPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a8ad44f7990920ef85b4bdb51c98be380">DMXConfigFullDim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#af1018551e3cc9ec6836d0d605216e611">DMXConfigFullDimPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a31b5941021484d5b5ae6c905dca6f35a">DMXConfigDisplay</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a77569967e2f40e3e3f05d8e49a4e81f7">DMXConfigDisplayPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a09a530a073d8e23f78a3fdd3cdaa16c6">DMXConfigWall</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a176e5216b55fbc5ed7adb856501826a0">DMXConfigWallPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a9d47b44af4d217c2e6da2d4678611376">DMXConfigOption</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a8671db1fd961dbb11df3f83d1fab8227">DMXConfigOptionPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a5f7052d0d09e5bd5415f5fb9924c799e">DMXConfigParam</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a5af8bd2f2624df3b2fa6e36560f2b0a3">DMXConfigParamPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a2eeff7f31b82f02916abfddeac619406">DMXConfigSub</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aaeef2cb474e931950e496db8005654ff">DMXConfigSubPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ac88a2d841fca93f81e6412228570134d">DMXConfigVirtual</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a7df6222bb31e29b3b6d98cc9d765c70f">DMXConfigVirtualPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a8cb4fa1fa814f09a1cad1712894a8207">DMXConfigEntry</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ab46cf3c98a49f9dbf90120e8afd65e81">DMXConfigEntryPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> { <br/>
+&#160;&#160;<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>,
+<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>,
+<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>,
+<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>,
+<br/>
+&#160;&#160;<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>,
+<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a9a7bd1b3d14701eb97c03f3ef34deff1">yylex</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a87640c870f7c3d90c830a68620e48de4">yyerror</a> (const char *message)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog</a> (const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc</a> (unsigned long bytes)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#af8e13444fded1f7707ab7dfc40655fd3">dmxConfigRealloc</a> (void *orig, unsigned long orig_bytes, unsigned long bytes)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString</a> (const char *string, int length)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree</a> (void *area)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken</a> (int token, int line, const char *comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString</a> (int token, int line, const char *comment, const char *string)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString</a> (<a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber</a> (int token, int line, const char *comment, int number)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a2b8a343fe122733af82e802a01a5f30b">dmxConfigFreeNumber</a> (<a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair</a> (int token, int line, const char *comment, int x, int y, int xsign, int ysign)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair</a> (<a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment</a> (int token, int line, const char *comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim</a> (<a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pDim, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pOffset)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim</a> (<a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim</a> (<a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> pScrn, <a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> pRoot)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim</a> (<a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pName, <a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> pDim, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pOrigin, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay</a> (<a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pWallDim, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pDisplayDim, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pNameList, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall</a> (<a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pOption, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption</a> (<a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pOpen, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pParam, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pClose, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pEnd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> p, const char *key, int *argc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub</a> (<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> type, <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment, <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> wall, <a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> option, <a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> param)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub</a> (<a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> sub)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a825d125808e8992c740315d3b78e493d">dmxConfigSubComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay</a> (<a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#aac05245a327cc10096f1a049e675caef">dmxConfigSubWall</a> (<a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> wall)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a23a35d27aa7bf22d815d2a9cff809307">dmxConfigSubOption</a> (<a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> option)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a16047d4ba67462084a85156432c7cf05">dmxConfigSubParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> param)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub</a> (<a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> head, <a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> sub)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pStart, <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> pName, <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> pDim, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pOpen, <a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> pSubentry, <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> pClose)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual</a> (<a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry</a> (<a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> type, <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry</a> (<a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry</a> (<a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> head, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> type, <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#acee635a4deedd0f4b488d951346f4622">dmxConfigEntryComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> comment)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#a643b2c9c57d3009965318d20aad1ca0d">dmxConfigEntryVirtual</a> (<a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> virtual)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">yydebug</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to DMX configuration file parser. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxparse_8c.html">dmxparse.c</a> </dd></dl>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="ac53f3a487c56877ce84e621b93c75e63"></a><!-- doxytag: member="dmxparse.h::DMXConfigComment" ref="ac53f3a487c56877ce84e621b93c75e63" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a> <a class="el" href="struct__DMXConfigComment.html">DMXConfigComment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed comments not stored with a token. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3eaf8193499e4474fa2f2c8363ff9558"></a><!-- doxytag: member="dmxparse.h::DMXConfigCommentPtr" ref="a3eaf8193499e4474fa2f2c8363ff9558" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a> * <a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a31b5941021484d5b5ae6c905dca6f35a"></a><!-- doxytag: member="dmxparse.h::DMXConfigDisplay" ref="a31b5941021484d5b5ae6c905dca6f35a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplay</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed display information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a77569967e2f40e3e3f05d8e49a4e81f7"></a><!-- doxytag: member="dmxparse.h::DMXConfigDisplayPtr" ref="a77569967e2f40e3e3f05d8e49a4e81f7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> * <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8cb4fa1fa814f09a1cad1712894a8207"></a><!-- doxytag: member="dmxparse.h::DMXConfigEntry" ref="a8cb4fa1fa814f09a1cad1712894a8207" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntry</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Heads entry storage. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab46cf3c98a49f9dbf90120e8afd65e81"></a><!-- doxytag: member="dmxparse.h::DMXConfigEntryPtr" ref="ab46cf3c98a49f9dbf90120e8afd65e81" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> * <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8ad44f7990920ef85b4bdb51c98be380"></a><!-- doxytag: member="dmxparse.h::DMXConfigFullDim" ref="a8ad44f7990920ef85b4bdb51c98be380" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> <a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores a pair of geometry specifications. </p>
+
+</div>
+</div>
+<a class="anchor" id="af1018551e3cc9ec6836d0d605216e611"></a><!-- doxytag: member="dmxparse.h::DMXConfigFullDimPtr" ref="af1018551e3cc9ec6836d0d605216e611" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> * <a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a09ee4bfd4fb105b8d12a3debde0bedd9"></a><!-- doxytag: member="dmxparse.h::DMXConfigNumber" ref="a09ee4bfd4fb105b8d12a3debde0bedd9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> <a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumber</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed numbers. </p>
+
+</div>
+</div>
+<a class="anchor" id="a0595f026bf3e261dda1479c3c3664ed7"></a><!-- doxytag: member="dmxparse.h::DMXConfigNumberPtr" ref="a0595f026bf3e261dda1479c3c3664ed7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> * <a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9d47b44af4d217c2e6da2d4678611376"></a><!-- doxytag: member="dmxparse.h::DMXConfigOption" ref="a9d47b44af4d217c2e6da2d4678611376" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a> <a class="el" href="struct__DMXConfigOption.html">DMXConfigOption</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed option information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a8671db1fd961dbb11df3f83d1fab8227"></a><!-- doxytag: member="dmxparse.h::DMXConfigOptionPtr" ref="a8671db1fd961dbb11df3f83d1fab8227" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a> * <a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a67fb30fb9b3f930220aeea0e7258e5d1"></a><!-- doxytag: member="dmxparse.h::DMXConfigPair" ref="a67fb30fb9b3f930220aeea0e7258e5d1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a> <a class="el" href="struct__DMXConfigPair.html">DMXConfigPair</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed pairs (e.g., x y) </p>
+
+</div>
+</div>
+<a class="anchor" id="a311865c935a9669ca901705d5b28db02"></a><!-- doxytag: member="dmxparse.h::DMXConfigPairPtr" ref="a311865c935a9669ca901705d5b28db02" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a> * <a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5f7052d0d09e5bd5415f5fb9924c799e"></a><!-- doxytag: member="dmxparse.h::DMXConfigParam" ref="a5f7052d0d09e5bd5415f5fb9924c799e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> <a class="el" href="struct__DMXConfigParam.html">DMXConfigParam</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed param information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a5af8bd2f2624df3b2fa6e36560f2b0a3"></a><!-- doxytag: member="dmxparse.h::DMXConfigParamPtr" ref="a5af8bd2f2624df3b2fa6e36560f2b0a3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> * <a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0040a762f091a14803e78efa90c2b3aa"></a><!-- doxytag: member="dmxparse.h::DMXConfigPartDim" ref="a0040a762f091a14803e78efa90c2b3aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> <a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores a geometry specification. </p>
+
+</div>
+</div>
+<a class="anchor" id="a62dde6c86a1db2e243c3d5804770ac98"></a><!-- doxytag: member="dmxparse.h::DMXConfigPartDimPtr" ref="a62dde6c86a1db2e243c3d5804770ac98" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> * <a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a997735bb2e5362d670bd0eaf006e1336"></a><!-- doxytag: member="dmxparse.h::DMXConfigString" ref="a997735bb2e5362d670bd0eaf006e1336" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> <a class="el" href="struct__DMXConfigString.html">DMXConfigString</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed strings. </p>
+
+</div>
+</div>
+<a class="anchor" id="a163965084bb791376852afc3c8e2a3cd"></a><!-- doxytag: member="dmxparse.h::DMXConfigStringPtr" ref="a163965084bb791376852afc3c8e2a3cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> * <a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2eeff7f31b82f02916abfddeac619406"></a><!-- doxytag: member="dmxparse.h::DMXConfigSub" ref="a2eeff7f31b82f02916abfddeac619406" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> <a class="el" href="struct__DMXConfigSub.html">DMXConfigSub</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores options under an entry (subentry). </p>
+
+</div>
+</div>
+<a class="anchor" id="aaeef2cb474e931950e496db8005654ff"></a><!-- doxytag: member="dmxparse.h::DMXConfigSubPtr" ref="aaeef2cb474e931950e496db8005654ff" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> * <a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa553d8e6837818d31707e48941f2c755"></a><!-- doxytag: member="dmxparse.h::DMXConfigToken" ref="aa553d8e6837818d31707e48941f2c755" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a> <a class="el" href="struct__DMXConfigToken.html">DMXConfigToken</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores tokens not stored in other structures (e.g., keywords and ;) </p>
+
+</div>
+</div>
+<a class="anchor" id="aa54f2be8a82814626992b0e2c2fd76ab"></a><!-- doxytag: member="dmxparse.h::DMXConfigTokenPtr" ref="aa54f2be8a82814626992b0e2c2fd76ab" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a> * <a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac88a2d841fca93f81e6412228570134d"></a><!-- doxytag: member="dmxparse.h::DMXConfigVirtual" ref="ac88a2d841fca93f81e6412228570134d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtual</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed virtual information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7df6222bb31e29b3b6d98cc9d765c70f"></a><!-- doxytag: member="dmxparse.h::DMXConfigVirtualPtr" ref="a7df6222bb31e29b3b6d98cc9d765c70f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> * <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a09a530a073d8e23f78a3fdd3cdaa16c6"></a><!-- doxytag: member="dmxparse.h::DMXConfigWall" ref="a09a530a073d8e23f78a3fdd3cdaa16c6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a> <a class="el" href="struct__DMXConfigWall.html">DMXConfigWall</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Stores parsed wall information. </p>
+
+</div>
+</div>
+<a class="anchor" id="a176e5216b55fbc5ed7adb856501826a0"></a><!-- doxytag: member="dmxparse.h::DMXConfigWallPtr" ref="a176e5216b55fbc5ed7adb856501826a0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a> * <a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88"></a><!-- doxytag: member="dmxparse.h::DMXConfigType" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f"></a><!-- doxytag: member="dmxConfigComment" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f" args="" -->dmxConfigComment</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face"></a><!-- doxytag: member="dmxConfigVirtual" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face" args="" -->dmxConfigVirtual</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f"></a><!-- doxytag: member="dmxConfigDisplay" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f" args="" -->dmxConfigDisplay</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212"></a><!-- doxytag: member="dmxConfigWall" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212" args="" -->dmxConfigWall</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2"></a><!-- doxytag: member="dmxConfigOption" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2" args="" -->dmxConfigOption</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698"></a><!-- doxytag: member="dmxConfigParam" ref="a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698" args="" -->dmxConfigParam</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="acec532235fc1d75b24779b3ed50aa037"></a><!-- doxytag: member="dmxparse.h::dmxConfigAddEntry" ref="acec532235fc1d75b24779b3ed50aa037" args="(DMXConfigEntryPtr head, DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigAddEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>head</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, and <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a75e3403d28e2cb5b3b6da5461ef1bbca"></a><!-- doxytag: member="dmxparse.h::dmxConfigAddSub" ref="a75e3403d28e2cb5b3b6da5461ef1bbca" args="(DMXConfigSubPtr head, DMXConfigSubPtr sub)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigAddSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>head</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>sub</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1794b2e8571596d46f01ff8cf692410f"></a><!-- doxytag: member="dmxparse.h::dmxConfigAlloc" ref="a1794b2e8571596d46f01ff8cf692410f" args="(unsigned long bytes)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* dmxConfigAlloc </td>
+ <td>(</td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>bytes</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString()</a>, <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim()</a>, <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber()</a>, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim()</a>, <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, and <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d1c3d922b777254300e346b0111943c"></a><!-- doxytag: member="dmxparse.h::dmxConfigCopyString" ref="a0d1c3d922b777254300e346b0111943c" args="(const char *string, int length)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* dmxConfigCopyString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>length</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0619f5f0850b65fefe4df5112aaac05"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateComment" ref="ae0619f5f0850b65fefe4df5112aaac05" args="(int token, int line, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> dmxConfigCreateComment </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">_DMXConfigComment::line</a>, and <a class="el" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">_DMXConfigComment::token</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab3f5b4d4a5b535faf87b3bf7cb30d2d0"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateDisplay" ref="ab3f5b4d4a5b535faf87b3bf7cb30d2d0" args="(DMXConfigTokenPtr pStart, DMXConfigStringPtr pName, DMXConfigFullDimPtr pDim, DMXConfigPairPtr pOrigin, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> dmxConfigCreateDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td>
+ <td class="paramname"><em>pDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pOrigin</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay::dim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay::dname</a>, <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay::end</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>, <a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">_DMXConfigDisplay::origin</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay::rootHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay::rootWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay::rootX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay::rootXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay::rootY</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay::rootYSign</a>, <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay::start</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a402a182c5c9922807ffc7998b4228b24"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateEntry" ref="a402a182c5c9922807ffc7998b4228b24" args="(DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigCreateEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry()</a>, <a class="el" href="dmxparse_8h.html#acee635a4deedd0f4b488d951346f4622">dmxConfigEntryComment()</a>, and <a class="el" href="dmxparse_8h.html#a643b2c9c57d3009965318d20aad1ca0d">dmxConfigEntryVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac75eb1b376fb8a510d123ca119ef215e"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateFullDim" ref="ac75eb1b376fb8a510d123ca119ef215e" args="(DMXConfigPartDimPtr pScrn, DMXConfigPartDimPtr pRoot)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> dmxConfigCreateFullDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td>
+ <td class="paramname"><em>pScrn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td>
+ <td class="paramname"><em>pRoot</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, and <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a40cfc16a7a8a6f4b21bfb81d03490458"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateNumber" ref="a40cfc16a7a8a6f4b21bfb81d03490458" args="(int token, int line, const char *comment, int number)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a> dmxConfigCreateNumber </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>number</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">_DMXConfigNumber::line</a>, <a class="el" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">_DMXConfigNumber::number</a>, and <a class="el" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">_DMXConfigNumber::token</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad183386657a3549f60760a156fad4fb8"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateOption" ref="ad183386657a3549f60760a156fad4fb8" args="(DMXConfigTokenPtr pStart, DMXConfigStringPtr pOption, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> dmxConfigCreateOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pOption</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption::end</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption::option</a>, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption::start</a>, <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a488a03d25bc380f1bdf786693c644957"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreatePair" ref="a488a03d25bc380f1bdf786693c644957" args="(int token, int line, const char *comment, int x, int y, int xsign, int ysign)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> dmxConfigCreatePair </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>xsign</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ysign</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">_DMXConfigPair::line</a>, <a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">_DMXConfigPair::token</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0a4ebd4b3769682daf7a6fed9f11744d"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateParam" ref="a0a4ebd4b3769682daf7a6fed9f11744d" args="(DMXConfigTokenPtr pStart, DMXConfigTokenPtr pOpen, DMXConfigStringPtr pParam, DMXConfigTokenPtr pClose, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> dmxConfigCreateParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pOpen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pParam</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pClose</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam::argc</a>, <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a>, <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam::close</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam::end</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam::open</a>, <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam::param</a>, <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam::start</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1740a9f650d43464836c9b0ec44f9659"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreatePartDim" ref="a1740a9f650d43464836c9b0ec44f9659" args="(DMXConfigPairPtr pDim, DMXConfigPairPtr pOffset)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> dmxConfigCreatePartDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pOffset</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, and <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae285ab0da6d63770365886d413f58432"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateString" ref="ae285ab0da6d63770365886d413f58432" args="(int token, int line, const char *comment, const char *string)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> dmxConfigCreateString </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>string</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">_DMXConfigString::line</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, and <a class="el" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">_DMXConfigString::token</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7e24c7be4cc3880e15274a53b627267"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateSub" ref="aa7e24c7be4cc3880e15274a53b627267" args="(DMXConfigType type, DMXConfigCommentPtr comment, DMXConfigDisplayPtr display, DMXConfigWallPtr wall, DMXConfigOptionPtr option, DMXConfigParamPtr param)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigCreateSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>display</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>wall</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>option</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>param</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub::comment</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>, <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a>, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, and <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a825d125808e8992c740315d3b78e493d">dmxConfigSubComment()</a>, <a class="el" href="dmxparse_8h.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay()</a>, <a class="el" href="dmxparse_8h.html#a23a35d27aa7bf22d815d2a9cff809307">dmxConfigSubOption()</a>, <a class="el" href="dmxparse_8h.html#a16047d4ba67462084a85156432c7cf05">dmxConfigSubParam()</a>, and <a class="el" href="dmxparse_8h.html#aac05245a327cc10096f1a049e675caef">dmxConfigSubWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf6df2ea6db8e6f959c72fc28c46f1b2"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateToken" ref="aaf6df2ea6db8e6f959c72fc28c46f1b2" args="(int token, int line, const char *comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> dmxConfigCreateToken </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>token</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>line</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">_DMXConfigToken::line</a>, and <a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">_DMXConfigToken::token</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a427549ab2ffa269ca34bdb1a60e87bb0"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateVirtual" ref="a427549ab2ffa269ca34bdb1a60e87bb0" args="(DMXConfigTokenPtr pStart, DMXConfigStringPtr pName, DMXConfigPairPtr pDim, DMXConfigTokenPtr pOpen, DMXConfigSubPtr pSubentry, DMXConfigTokenPtr pClose)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> dmxConfigCreateVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pOpen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>pSubentry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pClose</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">_DMXConfigVirtual::close</a>, <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual::dim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, <a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">_DMXConfigVirtual::open</a>, <a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">_DMXConfigVirtual::start</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, <a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">_DMXConfigVirtual::vname</a>, <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, and <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6078c6ad23fc49e4992cade35f7351b2"></a><!-- doxytag: member="dmxparse.h::dmxConfigCreateWall" ref="a6078c6ad23fc49e4992cade35f7351b2" args="(DMXConfigTokenPtr pStart, DMXConfigPairPtr pWallDim, DMXConfigPairPtr pDisplayDim, DMXConfigStringPtr pNameList, DMXConfigTokenPtr pEnd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> dmxConfigCreateWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pStart</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pWallDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>pDisplayDim</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>pNameList</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>pEnd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall::displayDim</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall::end</a>, <a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">_DMXConfigWall::height</a>, <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a>, <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall::start</a>, <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall::wallDim</a>, <a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">_DMXConfigWall::width</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">_DMXConfigWall::xwall</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">_DMXConfigWall::ywall</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acee635a4deedd0f4b488d951346f4622"></a><!-- doxytag: member="dmxparse.h::dmxConfigEntryComment" ref="acee635a4deedd0f4b488d951346f4622" args="(DMXConfigCommentPtr comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigEntryComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, and <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a643b2c9c57d3009965318d20aad1ca0d"></a><!-- doxytag: member="dmxparse.h::dmxConfigEntryVirtual" ref="a643b2c9c57d3009965318d20aad1ca0d" args="(DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> dmxConfigEntryVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a890429fea43e1039967b94fadc1f4e29"></a><!-- doxytag: member="dmxparse.h::dmxConfigFree" ref="a890429fea43e1039967b94fadc1f4e29" args="(void *area)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFree </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>area</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>, <a class="el" href="dmxparse_8h.html#a2b8a343fe122733af82e802a01a5f30b">dmxConfigFreeNumber()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8h.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="dmxparse_8h.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c9b5f8f879ee6872295618c6e1dd232"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeComment" ref="a1c9b5f8f879ee6872295618c6e1dd232" args="(DMXConfigCommentPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, and <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a34126fa5dccdee442dce2b2413c43c53"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeDisplay" ref="a34126fa5dccdee442dce2b2413c43c53" args="(DMXConfigDisplayPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay::dim</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay::dname</a>, <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay::end</a>, and <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay::start</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, and <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab18dcd503e9fbe9d81caa16bf07026ea"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeEntry" ref="ab18dcd503e9fbe9d81caa16bf07026ea" args="(DMXConfigEntryPtr entry)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>entry</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, <a class="el" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad09f9037b194ad32029047499003a60a"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeFullDim" ref="ad09f9037b194ad32029047499003a60a" args="(DMXConfigFullDimPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeFullDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, and <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2b8a343fe122733af82e802a01a5f30b"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeNumber" ref="a2b8a343fe122733af82e802a01a5f30b" args="(DMXConfigNumberPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeNumber </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigNumber.html">DMXConfigNumberPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a87d839927d1775c43e099e87f6e2ca8d"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeOption" ref="a87d839927d1775c43e099e87f6e2ca8d" args="(DMXConfigOptionPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption::end</a>, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption::option</a>, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption::start</a>, and <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a382b3c46caeb7e134e381d732f8d185e"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreePair" ref="a382b3c46caeb7e134e381d732f8d185e" args="(DMXConfigPairPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreePair </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, and <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af978e4f2f42e4d7e01d3d45a4c1b9a4d"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeParam" ref="af978e4f2f42e4d7e01d3d45a4c1b9a4d" args="(DMXConfigParamPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a>, <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam::close</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam::end</a>, <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam::next</a>, <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam::open</a>, <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam::param</a>, and <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam::start</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8cb0f116f7c3c5ac3939cd69df06c0fe"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreePartDim" ref="a8cb0f116f7c3c5ac3939cd69df06c0fe" args="(DMXConfigPartDimPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreePartDim </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, and <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a679f8776dd1a503057891de6483adc49"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeString" ref="a679f8776dd1a503057891de6483adc49" args="(DMXConfigStringPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString::comment</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, and <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a07ef1f7f192d2c0d29332fc5c71e89b8"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeSub" ref="a07ef1f7f192d2c0d29332fc5c71e89b8" args="(DMXConfigSubPtr sub)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>sub</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub::comment</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, <a class="el" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8c.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8c.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8c.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a>, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, and <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a08b933b0269ebf4b22a6b43abbda19e2"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeToken" ref="a08b933b0269ebf4b22a6b43abbda19e2" args="(DMXConfigTokenPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeToken </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken::comment</a>, and <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, and <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6e48a41d83e97afcbd542a210ea30258"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeVirtual" ref="a6e48a41d83e97afcbd542a210ea30258" args="(DMXConfigVirtualPtr virtual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>virtual</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, and <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, and <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac254e191bb664ec87d44f70f52ce897"></a><!-- doxytag: member="dmxparse.h::dmxConfigFreeWall" ref="aac254e191bb664ec87d44f70f52ce897" args="(DMXConfigWallPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigFreeWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall::displayDim</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall::end</a>, <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a>, <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall::start</a>, and <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall::wallDim</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2c4e1260c486d4898c5bb21ff221c89d"></a><!-- doxytag: member="dmxparse.h::dmxConfigLog" ref="a2c4e1260c486d4898c5bb21ff221c89d" args="(const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigLog </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>A general error logging routine that does not depend on the dmxLog functions. </p>
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>, <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>, <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>, and <a class="el" href="dmxparse_8h.html#af8e13444fded1f7707ab7dfc40655fd3">dmxConfigRealloc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a782be9a8b3118f8a52825041b5c2e8e8"></a><!-- doxytag: member="dmxparse.h::dmxConfigLookupParam" ref="a782be9a8b3118f8a52825041b5c2e8e8" args="(DMXConfigParamPtr p, const char *key, int *argc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char** dmxConfigLookupParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>argc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam::argc</a>, <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a>, and <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxConfigCopyFromParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af8e13444fded1f7707ab7dfc40655fd3"></a><!-- doxytag: member="dmxparse.h::dmxConfigRealloc" ref="af8e13444fded1f7707ab7dfc40655fd3" args="(void *orig, unsigned long orig_bytes, unsigned long bytes)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* dmxConfigRealloc </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>orig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>orig_bytes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>bytes</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a825d125808e8992c740315d3b78e493d"></a><!-- doxytag: member="dmxparse.h::dmxConfigSubComment" ref="a825d125808e8992c740315d3b78e493d" args="(DMXConfigCommentPtr comment)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>comment</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, and <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f26909fb7f97007567e5514839c3a53"></a><!-- doxytag: member="dmxparse.h::dmxConfigSubDisplay" ref="a4f26909fb7f97007567e5514839c3a53" args="(DMXConfigDisplayPtr display)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>display</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a23a35d27aa7bf22d815d2a9cff809307"></a><!-- doxytag: member="dmxparse.h::dmxConfigSubOption" ref="a23a35d27aa7bf22d815d2a9cff809307" args="(DMXConfigOptionPtr option)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>option</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16047d4ba67462084a85156432c7cf05"></a><!-- doxytag: member="dmxparse.h::dmxConfigSubParam" ref="a16047d4ba67462084a85156432c7cf05" args="(DMXConfigParamPtr param)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>param</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac05245a327cc10096f1a049e675caef"></a><!-- doxytag: member="dmxparse.h::dmxConfigSubWall" ref="aac05245a327cc10096f1a049e675caef" args="(DMXConfigWallPtr wall)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> dmxConfigSubWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>wall</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, and <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a87640c870f7c3d90c830a68620e48de4"></a><!-- doxytag: member="dmxparse.h::yyerror" ref="a87640c870f7c3d90c830a68620e48de4" args="(const char *message)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void yyerror </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9a7bd1b3d14701eb97c03f3ef34deff1"></a><!-- doxytag: member="dmxparse.h::yylex" ref="a9a7bd1b3d14701eb97c03f3ef34deff1" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int yylex </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="af1733e9f6f810a355a158f16f8bc7899"></a><!-- doxytag: member="dmxparse.h::dmxConfigEntry" ref="af1733e9f6f810a355a158f16f8bc7899" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> <a class="el" href="xdmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab138aa8e11f58bcdcc7134adf240ea8c"></a><!-- doxytag: member="dmxparse.h::yydebug" ref="ab138aa8e11f58bcdcc7134adf240ea8c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">yydebug</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, and <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxparse_8h.html">dmxparse.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxparse_8h_source.html b/hw/dmx/doc/html/dmxparse_8h_source.html
new file mode 100644
index 0000000..5e091b2
--- /dev/null
+++ b/hw/dmx/doc/html/dmxparse_8h_source.html
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxparse_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxparse.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxparse_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXPARSE_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXPARSE_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;stdio.h&gt;</span> <span class="comment">/* For FILE */</span>
+<a name="l00041"></a>00041
+<a name="l00043"></a><a class="code" href="struct__DMXConfigToken.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigToken.html">_DMXConfigToken</a> {
+<a name="l00044"></a><a class="code" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">00044</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">token</a>;
+<a name="l00045"></a><a class="code" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">00045</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">line</a>;
+<a name="l00046"></a><a class="code" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">00046</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">comment</a>;
+<a name="l00047"></a>00047 } <a class="code" href="dmxparse_8h.html#aa553d8e6837818d31707e48941f2c755">DMXConfigToken</a>, *<a class="code" href="dmxparse_8h.html#aa54f2be8a82814626992b0e2c2fd76ab">DMXConfigTokenPtr</a>;
+<a name="l00048"></a>00048
+<a name="l00050"></a><a class="code" href="struct__DMXConfigString.html">00050</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigString.html">_DMXConfigString</a> {
+<a name="l00051"></a><a class="code" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">00051</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">token</a>;
+<a name="l00052"></a><a class="code" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">00052</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">line</a>;
+<a name="l00053"></a><a class="code" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">00053</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">comment</a>;
+<a name="l00054"></a><a class="code" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">00054</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">string</a>;
+<a name="l00055"></a><a class="code" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">00055</a> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigString.html">_DMXConfigString</a> *<a class="code" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">next</a>;
+<a name="l00056"></a>00056 } <a class="code" href="dmxparse_8h.html#a997735bb2e5362d670bd0eaf006e1336">DMXConfigString</a>, *<a class="code" href="dmxparse_8h.html#a163965084bb791376852afc3c8e2a3cd">DMXConfigStringPtr</a>;
+<a name="l00057"></a>00057
+<a name="l00059"></a><a class="code" href="struct__DMXConfigNumber.html">00059</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> {
+<a name="l00060"></a><a class="code" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">00060</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">token</a>;
+<a name="l00061"></a><a class="code" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">00061</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">line</a>;
+<a name="l00062"></a><a class="code" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">00062</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">comment</a>;
+<a name="l00063"></a><a class="code" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">00063</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">number</a>;
+<a name="l00064"></a>00064 } <a class="code" href="dmxparse_8h.html#a09ee4bfd4fb105b8d12a3debde0bedd9">DMXConfigNumber</a>, *<a class="code" href="dmxparse_8h.html#a0595f026bf3e261dda1479c3c3664ed7">DMXConfigNumberPtr</a>;
+<a name="l00065"></a>00065
+<a name="l00067"></a><a class="code" href="struct__DMXConfigPair.html">00067</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigPair.html">_DMXConfigPair</a> {
+<a name="l00068"></a><a class="code" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">00068</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">token</a>;
+<a name="l00069"></a><a class="code" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">00069</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">line</a>;
+<a name="l00070"></a><a class="code" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">00070</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">comment</a>;
+<a name="l00071"></a><a class="code" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">00071</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">x</a>;
+<a name="l00072"></a><a class="code" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">00072</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">y</a>;
+<a name="l00073"></a><a class="code" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">00073</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">xsign</a>;
+<a name="l00074"></a><a class="code" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">00074</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">ysign</a>;
+<a name="l00075"></a>00075 } <a class="code" href="dmxparse_8h.html#a67fb30fb9b3f930220aeea0e7258e5d1">DMXConfigPair</a>, *<a class="code" href="dmxparse_8h.html#a311865c935a9669ca901705d5b28db02">DMXConfigPairPtr</a>;
+<a name="l00076"></a>00076
+<a name="l00078"></a><a class="code" href="struct__DMXConfigComment.html">00078</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigComment.html">_DMXConfigComment</a> {
+<a name="l00079"></a><a class="code" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">00079</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">token</a>;
+<a name="l00080"></a><a class="code" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">00080</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">line</a>;
+<a name="l00081"></a><a class="code" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">00081</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">comment</a>;
+<a name="l00082"></a>00082 } <a class="code" href="dmxparse_8h.html#ac53f3a487c56877ce84e621b93c75e63">DMXConfigComment</a>, *<a class="code" href="dmxparse_8h.html#a3eaf8193499e4474fa2f2c8363ff9558">DMXConfigCommentPtr</a>;
+<a name="l00083"></a>00083
+<a name="l00084"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">00084</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00085"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">00085</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>,
+<a name="l00086"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">00086</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>,
+<a name="l00087"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">00087</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>,
+<a name="l00088"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">00088</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>,
+<a name="l00089"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">00089</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>,
+<a name="l00090"></a><a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">00090</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>
+<a name="l00091"></a>00091 } <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>;
+<a name="l00092"></a>00092
+<a name="l00094"></a><a class="code" href="struct__DMXConfigPartDim.html">00094</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> {
+<a name="l00095"></a><a class="code" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">00095</a> DMXConfigPairPtr <a class="code" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">dim</a>;
+<a name="l00096"></a><a class="code" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">00096</a> DMXConfigPairPtr <a class="code" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">offset</a>;
+<a name="l00097"></a>00097 } <a class="code" href="dmxparse_8h.html#a0040a762f091a14803e78efa90c2b3aa">DMXConfigPartDim</a>, *<a class="code" href="dmxparse_8h.html#a62dde6c86a1db2e243c3d5804770ac98">DMXConfigPartDimPtr</a>;
+<a name="l00098"></a>00098
+<a name="l00100"></a><a class="code" href="struct__DMXConfigFullDim.html">00100</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> {
+<a name="l00101"></a><a class="code" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">00101</a> DMXConfigPartDimPtr <a class="code" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">scrn</a>;
+<a name="l00102"></a><a class="code" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">00102</a> DMXConfigPartDimPtr <a class="code" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">root</a>;
+<a name="l00103"></a>00103 } <a class="code" href="dmxparse_8h.html#a8ad44f7990920ef85b4bdb51c98be380">DMXConfigFullDim</a>, *<a class="code" href="dmxparse_8h.html#af1018551e3cc9ec6836d0d605216e611">DMXConfigFullDimPtr</a>;
+<a name="l00104"></a>00104
+<a name="l00106"></a><a class="code" href="struct__DMXConfigDisplay.html">00106</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> {
+<a name="l00107"></a>00107 <span class="comment">/* Summary information */</span>
+<a name="l00108"></a><a class="code" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">00108</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">name</a>;
+<a name="l00109"></a>00109 <span class="comment">/* Screen Window Geometry */</span>
+<a name="l00110"></a><a class="code" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">00110</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">scrnWidth</a>, <a class="code" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">scrnHeight</a>;
+<a name="l00111"></a><a class="code" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">00111</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">scrnX</a>, <a class="code" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">scrnY</a>;
+<a name="l00112"></a><a class="code" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">00112</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">scrnXSign</a>, <a class="code" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">scrnYSign</a>;
+<a name="l00113"></a>00113 <span class="comment">/* Root Window Geometry */</span>
+<a name="l00114"></a><a class="code" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">00114</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">rootWidth</a>, <a class="code" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">rootHeight</a>;
+<a name="l00115"></a><a class="code" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">00115</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">rootX</a>, <a class="code" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">rootY</a>;
+<a name="l00116"></a><a class="code" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">00116</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">rootXSign</a>, <a class="code" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">rootYSign</a>;
+<a name="l00117"></a>00117 <span class="comment">/* Origin in global space */</span>
+<a name="l00118"></a><a class="code" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">00118</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">rootXOrigin</a>, <a class="code" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">rootYOrigin</a>;
+<a name="l00119"></a>00119
+<a name="l00120"></a>00120 <span class="comment">/* Raw configuration information */</span>
+<a name="l00121"></a><a class="code" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">00121</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">start</a>;
+<a name="l00122"></a><a class="code" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">00122</a> DMXConfigStringPtr <a class="code" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">dname</a>;
+<a name="l00123"></a><a class="code" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">00123</a> DMXConfigFullDimPtr <a class="code" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">dim</a>;
+<a name="l00124"></a><a class="code" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">00124</a> DMXConfigPairPtr <a class="code" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">origin</a>;
+<a name="l00125"></a><a class="code" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">00125</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">end</a>;
+<a name="l00126"></a>00126 } <a class="code" href="dmxparse_8h.html#a31b5941021484d5b5ae6c905dca6f35a">DMXConfigDisplay</a>, *<a class="code" href="dmxparse_8h.html#a77569967e2f40e3e3f05d8e49a4e81f7">DMXConfigDisplayPtr</a>;
+<a name="l00127"></a>00127
+<a name="l00129"></a><a class="code" href="struct__DMXConfigWall.html">00129</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigWall.html">_DMXConfigWall</a> {
+<a name="l00130"></a>00130 <span class="comment">/* Summary information */</span>
+<a name="l00131"></a><a class="code" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">00131</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">width</a>, <a class="code" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">height</a>; <span class="comment">/* dimensions of displays */</span>
+<a name="l00132"></a><a class="code" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">00132</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">xwall</a>, <a class="code" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">ywall</a>; <span class="comment">/* dimensions of wall, in tiles */</span>
+<a name="l00133"></a>00133
+<a name="l00134"></a>00134
+<a name="l00135"></a>00135 <span class="comment">/* Raw configuration informaiton */</span>
+<a name="l00136"></a><a class="code" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">00136</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">start</a>;
+<a name="l00137"></a><a class="code" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">00137</a> DMXConfigPairPtr <a class="code" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">wallDim</a>;
+<a name="l00138"></a><a class="code" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">00138</a> DMXConfigPairPtr <a class="code" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">displayDim</a>;
+<a name="l00139"></a><a class="code" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">00139</a> DMXConfigStringPtr <a class="code" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">nameList</a>;
+<a name="l00140"></a><a class="code" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">00140</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">end</a>;
+<a name="l00141"></a>00141 } <a class="code" href="dmxparse_8h.html#a09a530a073d8e23f78a3fdd3cdaa16c6">DMXConfigWall</a>, *<a class="code" href="dmxparse_8h.html#a176e5216b55fbc5ed7adb856501826a0">DMXConfigWallPtr</a>;
+<a name="l00142"></a>00142
+<a name="l00144"></a><a class="code" href="struct__DMXConfigOption.html">00144</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigOption.html">_DMXConfigOption</a> {
+<a name="l00145"></a>00145 <span class="comment">/* Summary information */</span>
+<a name="l00146"></a><a class="code" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">00146</a> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">string</a>;
+<a name="l00147"></a>00147
+<a name="l00148"></a>00148 <span class="comment">/* Raw configuration informaiton */</span>
+<a name="l00149"></a><a class="code" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">00149</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">start</a>;
+<a name="l00150"></a><a class="code" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">00150</a> DMXConfigStringPtr <a class="code" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">option</a>;
+<a name="l00151"></a><a class="code" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">00151</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">end</a>;
+<a name="l00152"></a>00152 } <a class="code" href="dmxparse_8h.html#a9d47b44af4d217c2e6da2d4678611376">DMXConfigOption</a>, *<a class="code" href="dmxparse_8h.html#a8671db1fd961dbb11df3f83d1fab8227">DMXConfigOptionPtr</a>;
+<a name="l00153"></a>00153
+<a name="l00155"></a><a class="code" href="struct__DMXConfigParam.html">00155</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigParam.html">_DMXConfigParam</a> {
+<a name="l00156"></a><a class="code" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">00156</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">argc</a>;
+<a name="l00157"></a><a class="code" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">00157</a> <span class="keyword">const</span> <span class="keywordtype">char</span> **<a class="code" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">argv</a>;
+<a name="l00158"></a>00158
+<a name="l00159"></a><a class="code" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">00159</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">start</a>;
+<a name="l00160"></a><a class="code" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">00160</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">open</a>;
+<a name="l00161"></a><a class="code" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">00161</a> DMXConfigStringPtr <a class="code" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">param</a>;
+<a name="l00162"></a><a class="code" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">00162</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">close</a>;
+<a name="l00163"></a><a class="code" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">00163</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">end</a>; <span class="comment">/* Either open/close OR end */</span>
+<a name="l00164"></a><a class="code" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">00164</a> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigParam.html">_DMXConfigParam</a> *<a class="code" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">next</a>;
+<a name="l00165"></a>00165 } <a class="code" href="dmxparse_8h.html#a5f7052d0d09e5bd5415f5fb9924c799e">DMXConfigParam</a>, *<a class="code" href="dmxparse_8h.html#a5af8bd2f2624df3b2fa6e36560f2b0a3">DMXConfigParamPtr</a>;
+<a name="l00166"></a>00166
+<a name="l00168"></a><a class="code" href="struct__DMXConfigSub.html">00168</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigSub.html">_DMXConfigSub</a> {
+<a name="l00169"></a><a class="code" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">00169</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="code" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">type</a>;
+<a name="l00170"></a><a class="code" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">00170</a> DMXConfigCommentPtr <a class="code" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">comment</a>;
+<a name="l00171"></a><a class="code" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">00171</a> DMXConfigDisplayPtr <a class="code" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">display</a>;
+<a name="l00172"></a><a class="code" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">00172</a> DMXConfigWallPtr <a class="code" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">wall</a>;
+<a name="l00173"></a><a class="code" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">00173</a> DMXConfigOptionPtr <a class="code" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">option</a>;
+<a name="l00174"></a><a class="code" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">00174</a> DMXConfigParamPtr <a class="code" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">param</a>;
+<a name="l00175"></a><a class="code" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">00175</a> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigSub.html">_DMXConfigSub</a> *<a class="code" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">next</a>;
+<a name="l00176"></a>00176 } <a class="code" href="dmxparse_8h.html#a2eeff7f31b82f02916abfddeac619406">DMXConfigSub</a>, *<a class="code" href="dmxparse_8h.html#aaeef2cb474e931950e496db8005654ff">DMXConfigSubPtr</a>;
+<a name="l00177"></a>00177
+<a name="l00179"></a><a class="code" href="struct__DMXConfigVirtual.html">00179</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> {
+<a name="l00180"></a>00180 <span class="comment">/* Summary information */</span>
+<a name="l00181"></a><a class="code" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">00181</a> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">name</a>;
+<a name="l00182"></a><a class="code" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">00182</a> <span class="keywordtype">int</span> <a class="code" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">width</a>, <a class="code" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">height</a>;
+<a name="l00183"></a>00183
+<a name="l00184"></a>00184 <span class="comment">/* Raw configuration information */</span>
+<a name="l00185"></a><a class="code" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">00185</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">start</a>;
+<a name="l00186"></a><a class="code" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">00186</a> DMXConfigStringPtr <a class="code" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">vname</a>;
+<a name="l00187"></a><a class="code" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">00187</a> DMXConfigPairPtr <a class="code" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">dim</a>;
+<a name="l00188"></a><a class="code" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">00188</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">open</a>;
+<a name="l00189"></a><a class="code" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">00189</a> DMXConfigSubPtr <a class="code" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">subentry</a>;
+<a name="l00190"></a><a class="code" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">00190</a> DMXConfigTokenPtr <a class="code" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">close</a>;
+<a name="l00191"></a>00191 } <a class="code" href="dmxparse_8h.html#ac88a2d841fca93f81e6412228570134d">DMXConfigVirtual</a>, *<a class="code" href="dmxparse_8h.html#a7df6222bb31e29b3b6d98cc9d765c70f">DMXConfigVirtualPtr</a>;
+<a name="l00192"></a>00192
+<a name="l00194"></a><a class="code" href="struct__DMXConfigEntry.html">00194</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> {
+<a name="l00195"></a><a class="code" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">00195</a> <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="code" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">type</a>;
+<a name="l00196"></a><a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">00196</a> DMXConfigCommentPtr <a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>;
+<a name="l00197"></a><a class="code" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">00197</a> DMXConfigVirtualPtr <span class="keyword">virtual</span>;
+<a name="l00198"></a><a class="code" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">00198</a> <span class="keyword">struct </span><a class="code" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> *<a class="code" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">next</a>;
+<a name="l00199"></a>00199 } <a class="code" href="dmxparse_8h.html#a8cb4fa1fa814f09a1cad1712894a8207">DMXConfigEntry</a>, *<a class="code" href="dmxparse_8h.html#ab46cf3c98a49f9dbf90120e8afd65e81">DMXConfigEntryPtr</a>;
+<a name="l00200"></a>00200
+<a name="l00201"></a>00201 <span class="keyword">extern</span> DMXConfigEntryPtr <a class="code" href="dmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a>;
+<a name="l00202"></a>00202
+<a name="l00203"></a>00203 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxparse_8h.html#a9a7bd1b3d14701eb97c03f3ef34deff1">yylex</a>(<span class="keywordtype">void</span>);
+<a name="l00204"></a>00204 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">yydebug</a>;
+<a name="l00205"></a>00205 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8h.html#a87640c870f7c3d90c830a68620e48de4">yyerror</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *message);
+<a name="l00206"></a>00206
+<a name="l00207"></a>00207 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *format, ...);
+<a name="l00208"></a>00208 <span class="keyword">extern</span> <span class="keywordtype">void</span> *<a class="code" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytes);
+<a name="l00209"></a>00209 <span class="keyword">extern</span> <span class="keywordtype">void</span> *<a class="code" href="dmxparse_8c.html#af8e13444fded1f7707ab7dfc40655fd3">dmxConfigRealloc</a>(<span class="keywordtype">void</span> *orig,
+<a name="l00210"></a>00210 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> orig_bytes,
+<a name="l00211"></a>00211 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytes);
+<a name="l00212"></a>00212 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="dmxparse_8c.html#a0d1c3d922b777254300e346b0111943c">dmxConfigCopyString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,
+<a name="l00213"></a>00213 <span class="keywordtype">int</span> length);
+<a name="l00214"></a>00214 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree</a>(<span class="keywordtype">void</span> *area);
+<a name="l00215"></a>00215 <span class="keyword">extern</span> DMXConfigTokenPtr <a class="code" href="dmxparse_8c.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken</a>(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
+<a name="l00216"></a>00216 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>);
+<a name="l00217"></a>00217 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken</a>(DMXConfigTokenPtr p);
+<a name="l00218"></a>00218 <span class="keyword">extern</span> DMXConfigStringPtr <a class="code" href="dmxparse_8c.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString</a>(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
+<a name="l00219"></a>00219 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>,
+<a name="l00220"></a>00220 <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>);
+<a name="l00221"></a>00221 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString</a>(DMXConfigStringPtr p);
+<a name="l00222"></a>00222 <span class="keyword">extern</span> DMXConfigNumberPtr <a class="code" href="dmxparse_8c.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber</a>(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
+<a name="l00223"></a>00223 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>,
+<a name="l00224"></a>00224 <span class="keywordtype">int</span> number);
+<a name="l00225"></a>00225 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a2b8a343fe122733af82e802a01a5f30b">dmxConfigFreeNumber</a>(DMXConfigNumberPtr p);
+<a name="l00226"></a>00226 <span class="keyword">extern</span> DMXConfigPairPtr <a class="code" href="dmxparse_8c.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair</a>(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
+<a name="l00227"></a>00227 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>,
+<a name="l00228"></a>00228 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y,
+<a name="l00229"></a>00229 <span class="keywordtype">int</span> xsign, <span class="keywordtype">int</span> ysign);
+<a name="l00230"></a>00230 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair</a>(DMXConfigPairPtr p);
+<a name="l00231"></a>00231 <span class="keyword">extern</span> DMXConfigCommentPtr <a class="code" href="dmxparse_8c.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment</a>(<span class="keywordtype">int</span> token, <span class="keywordtype">int</span> line,
+<a name="l00232"></a>00232 <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>);
+<a name="l00233"></a>00233 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment</a>(DMXConfigCommentPtr p);
+<a name="l00234"></a>00234 <span class="keyword">extern</span> DMXConfigPartDimPtr <a class="code" href="dmxparse_8c.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim</a>(DMXConfigPairPtr pDim,
+<a name="l00235"></a>00235 DMXConfigPairPtr pOffset);
+<a name="l00236"></a>00236 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim</a>(DMXConfigPartDimPtr p);
+<a name="l00237"></a>00237 <span class="keyword">extern</span> DMXConfigFullDimPtr <a class="code" href="dmxparse_8c.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim</a>(DMXConfigPartDimPtr pScrn,
+<a name="l00238"></a>00238 DMXConfigPartDimPtr pRoot);
+<a name="l00239"></a>00239 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim</a>(DMXConfigFullDimPtr p);
+<a name="l00240"></a>00240 <span class="keyword">extern</span> DMXConfigDisplayPtr <a class="code" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay</a>(DMXConfigTokenPtr pStart,
+<a name="l00241"></a>00241 DMXConfigStringPtr pName,
+<a name="l00242"></a>00242 DMXConfigFullDimPtr pDim,
+<a name="l00243"></a>00243 DMXConfigPairPtr pOrigin,
+<a name="l00244"></a>00244 DMXConfigTokenPtr pEnd);
+<a name="l00245"></a>00245 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay</a>(DMXConfigDisplayPtr p);
+<a name="l00246"></a>00246 <span class="keyword">extern</span> DMXConfigWallPtr <a class="code" href="dmxparse_8c.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall</a>(DMXConfigTokenPtr pStart,
+<a name="l00247"></a>00247 DMXConfigPairPtr pWallDim,
+<a name="l00248"></a>00248 DMXConfigPairPtr pDisplayDim,
+<a name="l00249"></a>00249 DMXConfigStringPtr pNameList,
+<a name="l00250"></a>00250 DMXConfigTokenPtr pEnd);
+<a name="l00251"></a>00251 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall</a>(DMXConfigWallPtr p);
+<a name="l00252"></a>00252 <span class="keyword">extern</span> DMXConfigOptionPtr <a class="code" href="dmxparse_8c.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption</a>(DMXConfigTokenPtr pStart,
+<a name="l00253"></a>00253 DMXConfigStringPtr pOption,
+<a name="l00254"></a>00254 DMXConfigTokenPtr pEnd);
+<a name="l00255"></a>00255 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption</a>(DMXConfigOptionPtr p);
+<a name="l00256"></a>00256 <span class="keyword">extern</span> DMXConfigParamPtr <a class="code" href="dmxparse_8c.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam</a>(DMXConfigTokenPtr pStart,
+<a name="l00257"></a>00257 DMXConfigTokenPtr pOpen,
+<a name="l00258"></a>00258 DMXConfigStringPtr pParam,
+<a name="l00259"></a>00259 DMXConfigTokenPtr pClose,
+<a name="l00260"></a>00260 DMXConfigTokenPtr pEnd);
+<a name="l00261"></a>00261 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam</a>(DMXConfigParamPtr p);
+<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> **<a class="code" href="dmxparse_8c.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam</a>(DMXConfigParamPtr p,
+<a name="l00263"></a>00263 <span class="keyword">const</span> <span class="keywordtype">char</span> *key,
+<a name="l00264"></a>00264 <span class="keywordtype">int</span> *argc);
+<a name="l00265"></a>00265 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub</a>(<a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="code" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">type</a>,
+<a name="l00266"></a>00266 DMXConfigCommentPtr <a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>,
+<a name="l00267"></a>00267 DMXConfigDisplayPtr display,
+<a name="l00268"></a>00268 DMXConfigWallPtr wall,
+<a name="l00269"></a>00269 DMXConfigOptionPtr option,
+<a name="l00270"></a>00270 DMXConfigParamPtr param);
+<a name="l00271"></a>00271 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub</a>(DMXConfigSubPtr sub);
+<a name="l00272"></a>00272 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#a825d125808e8992c740315d3b78e493d">dmxConfigSubComment</a>(DMXConfigCommentPtr <a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>);
+<a name="l00273"></a>00273 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay</a>(DMXConfigDisplayPtr display);
+<a name="l00274"></a>00274 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#aac05245a327cc10096f1a049e675caef">dmxConfigSubWall</a>(DMXConfigWallPtr wall);
+<a name="l00275"></a>00275 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#a23a35d27aa7bf22d815d2a9cff809307">dmxConfigSubOption</a>(DMXConfigOptionPtr option);
+<a name="l00276"></a>00276 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#a16047d4ba67462084a85156432c7cf05">dmxConfigSubParam</a>(DMXConfigParamPtr param);
+<a name="l00277"></a>00277 <span class="keyword">extern</span> DMXConfigSubPtr <a class="code" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub</a>(DMXConfigSubPtr head,
+<a name="l00278"></a>00278 DMXConfigSubPtr sub);
+<a name="l00279"></a>00279 <span class="keyword">extern</span> DMXConfigVirtualPtr <a class="code" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual</a>(DMXConfigTokenPtr pStart,
+<a name="l00280"></a>00280 DMXConfigStringPtr pName,
+<a name="l00281"></a>00281 DMXConfigPairPtr pDim,
+<a name="l00282"></a>00282 DMXConfigTokenPtr pOpen,
+<a name="l00283"></a>00283 DMXConfigSubPtr pSubentry,
+<a name="l00284"></a>00284 DMXConfigTokenPtr pClose);
+<a name="l00285"></a>00285 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual</a>(DMXConfigVirtualPtr <span class="keyword">virtual</span>);
+<a name="l00286"></a>00286 <span class="keyword">extern</span> DMXConfigEntryPtr <a class="code" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry</a>(<a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="code" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">type</a>,
+<a name="l00287"></a>00287 DMXConfigCommentPtr <a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>,
+<a name="l00288"></a>00288 DMXConfigVirtualPtr <span class="keyword">virtual</span>);
+<a name="l00289"></a>00289 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxparse_8c.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry</a>(DMXConfigEntryPtr entry);
+<a name="l00290"></a>00290 <span class="keyword">extern</span> DMXConfigEntryPtr <a class="code" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry</a>(DMXConfigEntryPtr head,
+<a name="l00291"></a>00291 <a class="code" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="code" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">type</a>,
+<a name="l00292"></a>00292 DMXConfigCommentPtr <a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>,
+<a name="l00293"></a>00293 DMXConfigVirtualPtr <span class="keyword">virtual</span>);
+<a name="l00294"></a>00294 <span class="keyword">extern</span> DMXConfigEntryPtr <a class="code" href="dmxparse_8c.html#acee635a4deedd0f4b488d951346f4622">dmxConfigEntryComment</a>(DMXConfigCommentPtr <a class="code" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a>);
+<a name="l00295"></a>00295 <span class="keyword">extern</span> DMXConfigEntryPtr <a class="code" href="dmxparse_8c.html#a643b2c9c57d3009965318d20aad1ca0d">dmxConfigEntryVirtual</a>(DMXConfigVirtualPtr <span class="keyword">virtual</span>);
+<a name="l00296"></a>00296
+<a name="l00297"></a>00297 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxparse_8h.html">dmxparse.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxpict_8c.html b/hw/dmx/doc/html/dmxpict_8c.html
new file mode 100644
index 0000000..ffc246e
--- /dev/null
+++ b/hw/dmx/doc/html/dmxpict_8c.html
@@ -0,0 +1,1413 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxpict_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxpict.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;fb.h&quot;</code><br/>
+<code>#include &quot;pixmapstr.h&quot;</code><br/>
+<code>#include &quot;dixstruct.h&quot;</code><br/>
+<code>#include &lt;X11/extensions/render.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/renderproto.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/Xfixes.h&gt;</code><br/>
+<code>#include &quot;picture.h&quot;</code><br/>
+<code>#include &quot;picturestr.h&quot;</code><br/>
+<code>#include &quot;mipict.h&quot;</code><br/>
+<code>#include &quot;fbpict.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter</a> (ClientPtr client)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a3b0dd9ecc0fbb260662ba6c18d69bd08">dmxGlyphErrorHandler</a> (Display *dpy, XErrorEvent *ev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a93c956636d6aba1f2ce1cab637e00fff">dmxResetRender</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit</a> (ScreenPtr pScreen, PictFormatPtr formats, int nformats)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static XRenderPictFormat *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, PictFormatPtr pFmt)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet</a> (ScreenPtr pScreen, GlyphSetPtr glyphSet)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet</a> (int idx, GlyphSetPtr glyphSet)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Picture&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip</a> (PicturePtr pPicture, int clipType, pointer value, int n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxChangePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite</a> (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a8a98dca5e23c501c44fa3e040e31d100">dmxGlyphs</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists, GlyphPtr *glyphs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects</a> (CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect, xRectangle *rects)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a5c81bdb404715c2318d3eda49e26fe68">dmxInitIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#aa63b1daaacc56332c04832198a9e30b7">dmxCloseIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a05292dc07650c6fb40e13640cfce0df6">dmxUpdateIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat, int ndef, xColorItem *pdef)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid *traps)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a2a976139e942aa64e03b8f5357ba82ca">RenderErrBase</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">ProcRenderVector</a> [RenderNumberRequests])(ClientPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a> [RenderNumberRequests])(ClientPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxGlyphLastError</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provide support for the RENDER extension (version 0.8). </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a390ee65e9cbdf613f5f7a6fafa754fff"></a><!-- doxytag: member="dmxpict.c::dmxBECreateGlyphSet" ref="a390ee65e9cbdf613f5f7a6fafa754fff" args="(int idx, GlyphSetPtr glyphSet)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxBECreateGlyphSet </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphSetPtr&#160;</td>
+ <td class="paramname"><em>glyphSet</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>glyphSet</em> on the backend screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmxpict_8c.html#a3b0dd9ecc0fbb260662ba6c18d69bd08">dmxGlyphErrorHandler()</a>, <a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxGlyphLastError</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, and <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac1b1e577a8993b4c76eba1bfad485396"></a><!-- doxytag: member="dmxpict.c::dmxBECreatePicture" ref="ac1b1e577a8993b4c76eba1bfad485396" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxBECreatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pPicture</em> on the backend. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a342746cc3fb1fe0731522315c6dd91fc"></a><!-- doxytag: member="dmxpict.c::dmxBEFreeGlyphSet" ref="a342746cc3fb1fe0731522315c6dd91fc" args="(ScreenPtr pScreen, GlyphSetPtr glyphSet)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeGlyphSet </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphSetPtr&#160;</td>
+ <td class="paramname"><em>glyphSet</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free <em>glyphSet</em> on back-end screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, and <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7b24ad91d73ffd9475719ec4b0a73f34"></a><!-- doxytag: member="dmxpict.c::dmxBEFreePicture" ref="a7b24ad91d73ffd9475719ec4b0a73f34" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pPicture</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, and <a class="el" href="dmxpict_8h.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a316382a2e169f1662363123670a252c7"></a><!-- doxytag: member="dmxpict.c::dmxChangePicture" ref="a316382a2e169f1662363123670a252c7" args="(PicturePtr pPicture, Mask mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Mask&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the attributes of the pictures. If the picture has not yet been created due to lazy window creation, save the mask so that it can be used to appropriately initialize the picture's attributes when it is created later. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a80e126a5d7911fec43bad8a9428980d6"></a><!-- doxytag: member="dmxpict.c::dmxChangePictureClip" ref="a80e126a5d7911fec43bad8a9428980d6" args="(PicturePtr pPicture, int clipType, pointer value, int n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxChangePictureClip </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>clipType</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the picture's list of clip rectangles. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa63b1daaacc56332c04832198a9e30b7"></a><!-- doxytag: member="dmxpict.c::dmxCloseIndexed" ref="aa63b1daaacc56332c04832198a9e30b7" args="(ScreenPtr pScreen, PictFormatPtr pFormat)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCloseIndexed </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFormat</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Indexed color visuals are not yet supported. </p>
+
+</div>
+</div>
+<a class="anchor" id="a65851c1a4e9cd6946d67ff5aaf7bce88"></a><!-- doxytag: member="dmxpict.c::dmxComposite" ref="a65851c1a4e9cd6946d67ff5aaf7bce88" args="(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxComposite </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>yMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>yDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD16&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD16&#160;</td>
+ <td class="paramname"><em>height</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a picture on the appropriate screen by combining the specified rectangle of the transformed src and mask operands with the specified rectangle of the dst using op as the compositing operator. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae828cd3db7af3c9e3a615267cd780ac4"></a><!-- doxytag: member="dmxpict.c::dmxCompositeRects" ref="ae828cd3db7af3c9e3a615267cd780ac4" args="(CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect, xRectangle *rects)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCompositeRects </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRenderColor *&#160;</td>
+ <td class="paramname"><em>color</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nRect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>rects</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill a rectangle on the appropriate screen by combining the color with the dest picture in the area specified by the list of rectangles. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad7adb9c71564816f5f3172c710274d57"></a><!-- doxytag: member="dmxpict.c::dmxCreatePicture" ref="ad7adb9c71564816f5f3172c710274d57" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCreatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a picture. This function handles the CreatePicture unwrapping/wrapping and calls dmxDoCreatePicture to actually create the picture on the appropriate screen. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>, and <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c52091268b0f77d74d3a097b396abcf"></a><!-- doxytag: member="dmxpict.c::dmxCreatePictureList" ref="a8c52091268b0f77d74d3a097b396abcf" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCreatePictureList </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a list of pictures. This function is called by <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a> during the lazy window creation realization process. It creates the entire list of pictures that are associated with the given window. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aee92c240df08f4c8a62c291b3efa4d7e"></a><!-- doxytag: member="dmxpict.c::dmxDestroyPicture" ref="aee92c240df08f4c8a62c291b3efa4d7e" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyPicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a picture. This function calls the wrapped function that frees the resources in the DMX server associated with this picture. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa977edb667e68606b2e08b25d99427de"></a><!-- doxytag: member="dmxpict.c::dmxDestroyPictureClip" ref="aa977edb667e68606b2e08b25d99427de" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyPictureClip </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the picture's list of clip rectangles. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0af49a0382a2763672f3f8bc1e1ee156"></a><!-- doxytag: member="dmxpict.c::dmxDestroyPictureList" ref="a0af49a0382a2763672f3f8bc1e1ee156" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxDestroyPictureList </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a list of pictures that are associated with the window that is being destroyed. This function is called by <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>. </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a314fad65d3e8f6470ed95e052348df3d"></a><!-- doxytag: member="dmxpict.c::dmxDoCreatePicture" ref="a314fad65d3e8f6470ed95e052348df3d" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Picture dmxDoCreatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a picture on the appropriate screen. This is the actual function that creates the picture. However, if the associated window has not yet been created due to lazy window creation, then delay the picture creation until the window is mapped. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv::hasPict</a>, <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, and <a class="el" href="dmxpict_8h.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa154f0c705ffdaf3770cd87c478db004"></a><!-- doxytag: member="dmxpict.c::dmxFindFormat" ref="aa154f0c705ffdaf3770cd87c478db004" args="(DMXScreenInfo *dmxScreen, PictFormatPtr pFmt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static XRenderPictFormat* dmxFindFormat </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFmt</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Find the appropriate format on the requested screen given the internal format requested. The list of formats is searched sequentially as the XRenderFindFormat() function does not always find the appropriate format when a specific format is requested. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, and <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3b0dd9ecc0fbb260662ba6c18d69bd08"></a><!-- doxytag: member="dmxpict.c::dmxGlyphErrorHandler" ref="a3b0dd9ecc0fbb260662ba6c18d69bd08" args="(Display *dpy, XErrorEvent *ev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxGlyphErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XErrorEvent *&#160;</td>
+ <td class="paramname"><em>ev</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxGlyphLastError</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8a98dca5e23c501c44fa3e040e31d100"></a><!-- doxytag: member="dmxpict.c::dmxGlyphs" ref="a8a98dca5e23c501c44fa3e040e31d100" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists, GlyphPtr *glyphs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGlyphs </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nlists</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphListPtr&#160;</td>
+ <td class="paramname"><em>lists</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphPtr *&#160;</td>
+ <td class="paramname"><em>glyphs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Null function to catch when/if RENDER calls lower level mi hooks. Compositing glyphs is handled by <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>. This function should never be called. </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5c81bdb404715c2318d3eda49e26fe68"></a><!-- doxytag: member="dmxpict.c::dmxInitIndexed" ref="a5c81bdb404715c2318d3eda49e26fe68" args="(ScreenPtr pScreen, PictFormatPtr pFormat)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitIndexed </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFormat</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Indexed color visuals are not yet supported. </p>
+
+</div>
+</div>
+<a class="anchor" id="a76cabef9d3047d8f514fb6e17b951145"></a><!-- doxytag: member="dmxpict.c::dmxInitRender" ref="a76cabef9d3047d8f514fb6e17b951145" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitRender </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the Proc Vector for the RENDER extension. The functions here cannot be handled by the mi layer RENDER hooks either because the required information is no longer available when it reaches the mi layer or no mi layer hooks exist. This function is called from <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a> since it should be initialized only once per server generation. </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, and <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">ProcRenderVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a457aa4df6b01e88a26cc069094e4b07c"></a><!-- doxytag: member="dmxpict.c::dmxPictureInit" ref="a457aa4df6b01e88a26cc069094e4b07c" args="(ScreenPtr pScreen, PictFormatPtr formats, int nformats)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxPictureInit </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>formats</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nformats</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the RENDER extension, allocate the picture privates and wrap mi function hooks. If the shadow frame buffer is used, then call the appropriate fb initialization function. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpict_8c.html#a8a98dca5e23c501c44fa3e040e31d100">dmxGlyphs()</a>, <a class="el" href="dmx_8h.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, and <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3af8c0336c49625930470c6e2bce2a48"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderAddGlyphs" ref="a3af8c0336c49625930470c6e2bce2a48" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderAddGlyphs </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Add glyphs to the Glyph Set on each screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a612db8702e6a380e12719576a57602e7"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderCompositeGlyphs" ref="a612db8702e6a380e12719576a57602e7" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderCompositeGlyphs </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite glyphs on each screen into the requested picture. If either the src or dest picture has not been allocated due to lazy window creation, this request will gracefully return. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaaa954b686d1322b7cda6a83f24a8c45"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderCreateGlyphSet" ref="aaaa954b686d1322b7cda6a83f24a8c45" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderCreateGlyphSet </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a Glyph Set on each screen. Save the glyphset ID from each screen in the Glyph Set's private structure. Fail if the format requested is not available or if the Glyph Set cannot be created on the screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a326b29fc2f94bec3a92a7d2c801df449">DMX_SET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8c.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a31fa7a567bceaf88984a3e862dc9a72e"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderFreeGlyphs" ref="a31fa7a567bceaf88984a3e862dc9a72e" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderFreeGlyphs </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free glyphs from the Glyph Set for each screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a182c93f585ba30c52c680849edb51c7f"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderFreeGlyphSet" ref="a182c93f585ba30c52c680849edb51c7f" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderFreeGlyphSet </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the previously allocated Glyph Sets for each screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8h.html#a326b29fc2f94bec3a92a7d2c801df449">DMX_SET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6cf50414d7688db973f42db898ba16a8"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderSetPictureFilter" ref="a6cf50414d7688db973f42db898ba16a8" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderSetPictureFilter </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the picture filter on each screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af7e087c44278e073b515a7adf3788a06"></a><!-- doxytag: member="dmxpict.c::dmxProcRenderSetPictureTransform" ref="af7e087c44278e073b515a7adf3788a06" args="(ClientPtr client)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxProcRenderSetPictureTransform </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the picture transform on each screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a93c956636d6aba1f2ce1cab637e00fff"></a><!-- doxytag: member="dmxpict.c::dmxResetRender" ref="a93c956636d6aba1f2ce1cab637e00fff" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResetRender </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reset the Proc Vector for the RENDER extension back to the original functions. This function is called from <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a> during the server reset (only for screen #0). </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, and <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">ProcRenderVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae54f217c222944bb10731d73e05ed4b2"></a><!-- doxytag: member="dmxpict.c::dmxTrapezoids" ref="ae54f217c222944bb10731d73e05ed4b2" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid *traps)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTrapezoids </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ntrap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xTrapezoid *&#160;</td>
+ <td class="paramname"><em>traps</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a list of trapezoids on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a401f568feed789ffc0bb1cc52573f707"></a><!-- doxytag: member="dmxpict.c::dmxTriangles" ref="a401f568feed789ffc0bb1cc52573f707" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTriangles </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ntri</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xTriangle *&#160;</td>
+ <td class="paramname"><em>tris</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a list of triangles on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11d3beb5f92c982f9383bb7e606e3157"></a><!-- doxytag: member="dmxpict.c::dmxTriFan" ref="a11d3beb5f92c982f9383bb7e606e3157" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTriFan </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npoint</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xPointFixed *&#160;</td>
+ <td class="paramname"><em>points</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a triangle fan on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e36166fd4db06d364e7cc1762ab5b8c"></a><!-- doxytag: member="dmxpict.c::dmxTriStrip" ref="a3e36166fd4db06d364e7cc1762ab5b8c" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTriStrip </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npoint</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xPointFixed *&#160;</td>
+ <td class="paramname"><em>points</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a triangle strip on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05292dc07650c6fb40e13640cfce0df6"></a><!-- doxytag: member="dmxpict.c::dmxUpdateIndexed" ref="a05292dc07650c6fb40e13640cfce0df6" args="(ScreenPtr pScreen, PictFormatPtr pFormat, int ndef, xColorItem *pdef)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxUpdateIndexed </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ndef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xColorItem *&#160;</td>
+ <td class="paramname"><em>pdef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Indexed color visuals are not yet supported. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3a9285c518b050130e40b7e147309350"></a><!-- doxytag: member="dmxpict.c::dmxValidatePicture" ref="a3a9285c518b050130e40b7e147309350" args="(PicturePtr pPicture, Mask mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxValidatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Mask&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Validate the picture's attributes before rendering to it. Update any picture attributes that have been changed by one of the higher layers. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>, and <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a80081bafc7043ef16f07b96b9322264c"></a><!-- doxytag: member="dmxpict.c::dmxGlyphLastError" ref="a80081bafc7043ef16f07b96b9322264c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxGlyphLastError</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Catch errors that might occur when allocating Glyph Sets. Errors are saved in dmxGlyphLastError for later handling. </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, and <a class="el" href="dmxpict_8c.html#a3b0dd9ecc0fbb260662ba6c18d69bd08">dmxGlyphErrorHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeba9d541daf04470813b176723c857e8"></a><!-- doxytag: member="dmxpict.c::dmxSaveRenderVector" ref="aeba9d541daf04470813b176723c857e8" args="[RenderNumberRequests])(ClientPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int(* <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>[RenderNumberRequests])(ClientPtr)<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, and <a class="el" href="dmxpict_8h.html#a93c956636d6aba1f2ce1cab637e00fff">dmxResetRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a04fe5f379830ee6515c7af277f3a7908"></a><!-- doxytag: member="dmxpict.c::ProcRenderVector" ref="a04fe5f379830ee6515c7af277f3a7908" args="[RenderNumberRequests])(ClientPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int(* <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">ProcRenderVector</a>[RenderNumberRequests])(ClientPtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender()</a>, and <a class="el" href="dmxpict_8h.html#a93c956636d6aba1f2ce1cab637e00fff">dmxResetRender()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2a976139e942aa64e03b8f5357ba82ca"></a><!-- doxytag: member="dmxpict.c::RenderErrBase" ref="a2a976139e942aa64e03b8f5357ba82ca" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxpict_8c.html#a2a976139e942aa64e03b8f5357ba82ca">RenderErrBase</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxpict_8c.html">dmxpict.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxpict_8h.html b/hw/dmx/doc/html/dmxpict_8h.html
new file mode 100644
index 0000000..d1a5974
--- /dev/null
+++ b/hw/dmx/doc/html/dmxpict_8h.html
@@ -0,0 +1,1229 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxpict_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxpict.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxpict_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>(_pPict)&#160;&#160;&#160;(<a class="el" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a>)dixLookupPrivate(&amp;(_pPict)-&gt;devPrivates, dmxPictPrivateKey)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a326b29fc2f94bec3a92a7d2c801df449">DMX_SET_GLYPH_PRIV</a>(_pGlyph, _pPriv)&#160;&#160;&#160;GlyphSetSetPrivate((_pGlyph), dmxGlyphSetPrivateKey, (_pPriv))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>(_pGlyph)&#160;&#160;&#160;(<a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a>)GlyphSetGetPrivate((_pGlyph), dmxGlyphSetPrivateKey)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#ab9d490e5079b84da8b60bf0aadd4b10e">dmxPictPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#af8d6ee7f8278532ad8b810f448d1cca3">dmxPictPrivPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a9861086a35576e59fe0f9306c4e2588d">dmxGlyphPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a269ea3cc32b511169336925123d1558d">dmxGlyphPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a93c956636d6aba1f2ce1cab637e00fff">dmxResetRender</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit</a> (ScreenPtr pScreen, PictFormatPtr formats, int nformats)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip</a> (PicturePtr pPicture, int clipType, pointer value, int n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture</a> (PicturePtr pPicture, Mask mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite</a> (CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a8a98dca5e23c501c44fa3e040e31d100">dmxGlyphs</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists, GlyphPtr *glyphs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects</a> (CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect, xRectangle *rects)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a5c81bdb404715c2318d3eda49e26fe68">dmxInitIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#aa63b1daaacc56332c04832198a9e30b7">dmxCloseIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a05292dc07650c6fb40e13640cfce0df6">dmxUpdateIndexed</a> (ScreenPtr pScreen, PictFormatPtr pFormat, int ndef, xColorItem *pdef)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid *traps)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan</a> (CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet</a> (int idx, GlyphSetPtr glyphSet)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet</a> (ScreenPtr pScreen, GlyphSetPtr glyphSet)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture</a> (PicturePtr pPicture)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture</a> (PicturePtr pPicture)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides access to the externally visible RENDER support functions, global variables and macros for DMX.</p>
+<p>FIXME: Move function definitions for non-externally visible function to .c file. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a1f3973dbafad54de511adf9c20a80281"></a><!-- doxytag: member="dmxpict.h::DMX_GET_GLYPH_PRIV" ref="a1f3973dbafad54de511adf9c20a80281" args="(_pGlyph)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_GLYPH_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGlyph</td><td>)</td>
+ <td>&#160;&#160;&#160;(<a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a>)GlyphSetGetPrivate((_pGlyph), dmxGlyphSetPrivateKey)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the glyphset private data given a glyphset pointer </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, and <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af79a539efc23aae2fd9f175e5e9dbf56"></a><!-- doxytag: member="dmxpict.h::DMX_GET_PICT_PRIV" ref="af79a539efc23aae2fd9f175e5e9dbf56" args="(_pPict)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_PICT_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pPict</td><td>)</td>
+ <td>&#160;&#160;&#160;(<a class="el" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a>)dixLookupPrivate(&amp;(_pPict)-&gt;devPrivates, dmxPictPrivateKey)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get the picture private data given a picture pointer </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture()</a>, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpict_8h.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, and <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a326b29fc2f94bec3a92a7d2c801df449"></a><!-- doxytag: member="dmxpict.h::DMX_SET_GLYPH_PRIV" ref="a326b29fc2f94bec3a92a7d2c801df449" args="(_pGlyph, _pPriv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_SET_GLYPH_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGlyph, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pPriv&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;GlyphSetSetPrivate((_pGlyph), dmxGlyphSetPrivateKey, (_pPriv))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the glyphset private data given a glyphset pointer </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, and <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a269ea3cc32b511169336925123d1558d"></a><!-- doxytag: member="dmxpict.h::dmxGlyphPrivPtr" ref="a269ea3cc32b511169336925123d1558d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> * <a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9861086a35576e59fe0f9306c4e2588d"></a><!-- doxytag: member="dmxpict.h::dmxGlyphPrivRec" ref="a9861086a35576e59fe0f9306c4e2588d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> <a class="el" href="struct__dmxGlyphPriv.html">dmxGlyphPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Glyph Set private structure </p>
+
+</div>
+</div>
+<a class="anchor" id="af8d6ee7f8278532ad8b810f448d1cca3"></a><!-- doxytag: member="dmxpict.h::dmxPictPrivPtr" ref="af8d6ee7f8278532ad8b810f448d1cca3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a> * <a class="el" href="struct__dmxPictPriv.html">dmxPictPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab9d490e5079b84da8b60bf0aadd4b10e"></a><!-- doxytag: member="dmxpict.h::dmxPictPrivRec" ref="ab9d490e5079b84da8b60bf0aadd4b10e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a> <a class="el" href="struct__dmxPictPriv.html">dmxPictPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Picture private structure </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a390ee65e9cbdf613f5f7a6fafa754fff"></a><!-- doxytag: member="dmxpict.h::dmxBECreateGlyphSet" ref="a390ee65e9cbdf613f5f7a6fafa754fff" args="(int idx, GlyphSetPtr glyphSet)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxBECreateGlyphSet </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphSetPtr&#160;</td>
+ <td class="paramname"><em>glyphSet</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>glyphSet</em> on the backend screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmxpict_8c.html#a3b0dd9ecc0fbb260662ba6c18d69bd08">dmxGlyphErrorHandler()</a>, <a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxGlyphLastError</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, and <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac1b1e577a8993b4c76eba1bfad485396"></a><!-- doxytag: member="dmxpict.h::dmxBECreatePicture" ref="ac1b1e577a8993b4c76eba1bfad485396" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxBECreatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pPicture</em> on the backend. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a342746cc3fb1fe0731522315c6dd91fc"></a><!-- doxytag: member="dmxpict.h::dmxBEFreeGlyphSet" ref="a342746cc3fb1fe0731522315c6dd91fc" args="(ScreenPtr pScreen, GlyphSetPtr glyphSet)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreeGlyphSet </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphSetPtr&#160;</td>
+ <td class="paramname"><em>glyphSet</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free <em>glyphSet</em> on back-end screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">DMX_GET_GLYPH_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, and <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7b24ad91d73ffd9475719ec4b0a73f34"></a><!-- doxytag: member="dmxpict.h::dmxBEFreePicture" ref="a7b24ad91d73ffd9475719ec4b0a73f34" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pPicture</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, and <a class="el" href="dmxpict_8h.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a316382a2e169f1662363123670a252c7"></a><!-- doxytag: member="dmxpict.h::dmxChangePicture" ref="a316382a2e169f1662363123670a252c7" args="(PicturePtr pPicture, Mask mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Mask&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the attributes of the pictures. If the picture has not yet been created due to lazy window creation, save the mask so that it can be used to appropriately initialize the picture's attributes when it is created later. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a80e126a5d7911fec43bad8a9428980d6"></a><!-- doxytag: member="dmxpict.h::dmxChangePictureClip" ref="a80e126a5d7911fec43bad8a9428980d6" args="(PicturePtr pPicture, int clipType, pointer value, int n)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxChangePictureClip </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>clipType</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>n</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the picture's list of clip rectangles. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa63b1daaacc56332c04832198a9e30b7"></a><!-- doxytag: member="dmxpict.h::dmxCloseIndexed" ref="aa63b1daaacc56332c04832198a9e30b7" args="(ScreenPtr pScreen, PictFormatPtr pFormat)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCloseIndexed </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFormat</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Indexed color visuals are not yet supported. </p>
+
+</div>
+</div>
+<a class="anchor" id="a65851c1a4e9cd6946d67ff5aaf7bce88"></a><!-- doxytag: member="dmxpict.h::dmxComposite" ref="a65851c1a4e9cd6946d67ff5aaf7bce88" args="(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxComposite </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>yMask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>yDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD16&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD16&#160;</td>
+ <td class="paramname"><em>height</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a picture on the appropriate screen by combining the specified rectangle of the transformed src and mask operands with the specified rectangle of the dst using op as the compositing operator. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae828cd3db7af3c9e3a615267cd780ac4"></a><!-- doxytag: member="dmxpict.h::dmxCompositeRects" ref="ae828cd3db7af3c9e3a615267cd780ac4" args="(CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect, xRectangle *rects)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCompositeRects </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRenderColor *&#160;</td>
+ <td class="paramname"><em>color</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nRect</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xRectangle *&#160;</td>
+ <td class="paramname"><em>rects</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill a rectangle on the appropriate screen by combining the color with the dest picture in the area specified by the list of rectangles. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad7adb9c71564816f5f3172c710274d57"></a><!-- doxytag: member="dmxpict.h::dmxCreatePicture" ref="ad7adb9c71564816f5f3172c710274d57" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxCreatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a picture. This function handles the CreatePicture unwrapping/wrapping and calls dmxDoCreatePicture to actually create the picture on the appropriate screen. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>, and <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c52091268b0f77d74d3a097b396abcf"></a><!-- doxytag: member="dmxpict.h::dmxCreatePictureList" ref="a8c52091268b0f77d74d3a097b396abcf" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCreatePictureList </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a list of pictures. This function is called by <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a> during the lazy window creation realization process. It creates the entire list of pictures that are associated with the given window. </p>
+
+<p>References <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aee92c240df08f4c8a62c291b3efa4d7e"></a><!-- doxytag: member="dmxpict.h::dmxDestroyPicture" ref="aee92c240df08f4c8a62c291b3efa4d7e" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyPicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a picture. This function calls the wrapped function that frees the resources in the DMX server associated with this picture. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa977edb667e68606b2e08b25d99427de"></a><!-- doxytag: member="dmxpict.h::dmxDestroyPictureClip" ref="aa977edb667e68606b2e08b25d99427de" args="(PicturePtr pPicture)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxDestroyPictureClip </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the picture's list of clip rectangles. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, and <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0af49a0382a2763672f3f8bc1e1ee156"></a><!-- doxytag: member="dmxpict.h::dmxDestroyPictureList" ref="a0af49a0382a2763672f3f8bc1e1ee156" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxDestroyPictureList </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a list of pictures that are associated with the window that is being destroyed. This function is called by <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>. </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8a98dca5e23c501c44fa3e040e31d100"></a><!-- doxytag: member="dmxpict.h::dmxGlyphs" ref="a8a98dca5e23c501c44fa3e040e31d100" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlists, GlyphListPtr lists, GlyphPtr *glyphs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGlyphs </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nlists</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphListPtr&#160;</td>
+ <td class="paramname"><em>lists</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">GlyphPtr *&#160;</td>
+ <td class="paramname"><em>glyphs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Null function to catch when/if RENDER calls lower level mi hooks. Compositing glyphs is handled by <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>. This function should never be called. </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5c81bdb404715c2318d3eda49e26fe68"></a><!-- doxytag: member="dmxpict.h::dmxInitIndexed" ref="a5c81bdb404715c2318d3eda49e26fe68" args="(ScreenPtr pScreen, PictFormatPtr pFormat)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitIndexed </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFormat</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Indexed color visuals are not yet supported. </p>
+
+</div>
+</div>
+<a class="anchor" id="a76cabef9d3047d8f514fb6e17b951145"></a><!-- doxytag: member="dmxpict.h::dmxInitRender" ref="a76cabef9d3047d8f514fb6e17b951145" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxInitRender </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the Proc Vector for the RENDER extension. The functions here cannot be handled by the mi layer RENDER hooks either because the required information is no longer available when it reaches the mi layer or no mi layer hooks exist. This function is called from <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a> since it should be initialized only once per server generation. </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, and <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">ProcRenderVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a457aa4df6b01e88a26cc069094e4b07c"></a><!-- doxytag: member="dmxpict.h::dmxPictureInit" ref="a457aa4df6b01e88a26cc069094e4b07c" args="(ScreenPtr pScreen, PictFormatPtr formats, int nformats)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxPictureInit </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>formats</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>nformats</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the RENDER extension, allocate the picture privates and wrap mi function hooks. If the shadow frame buffer is used, then call the appropriate fb initialization function. </p>
+
+<p>References <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpict_8c.html#a8a98dca5e23c501c44fa3e040e31d100">dmxGlyphs()</a>, <a class="el" href="dmx_8h.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, and <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a93c956636d6aba1f2ce1cab637e00fff"></a><!-- doxytag: member="dmxpict.h::dmxResetRender" ref="a93c956636d6aba1f2ce1cab637e00fff" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResetRender </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reset the Proc Vector for the RENDER extension back to the original functions. This function is called from <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a> during the server reset (only for screen #0). </p>
+
+<p>References <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxSaveRenderVector</a>, and <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">ProcRenderVector</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae54f217c222944bb10731d73e05ed4b2"></a><!-- doxytag: member="dmxpict.h::dmxTrapezoids" ref="ae54f217c222944bb10731d73e05ed4b2" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntrap, xTrapezoid *traps)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTrapezoids </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ntrap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xTrapezoid *&#160;</td>
+ <td class="paramname"><em>traps</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a list of trapezoids on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a401f568feed789ffc0bb1cc52573f707"></a><!-- doxytag: member="dmxpict.h::dmxTriangles" ref="a401f568feed789ffc0bb1cc52573f707" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int ntri, xTriangle *tris)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTriangles </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ntri</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xTriangle *&#160;</td>
+ <td class="paramname"><em>tris</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a list of triangles on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11d3beb5f92c982f9383bb7e606e3157"></a><!-- doxytag: member="dmxpict.h::dmxTriFan" ref="a11d3beb5f92c982f9383bb7e606e3157" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTriFan </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npoint</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xPointFixed *&#160;</td>
+ <td class="paramname"><em>points</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a triangle fan on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e36166fd4db06d364e7cc1762ab5b8c"></a><!-- doxytag: member="dmxpict.h::dmxTriStrip" ref="a3e36166fd4db06d364e7cc1762ab5b8c" args="(CARD8 op, PicturePtr pSrc, PicturePtr pDst, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoint, xPointFixed *points)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxTriStrip </td>
+ <td>(</td>
+ <td class="paramtype">CARD8&#160;</td>
+ <td class="paramname"><em>op</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pDst</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>maskFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>xSrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">INT16&#160;</td>
+ <td class="paramname"><em>ySrc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>npoint</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xPointFixed *&#160;</td>
+ <td class="paramname"><em>points</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Composite a triangle strip on the appropriate screen. For a complete description see the protocol document of the RENDER library. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, and <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a05292dc07650c6fb40e13640cfce0df6"></a><!-- doxytag: member="dmxpict.h::dmxUpdateIndexed" ref="a05292dc07650c6fb40e13640cfce0df6" args="(ScreenPtr pScreen, PictFormatPtr pFormat, int ndef, xColorItem *pdef)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxUpdateIndexed </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PictFormatPtr&#160;</td>
+ <td class="paramname"><em>pFormat</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>ndef</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xColorItem *&#160;</td>
+ <td class="paramname"><em>pdef</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Indexed color visuals are not yet supported. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3a9285c518b050130e40b7e147309350"></a><!-- doxytag: member="dmxpict.h::dmxValidatePicture" ref="a3a9285c518b050130e40b7e147309350" args="(PicturePtr pPicture, Mask mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxValidatePicture </td>
+ <td>(</td>
+ <td class="paramtype">PicturePtr&#160;</td>
+ <td class="paramname"><em>pPicture</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Mask&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Validate the picture's attributes before rendering to it. Update any picture attributes that have been changed by one of the higher layers. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">DMX_GET_PICT_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a>, and <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture()</a>, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, and <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxpict_8h.html">dmxpict.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxpict_8h_source.html b/hw/dmx/doc/html/dmxpict_8h_source.html
new file mode 100644
index 0000000..7c9716b
--- /dev/null
+++ b/hw/dmx/doc/html/dmxpict_8h_source.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxpict_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxpict.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxpict_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00041"></a>00041 <span class="preprocessor">#ifndef DMXPICT_H</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#define DMXPICT_H</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00045"></a><a class="code" href="struct__dmxPictPriv.html">00045</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxPictPriv.html">_dmxPictPriv</a> {
+<a name="l00046"></a><a class="code" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">00046</a> Picture <a class="code" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">pict</a>;
+<a name="l00047"></a><a class="code" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">00047</a> Mask <a class="code" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">savedMask</a>;
+<a name="l00049"></a>00049 } <a class="code" href="dmxpict_8h.html#ab9d490e5079b84da8b60bf0aadd4b10e">dmxPictPrivRec</a>, *<a class="code" href="dmxpict_8h.html#af8d6ee7f8278532ad8b810f448d1cca3">dmxPictPrivPtr</a>;
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051
+<a name="l00053"></a><a class="code" href="struct__dmxGlyphPriv.html">00053</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> {
+<a name="l00054"></a><a class="code" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">00054</a> GlyphSet *<a class="code" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">glyphSets</a>;
+<a name="l00055"></a>00055 } <a class="code" href="dmxpict_8h.html#a9861086a35576e59fe0f9306c4e2588d">dmxGlyphPrivRec</a>, *<a class="code" href="dmxpict_8h.html#a269ea3cc32b511169336925123d1558d">dmxGlyphPrivPtr</a>;
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057
+<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a76cabef9d3047d8f514fb6e17b951145">dmxInitRender</a>(<span class="keywordtype">void</span>);
+<a name="l00059"></a>00059 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a93c956636d6aba1f2ce1cab637e00fff">dmxResetRender</a>(<span class="keywordtype">void</span>);
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit</a>(ScreenPtr pScreen,
+<a name="l00062"></a>00062 PictFormatPtr formats, <span class="keywordtype">int</span> nformats);
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList</a>(WindowPtr pWindow);
+<a name="l00065"></a>00065 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList</a>(WindowPtr pWindow);
+<a name="l00066"></a>00066
+<a name="l00067"></a>00067 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture</a>(PicturePtr pPicture);
+<a name="l00068"></a>00068 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture</a>(PicturePtr pPicture);
+<a name="l00069"></a>00069 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip</a>(PicturePtr pPicture, <span class="keywordtype">int</span> clipType,
+<a name="l00070"></a>00070 pointer value, <span class="keywordtype">int</span> n);
+<a name="l00071"></a>00071 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip</a>(PicturePtr pPicture);
+<a name="l00072"></a>00072 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxChangePicture</a>(PicturePtr pPicture, Mask mask);
+<a name="l00073"></a>00073 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture</a>(PicturePtr pPicture, Mask mask);
+<a name="l00074"></a>00074 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite</a>(CARD8 op,
+<a name="l00075"></a>00075 PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
+<a name="l00076"></a>00076 INT16 xSrc, INT16 ySrc,
+<a name="l00077"></a>00077 INT16 xMask, INT16 yMask,
+<a name="l00078"></a>00078 INT16 xDst, INT16 yDst,
+<a name="l00079"></a>00079 CARD16 width, CARD16 height);
+<a name="l00080"></a>00080 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a8a98dca5e23c501c44fa3e040e31d100">dmxGlyphs</a>(CARD8 op,
+<a name="l00081"></a>00081 PicturePtr pSrc, PicturePtr pDst,
+<a name="l00082"></a>00082 PictFormatPtr maskFormat,
+<a name="l00083"></a>00083 INT16 xSrc, INT16 ySrc,
+<a name="l00084"></a>00084 <span class="keywordtype">int</span> nlists, GlyphListPtr lists, GlyphPtr *glyphs);
+<a name="l00085"></a>00085 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects</a>(CARD8 op,
+<a name="l00086"></a>00086 PicturePtr pDst,
+<a name="l00087"></a>00087 xRenderColor *color,
+<a name="l00088"></a>00088 <span class="keywordtype">int</span> nRect, xRectangle *rects);
+<a name="l00089"></a>00089 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a5c81bdb404715c2318d3eda49e26fe68">dmxInitIndexed</a>(ScreenPtr pScreen, PictFormatPtr pFormat);
+<a name="l00090"></a>00090 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#aa63b1daaacc56332c04832198a9e30b7">dmxCloseIndexed</a>(ScreenPtr pScreen, PictFormatPtr pFormat);
+<a name="l00091"></a>00091 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a05292dc07650c6fb40e13640cfce0df6">dmxUpdateIndexed</a>(ScreenPtr pScreen, PictFormatPtr pFormat,
+<a name="l00092"></a>00092 <span class="keywordtype">int</span> ndef, xColorItem *pdef);
+<a name="l00093"></a>00093 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids</a>(CARD8 op,
+<a name="l00094"></a>00094 PicturePtr pSrc, PicturePtr pDst,
+<a name="l00095"></a>00095 PictFormatPtr maskFormat,
+<a name="l00096"></a>00096 INT16 xSrc, INT16 ySrc,
+<a name="l00097"></a>00097 <span class="keywordtype">int</span> ntrap, xTrapezoid *traps);
+<a name="l00098"></a>00098 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles</a>(CARD8 op,
+<a name="l00099"></a>00099 PicturePtr pSrc, PicturePtr pDst,
+<a name="l00100"></a>00100 PictFormatPtr maskFormat,
+<a name="l00101"></a>00101 INT16 xSrc, INT16 ySrc,
+<a name="l00102"></a>00102 <span class="keywordtype">int</span> ntri, xTriangle *tris);
+<a name="l00103"></a>00103 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip</a>(CARD8 op,
+<a name="l00104"></a>00104 PicturePtr pSrc, PicturePtr pDst,
+<a name="l00105"></a>00105 PictFormatPtr maskFormat,
+<a name="l00106"></a>00106 INT16 xSrc, INT16 ySrc,
+<a name="l00107"></a>00107 <span class="keywordtype">int</span> npoint, xPointFixed *points);
+<a name="l00108"></a>00108 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan</a>(CARD8 op,
+<a name="l00109"></a>00109 PicturePtr pSrc, PicturePtr pDst,
+<a name="l00110"></a>00110 PictFormatPtr maskFormat,
+<a name="l00111"></a>00111 INT16 xSrc, INT16 ySrc,
+<a name="l00112"></a>00112 <span class="keywordtype">int</span> npoint, xPointFixed *points);
+<a name="l00113"></a>00113
+<a name="l00114"></a>00114 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8c.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet</a>(<span class="keywordtype">int</span> idx, GlyphSetPtr glyphSet);
+<a name="l00115"></a>00115 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet</a>(ScreenPtr pScreen, GlyphSetPtr glyphSet);
+<a name="l00116"></a>00116 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxpict_8c.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture</a>(PicturePtr pPicture);
+<a name="l00117"></a>00117 <span class="keyword">extern</span> Bool <a class="code" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture</a>(PicturePtr pPicture);
+<a name="l00118"></a>00118
+<a name="l00120"></a><a class="code" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">00120</a> <span class="preprocessor">#define DMX_GET_PICT_PRIV(_pPict) \</span>
+<a name="l00121"></a>00121 <span class="preprocessor"> (dmxPictPrivPtr)dixLookupPrivate(&amp;(_pPict)-&gt;devPrivates, dmxPictPrivateKey)</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>
+<a name="l00124"></a><a class="code" href="dmxpict_8h.html#a326b29fc2f94bec3a92a7d2c801df449">00124</a> <span class="preprocessor">#define DMX_SET_GLYPH_PRIV(_pGlyph, _pPriv) \</span>
+<a name="l00125"></a>00125 <span class="preprocessor"> GlyphSetSetPrivate((_pGlyph), dmxGlyphSetPrivateKey, (_pPriv))</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>
+<a name="l00127"></a><a class="code" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">00127</a> <span class="preprocessor">#define DMX_GET_GLYPH_PRIV(_pGlyph) \</span>
+<a name="l00128"></a>00128 <span class="preprocessor"> (dmxGlyphPrivPtr)GlyphSetGetPrivate((_pGlyph), dmxGlyphSetPrivateKey)</span>
+<a name="l00129"></a>00129 <span class="preprocessor"></span>
+<a name="l00130"></a>00130 <span class="preprocessor">#endif </span><span class="comment">/* DMXPICT_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxpict_8h.html">dmxpict.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxpixmap_8c.html b/hw/dmx/doc/html/dmxpixmap_8c.html
new file mode 100644
index 0000000..3a9addc
--- /dev/null
+++ b/hw/dmx/doc/html/dmxpixmap_8c.html
@@ -0,0 +1,239 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxpixmap_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxpixmap.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;pixmapstr.h&quot;</code><br/>
+<code>#include &quot;servermd.h&quot;</code><br/>
+<code>#include &quot;privates.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8c.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">PixmapPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap</a> (ScreenPtr pScreen, int width, int height, int depth, unsigned usage_hint)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RegionPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8c.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion</a> (PixmapPtr pPixmap)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provides pixmap support. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab785500b50aa10eb1d76274688413770"></a><!-- doxytag: member="dmxpixmap.c::dmxBECreatePixmap" ref="ab785500b50aa10eb1d76274688413770" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECreatePixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a pixmap on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>, and <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa930f04f91d83243d3e6224f911bf9e8"></a><!-- doxytag: member="dmxpixmap.c::dmxBEFreePixmap" ref="aa930f04f91d83243d3e6224f911bf9e8" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreePixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the pixmap on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, and <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af943d5ec32fe35ccc74ae190b8d8bb3e"></a><!-- doxytag: member="dmxpixmap.c::dmxBitmapToRegion" ref="af943d5ec32fe35ccc74ae190b8d8bb3e" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegionPtr dmxBitmapToRegion </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create and return a region based on the pixmap pointed to by <em>pPixmap</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d26c08a4286c663250f61e63ffa3343"></a><!-- doxytag: member="dmxpixmap.c::dmxCreatePixmap" ref="a9d26c08a4286c663250f61e63ffa3343" args="(ScreenPtr pScreen, int width, int height, int depth, unsigned usage_hint)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PixmapPtr dmxCreatePixmap </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>depth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>usage_hint</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a pixmap for <em>pScreen</em> with the specified <em>width</em>, <em>height</em>, and <em>depth</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c602d928744ec2e7be73ef197fc9b12"></a><!-- doxytag: member="dmxpixmap.c::dmxDestroyPixmap" ref="a7c602d928744ec2e7be73ef197fc9b12" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxDestroyPixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the pixmap pointed to by <em>pPixmap</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf02a6e5ba85a356f09f66159e71a75"></a><!-- doxytag: member="dmxpixmap.c::dmxInitPixmap" ref="aacf02a6e5ba85a356f09f66159e71a75" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitPixmap </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize a private area in <em>pScreen</em> for pixmap information. </p>
+
+<p>References <a class="el" href="dmx_8h.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxpixmap_8c.html">dmxpixmap.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxpixmap_8h.html b/hw/dmx/doc/html/dmxpixmap_8h.html
new file mode 100644
index 0000000..0f5483b
--- /dev/null
+++ b/hw/dmx/doc/html/dmxpixmap_8h.html
@@ -0,0 +1,299 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxpixmap_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxpixmap.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;pixmapstr.h&quot;</code><br/>
+</div>
+<p><a href="dmxpixmap_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>(_pPix)&#160;&#160;&#160;(<a class="el" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a>)dixLookupPrivate(&amp;(_pPix)-&gt;devPrivates, dmxPixPrivateKey)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#af881d895a7a1cac8c226aa3aff5678c7">dmxPixPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#a33d23370f4af28113332cd6112de22f1">dmxPixPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">PixmapPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap</a> (ScreenPtr pScreen, int width, int height, int depth, unsigned usage_hint)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RegionPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap</a> (PixmapPtr pPixmap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap</a> (PixmapPtr pPixmap)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for pixmap support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxpixmap_8c.html">dmxpixmap.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="add8168a70114703a791f8d154d139e2a"></a><!-- doxytag: member="dmxpixmap.h::DMX_GET_PIXMAP_PRIV" ref="add8168a70114703a791f8d154d139e2a" args="(_pPix)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_PIXMAP_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pPix</td><td>)</td>
+ <td>&#160;&#160;&#160;(<a class="el" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a>)dixLookupPrivate(&amp;(_pPix)-&gt;devPrivates, dmxPixPrivateKey)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get pixmap private pointer. </p>
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, and <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a33d23370f4af28113332cd6112de22f1"></a><!-- doxytag: member="dmxpixmap.h::dmxPixPrivPtr" ref="a33d23370f4af28113332cd6112de22f1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a> * <a class="el" href="struct__dmxPixPriv.html">dmxPixPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af881d895a7a1cac8c226aa3aff5678c7"></a><!-- doxytag: member="dmxpixmap.h::dmxPixPrivRec" ref="af881d895a7a1cac8c226aa3aff5678c7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a> <a class="el" href="struct__dmxPixPriv.html">dmxPixPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pixmap private area. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab785500b50aa10eb1d76274688413770"></a><!-- doxytag: member="dmxpixmap.h::dmxBECreatePixmap" ref="ab785500b50aa10eb1d76274688413770" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECreatePixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a pixmap on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxBECreateResources()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxBERestoreRenderPict()</a>, and <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa930f04f91d83243d3e6224f911bf9e8"></a><!-- doxytag: member="dmxpixmap.h::dmxBEFreePixmap" ref="aa930f04f91d83243d3e6224f911bf9e8" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEFreePixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the pixmap on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxBEDestroyResources()</a>, <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, and <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af943d5ec32fe35ccc74ae190b8d8bb3e"></a><!-- doxytag: member="dmxpixmap.h::dmxBitmapToRegion" ref="af943d5ec32fe35ccc74ae190b8d8bb3e" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RegionPtr dmxBitmapToRegion </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create and return a region based on the pixmap pointed to by <em>pPixmap</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d26c08a4286c663250f61e63ffa3343"></a><!-- doxytag: member="dmxpixmap.h::dmxCreatePixmap" ref="a9d26c08a4286c663250f61e63ffa3343" args="(ScreenPtr pScreen, int width, int height, int depth, unsigned usage_hint)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PixmapPtr dmxCreatePixmap </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>width</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>height</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>depth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>usage_hint</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a pixmap for <em>pScreen</em> with the specified <em>width</em>, <em>height</em>, and <em>depth</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7c602d928744ec2e7be73ef197fc9b12"></a><!-- doxytag: member="dmxpixmap.h::dmxDestroyPixmap" ref="a7c602d928744ec2e7be73ef197fc9b12" args="(PixmapPtr pPixmap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxDestroyPixmap </td>
+ <td>(</td>
+ <td class="paramtype">PixmapPtr&#160;</td>
+ <td class="paramname"><em>pPixmap</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy the pixmap pointed to by <em>pPixmap</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf02a6e5ba85a356f09f66159e71a75"></a><!-- doxytag: member="dmxpixmap.h::dmxInitPixmap" ref="aacf02a6e5ba85a356f09f66159e71a75" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitPixmap </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize a private area in <em>pScreen</em> for pixmap information. </p>
+
+<p>References <a class="el" href="dmx_8h.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxpixmap_8h.html">dmxpixmap.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxpixmap_8h_source.html b/hw/dmx/doc/html/dmxpixmap_8h_source.html
new file mode 100644
index 0000000..3c52eaf
--- /dev/null
+++ b/hw/dmx/doc/html/dmxpixmap_8h_source.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxpixmap_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxpixmap.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxpixmap_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXPIXMAP_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXPIXMAP_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;pixmapstr.h&quot;</span>
+<a name="l00041"></a>00041
+<a name="l00043"></a><a class="code" href="struct__dmxPixPriv.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxPixPriv.html">_dmxPixPriv</a> {
+<a name="l00044"></a><a class="code" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">00044</a> Pixmap <a class="code" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">pixmap</a>;
+<a name="l00045"></a><a class="code" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">00045</a> XImage *<a class="code" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">detachedImage</a>;
+<a name="l00046"></a>00046 } <a class="code" href="dmxpixmap_8h.html#af881d895a7a1cac8c226aa3aff5678c7">dmxPixPrivRec</a>, *<a class="code" href="dmxpixmap_8h.html#a33d23370f4af28113332cd6112de22f1">dmxPixPrivPtr</a>;
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048
+<a name="l00049"></a>00049 <span class="keyword">extern</span> Bool <a class="code" href="dmxpixmap_8c.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap</a>(ScreenPtr pScreen);
+<a name="l00050"></a>00050
+<a name="l00051"></a>00051 <span class="keyword">extern</span> PixmapPtr <a class="code" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap</a>(ScreenPtr pScreen,
+<a name="l00052"></a>00052 <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height, <span class="keywordtype">int</span> depth,
+<a name="l00053"></a>00053 <span class="keywordtype">unsigned</span> usage_hint);
+<a name="l00054"></a>00054 <span class="keyword">extern</span> Bool <a class="code" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap</a>(PixmapPtr pPixmap);
+<a name="l00055"></a>00055 <span class="keyword">extern</span> RegionPtr <a class="code" href="dmxpixmap_8c.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion</a>(PixmapPtr pPixmap);
+<a name="l00056"></a>00056
+<a name="l00057"></a>00057 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap</a>(PixmapPtr pPixmap);
+<a name="l00058"></a>00058 <span class="keyword">extern</span> Bool <a class="code" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap</a>(PixmapPtr pPixmap);
+<a name="l00059"></a>00059
+<a name="l00061"></a><a class="code" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">00061</a> <span class="preprocessor">#define DMX_GET_PIXMAP_PRIV(_pPix) \</span>
+<a name="l00062"></a>00062 <span class="preprocessor"> (dmxPixPrivPtr)dixLookupPrivate(&amp;(_pPix)-&gt;devPrivates, dmxPixPrivateKey)</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a>00064 <span class="preprocessor">#endif </span><span class="comment">/* DMXPIXMAP_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxpixmap_8h.html">dmxpixmap.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxprint_8c.html b/hw/dmx/doc/html/dmxprint_8c.html
new file mode 100644
index 0000000..923129a
--- /dev/null
+++ b/hw/dmx/doc/html/dmxprint_8c.html
@@ -0,0 +1,741 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxprint_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxprint.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxconfig_8h_source.html">dmxconfig.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprint_8h_source.html">dmxprint.h</a>&quot;</code><br/>
+<code>#include &quot;parser.h&quot;</code><br/>
+<code>#include &lt;stdio.h&gt;</code><br/>
+<code>#include &lt;stdarg.h&gt;</code><br/>
+<code>#include &lt;ctype.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstack.html">stack</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a28323a9b43eda57024b02a22c998b0e7">dmxConfigIndent</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState</a> (int base, int comment, int step)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#ac839095403e872d1a2c5c5bf1fb84d34">dmxConfigPushComment</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a640bd88024bf58bbc7613804eadc23ef">dmxConfigPushStep</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput</a> (int addSpace, int doNewline, const char *comment, const char *format,...)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxConfigPrintComment</a> (<a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> p, int flag)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a39008636d8a4d4212908a608d17e4ea0">dmxConfigPrintTokenNopop</a> (<a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#ab7686b37f60596276e593fbc300e580a">dmxConfigPrintQuotedString</a> (const char *s)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString</a> (<a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> p, int quote)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair</a> (<a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> p, int addSpace)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay</a> (<a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall</a> (<a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption</a> (<a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam</a> (<a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub</a> (<a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual</a> (<a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxConfigPrint</a> (FILE *stream, <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#ae0a45c7fe5f9f4afb7e68856253350be">dmxConfigVirtualPrint</a> (FILE *stream, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static FILE *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a> = NULL</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a> = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a> = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static struct <a class="el" href="structstack.html">stack</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a85981501fbd26d90c517d5b98c76d6ec">stack</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static struct <a class="el" href="structstack.html">stack</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">initialStack</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support routines and helper functions to be used to pretty-print DMX configurations.</p>
+<p>Because the DMX configuration file parsing should be capable of being used in a stand-alone fashion (i.e., independent from the DMX server source tree), no dependencies on other DMX routines are made. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a28323a9b43eda57024b02a22c998b0e7"></a><!-- doxytag: member="dmxprint.c::dmxConfigIndent" ref="a28323a9b43eda57024b02a22c998b0e7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigIndent </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8e1ceb3caec6ac5eb7d05b18d13250be"></a><!-- doxytag: member="dmxprint.c::dmxConfigNewline" ref="a8e1ceb3caec6ac5eb7d05b18d13250be" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigNewline </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>, <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>, and <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxConfigVirtualPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a40c141ef8ec32df494f34b9ccb586652"></a><!-- doxytag: member="dmxprint.c::dmxConfigOutput" ref="a40c141ef8ec32df494f34b9ccb586652" args="(int addSpace, int doNewline, const char *comment, const char *format,...)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigOutput </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>addSpace</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>doNewline</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a28323a9b43eda57024b02a22c998b0e7">dmxConfigIndent()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#ac839095403e872d1a2c5c5bf1fb84d34">dmxConfigPushComment()</a>, <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxConfigPrintComment()</a>, <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>, <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, and <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acfbbca478338b0756a3a98db05c51a01"></a><!-- doxytag: member="dmxprint.c::dmxConfigPopState" ref="acfbbca478338b0756a3a98db05c51a01" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPopState </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structstack.html#ae523dc895d308415be2aa9a6b6bdd40e">stack::base</a>, <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxConfigFree()</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a>, <a class="el" href="structstack.html#a6f0c4fc768c3baa72d3ac9466defd42c">stack::next</a>, and <a class="el" href="dmxprint_8c.html#a85981501fbd26d90c517d5b98c76d6ec">stack</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeebcf1d84e771f9d64413521173d366a"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrint" ref="aeebcf1d84e771f9d64413521173d366a" args="(FILE *stream, DMXConfigEntryPtr entry)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigPrint </td>
+ <td>(</td>
+ <td class="paramtype">FILE *&#160;</td>
+ <td class="paramname"><em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>entry</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The configuration information in <em>entry</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used. </p>
+
+<p>References <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxConfigPrintComment()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">initialStack</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, and <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad2f603ef56a4db866fcb63a8c78e977e"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintComment" ref="ad2f603ef56a4db866fcb63a8c78e977e" args="(DMXConfigCommentPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintComment </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment::comment</a>, and <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7379c323195ec85a062d1d7db2fa07e1"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintDisplay" ref="a7379c323195ec85a062d1d7db2fa07e1" args="(DMXConfigDisplayPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a>, <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay::dim</a>, <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>, <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay::dname</a>, <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay::end</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a>, <a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">_DMXConfigDisplay::origin</a>, <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a>, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay::rootHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay::rootWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay::rootX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay::rootXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay::rootY</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay::rootYSign</a>, <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay::start</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6daa4d844ef2d80e3adcc82dba79e34a"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintOption" ref="a6daa4d844ef2d80e3adcc82dba79e34a" args="(DMXConfigOptionPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintOption </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken()</a>, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption::end</a>, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption::start</a>, <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5aec7187f1c5bed538fc446cbb61cc63"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintPair" ref="a5aec7187f1c5bed538fc446cbb61cc63" args="(DMXConfigPairPtr p, int addSpace)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxConfigPrintPair </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>addSpace</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair::comment</a>, <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>, <a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">_DMXConfigPair::token</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a>, <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>, and <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a68625f9e37aff73a2a4140662ddf8997"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintParam" ref="a68625f9e37aff73a2a4140662ddf8997" args="(DMXConfigParamPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintParam </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam::close</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken()</a>, <a class="el" href="dmxprint_8c.html#a39008636d8a4d4212908a608d17e4ea0">dmxConfigPrintTokenNopop()</a>, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam::end</a>, <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam::next</a>, <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam::open</a>, <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam::param</a>, and <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam::start</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab7686b37f60596276e593fbc300e580a"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintQuotedString" ref="ab7686b37f60596276e593fbc300e580a" args="(const char *s)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxConfigPrintQuotedString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>s</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a34972dd599132fc3dc322fa76ee60b8b"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintString" ref="a34972dd599132fc3dc322fa76ee60b8b" args="(DMXConfigStringPtr p, int quote)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintString </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>quote</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString::comment</a>, <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>, <a class="el" href="dmxprint_8c.html#ab7686b37f60596276e593fbc300e580a">dmxConfigPrintQuotedString()</a>, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a>, and <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>, <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4430af6fcc1433522052f4577c3ad0f8"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintSub" ref="a4430af6fcc1433522052f4577c3ad0f8" args="(DMXConfigSubPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub::comment</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxConfigOption</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxConfigParam</a>, <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxConfigPrintComment()</a>, <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>, <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>, <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxConfigWall</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a>, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, and <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7a5b3d510c5ee1e3e7aa12a84d243e77"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintToken" ref="a7a5b3d510c5ee1e3e7aa12a84d243e77" args="(DMXConfigTokenPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintToken </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>, <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0d3a4f6b21e174c7779cec1e7bc45458"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintTokenFlag" ref="a0d3a4f6b21e174c7779cec1e7bc45458" args="(DMXConfigTokenPtr p, int flag)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintTokenFlag </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>flag</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken::comment</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>, <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>, <a class="el" href="dmxprint_8c.html#a640bd88024bf58bbc7613804eadc23ef">dmxConfigPushStep()</a>, <a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">_DMXConfigToken::line</a>, and <a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">_DMXConfigToken::token</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken()</a>, and <a class="el" href="dmxprint_8c.html#a39008636d8a4d4212908a608d17e4ea0">dmxConfigPrintTokenNopop()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a39008636d8a4d4212908a608d17e4ea0"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintTokenNopop" ref="a39008636d8a4d4212908a608d17e4ea0" args="(DMXConfigTokenPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintTokenNopop </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f0c5119c35d7d20337b9a772f5761b7"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintVirtual" ref="a7f0c5119c35d7d20337b9a772f5761b7" args="(DMXConfigVirtualPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintVirtual </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">_DMXConfigVirtual::close</a>, <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual::dim</a>, <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>, <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>, <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken()</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, <a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">_DMXConfigVirtual::open</a>, <a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">_DMXConfigVirtual::start</a>, <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, <a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">_DMXConfigVirtual::vname</a>, <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>, <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a>, and <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, and <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxConfigVirtualPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a18c2fc381c3949d8740d06691b8c49a8"></a><!-- doxytag: member="dmxprint.c::dmxConfigPrintWall" ref="a18c2fc381c3949d8740d06691b8c49a8" args="(DMXConfigWallPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPrintWall </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall::displayDim</a>, <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>, <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxConfigPrintToken()</a>, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall::end</a>, <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a>, <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall::start</a>, and <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall::wallDim</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac839095403e872d1a2c5c5bf1fb84d34"></a><!-- doxytag: member="dmxprint.c::dmxConfigPushComment" ref="ac839095403e872d1a2c5c5bf1fb84d34" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPushComment </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structstack.html#aab48b0e87fe50c07ec5a9ca59c8fb671">stack::comment</a>, and <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acf88c97e19872aeccfceacb4782e15ec"></a><!-- doxytag: member="dmxprint.c::dmxConfigPushState" ref="acf88c97e19872aeccfceacb4782e15ec" args="(int base, int comment, int step)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPushState </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>base</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>comment</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>step</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="structstack.html#ae523dc895d308415be2aa9a6b6bdd40e">stack::base</a>, <a class="el" href="structstack.html#aab48b0e87fe50c07ec5a9ca59c8fb671">stack::comment</a>, <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxConfigAlloc()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a>, <a class="el" href="dmxprint_8c.html#a85981501fbd26d90c517d5b98c76d6ec">stack</a>, and <a class="el" href="structstack.html#ae67df02e6190f43909f5e055425d237e">stack::step</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a640bd88024bf58bbc7613804eadc23ef"></a><!-- doxytag: member="dmxprint.c::dmxConfigPushStep" ref="a640bd88024bf58bbc7613804eadc23ef" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPushStep </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a>, and <a class="el" href="structstack.html#ae67df02e6190f43909f5e055425d237e">stack::step</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0a45c7fe5f9f4afb7e68856253350be"></a><!-- doxytag: member="dmxprint.c::dmxConfigVirtualPrint" ref="ae0a45c7fe5f9f4afb7e68856253350be" args="(FILE *stream, DMXConfigVirtualPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigVirtualPrint </td>
+ <td>(</td>
+ <td class="paramtype">FILE *&#160;</td>
+ <td class="paramname"><em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The configuration information in <em>p</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used. </p>
+
+<p>References <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">initialStack</a>, <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">dmxConfigSelectCallback()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a913a30aaae68bab9c263fd5208679335"></a><!-- doxytag: member="dmxprint.c::indent" ref="a913a30aaae68bab9c263fd5208679335" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">indent</a> = 0<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a28323a9b43eda57024b02a22c998b0e7">dmxConfigIndent()</a>, <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, <a class="el" href="dmxprint_8c.html#ac839095403e872d1a2c5c5bf1fb84d34">dmxConfigPushComment()</a>, <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>, and <a class="el" href="dmxprint_8c.html#a640bd88024bf58bbc7613804eadc23ef">dmxConfigPushStep()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a32dfc14ba99dbdf0241b5e2e42553fec"></a><!-- doxytag: member="dmxprint.c::initialStack" ref="a32dfc14ba99dbdf0241b5e2e42553fec" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structstack.html">stack</a> <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">initialStack</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, and <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxConfigVirtualPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1910d262855b71da353ed0d07a6c7823"></a><!-- doxytag: member="dmxprint.c::pos" ref="a1910d262855b71da353ed0d07a6c7823" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a> = 0<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxConfigVirtualPrint()</a>, and <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a85981501fbd26d90c517d5b98c76d6ec"></a><!-- doxytag: member="dmxprint.c::stack" ref="a85981501fbd26d90c517d5b98c76d6ec" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structstack.html">stack</a> * <a class="el" href="structstack.html">stack</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, and <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a41b4e3023940f8a5c705ea2863f2cd09"></a><!-- doxytag: member="dmxprint.c::str" ref="a41b4e3023940f8a5c705ea2863f2cd09" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">FILE* <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a> = NULL<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#a28323a9b43eda57024b02a22c998b0e7">dmxConfigIndent()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxConfigOutput()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxConfigReadFile()</a>, <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxConfigVirtualPrint()</a>, <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>, and <a class="el" href="vdltodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxprint_8c.html">dmxprint.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxprint_8h.html b/hw/dmx/doc/html/dmxprint_8h.html
new file mode 100644
index 0000000..5c7840b
--- /dev/null
+++ b/hw/dmx/doc/html/dmxprint_8h.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxprint_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxprint.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxprint_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint</a> (FILE *<a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxConfigVirtualPrint</a> (FILE *<a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to DMX configuration file pretty-printer. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxprint_8c.html">dmxprint.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a1b8d004f3374959e5851689e058f8133"></a><!-- doxytag: member="dmxprint.h::dmxConfigPrint" ref="a1b8d004f3374959e5851689e058f8133" args="(FILE *str, DMXConfigEntryPtr entry)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigPrint </td>
+ <td>(</td>
+ <td class="paramtype">FILE *&#160;</td>
+ <td class="paramname"><em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td>
+ <td class="paramname"><em>entry</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The configuration information in <em>entry</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used. </p>
+
+<p>References <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxConfigComment</a>, <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxConfigLog()</a>, <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxConfigPrintComment()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">initialStack</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, and <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa41675fce5582dbfb44d7094b94efab9"></a><!-- doxytag: member="dmxprint.h::dmxConfigVirtualPrint" ref="aa41675fce5582dbfb44d7094b94efab9" args="(FILE *str, DMXConfigVirtualPtr p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxConfigVirtualPrint </td>
+ <td>(</td>
+ <td class="paramtype">FILE *&#160;</td>
+ <td class="paramname"><em>stream</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td>
+ <td class="paramname"><em>p</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The configuration information in <em>p</em> will be pretty-printed to the <em>stream</em>. If <em>stream</em> is NULL, then stdout will be used. </p>
+
+<p>References <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxConfigNewline()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">initialStack</a>, <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">pos</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">dmxConfigSelectCallback()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxprint_8h.html">dmxprint.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxprint_8h_source.html b/hw/dmx/doc/html/dmxprint_8h_source.html
new file mode 100644
index 0000000..404bea6
--- /dev/null
+++ b/hw/dmx/doc/html/dmxprint_8h_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxprint_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxprint.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxprint_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXPRINT_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXPRINT_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxConfigPrint</a>(FILE *<a class="code" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="code" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> entry);
+<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="dmxprint_8c.html#ae0a45c7fe5f9f4afb7e68856253350be">dmxConfigVirtualPrint</a>(FILE *<a class="code" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="code" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> p);
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxprint_8h.html">dmxprint.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxprop_8c.html b/hw/dmx/doc/html/dmxprop_8c.html
new file mode 100644
index 0000000..299c95a
--- /dev/null
+++ b/hw/dmx/doc/html/dmxprop_8c.html
@@ -0,0 +1,370 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxprop_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxprop.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprop_8h_source.html">dmxprop.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>&#160;&#160;&#160;&quot;DMX_NAME&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#a15bb16a878f80c6c8a7aec68aadf3444">DMX_IDENT</a>&#160;&#160;&#160;&quot;Xdmx&quot;</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#a45eb0051c6d317735f2bf3b64ddc43e1">dmxPropertyErrorHandler</a> (Display *dpy, XErrorEvent *ev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static const unsigned char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start, void *(*f)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *), void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Atom atom)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Atom atom)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *name)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>It is possible for one of the DMX "backend displays" to actually be smaller than the dimensions of the backend X server. Therefore, it is possible for more than one of the DMX "backend displays" to be physically located on the same backend X server. This situation must be detected so that cursor motion can be handled in an expected fashion.</p>
+<p>We could analyze the names used for the DMX "backend displays" (e.g., the names passed to the -display command-line parameter), but there are many possible names for a single X display, and failing to detect sameness leads to very unexpected results. Therefore, whenever the DMX server opens a window on a backend X server, a property value is queried and set on that backend to detect when another window is already open on that server.</p>
+<p>Further, it is possible that two different DMX server instantiations both have windows on the same physical backend X server. This case is also detected so that pointer input is not taken from that particular backend X server.</p>
+<p>The routines in this file handle the property management. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aa5cb343dc33f4f7e12652ca1298a2ed8"></a><!-- doxytag: member="dmxprop.c::DMX_ATOMNAME" ref="aa5cb343dc33f4f7e12652ca1298a2ed8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_ATOMNAME&#160;&#160;&#160;&quot;DMX_NAME&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Holds the window id of all DMX windows on the backend X server. </p>
+
+<p>Referenced by <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, and <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a15bb16a878f80c6c8a7aec68aadf3444"></a><!-- doxytag: member="dmxprop.c::DMX_IDENT" ref="a15bb16a878f80c6c8a7aec68aadf3444" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_IDENT&#160;&#160;&#160;&quot;Xdmx&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>The identification string of this DMX server </p>
+
+<p>Referenced by <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, and <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab3eb5317487025c8ba44312f16d675f7"></a><!-- doxytag: member="dmxprop.c::dmxPropertyCheckOtherServers" ref="ab3eb5317487025c8ba44312f16d675f7" args="(DMXScreenInfo *dmxScreen, Atom atom)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxPropertyCheckOtherServers </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Atom&#160;</td>
+ <td class="paramname"><em>atom</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns 0 if this is the only Xdmx session on the display; 1 otherwise. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#a15bb16a878f80c6c8a7aec68aadf3444">DMX_IDENT</a>, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxLogOutput()</a>, <a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxLogOutputWarning()</a>, <a class="el" href="dmxprop_8c.html#a45eb0051c6d317735f2bf3b64ddc43e1">dmxPropertyErrorHandler()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5e976d40a4af5d6cd99b69ead01d0dfb"></a><!-- doxytag: member="dmxprop.c::dmxPropertyCheckOtherWindows" ref="a5e976d40a4af5d6cd99b69ead01d0dfb" args="(DMXScreenInfo *dmxScreen, Atom atom)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* dmxPropertyCheckOtherWindows </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Atom&#160;</td>
+ <td class="paramname"><em>atom</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns NULL if this is the only Xdmx window on the display. Otherwise, returns a pointer to the dmxScreen of the other windows on the display. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmxprop_8c.html#a45eb0051c6d317735f2bf3b64ddc43e1">dmxPropertyErrorHandler()</a>, <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a97a10defd6ace86dae6cf8c8765bf0de"></a><!-- doxytag: member="dmxprop.c::dmxPropertyDisplay" ref="a97a10defd6ace86dae6cf8c8765bf0de" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPropertyDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns 0 if this is the only Xdmx session on the display; 1 otherwise. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>, <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">_DMXScreenInfo::shared</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a45eb0051c6d317735f2bf3b64ddc43e1"></a><!-- doxytag: member="dmxprop.c::dmxPropertyErrorHandler" ref="a45eb0051c6d317735f2bf3b64ddc43e1" args="(Display *dpy, XErrorEvent *ev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int dmxPropertyErrorHandler </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XErrorEvent *&#160;</td>
+ <td class="paramname"><em>ev</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, and <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5393154b62783c7ff9cb657acbf73cca"></a><!-- doxytag: member="dmxprop.c::dmxPropertyIdentifier" ref="a5393154b62783c7ff9cb657acbf73cca" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static const unsigned char* dmxPropertyIdentifier </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, and <a class="el" href="dmxprop_8c.html#a15bb16a878f80c6c8a7aec68aadf3444">DMX_IDENT</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>, and <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1353800f90c3a1f46d453caa71a41ab6"></a><!-- doxytag: member="dmxprop.c::dmxPropertyIterate" ref="a1353800f90c3a1f46d453caa71a41ab6" args="(DMXScreenInfo *start, void *(*f)(DMXScreenInfo *dmxScreen, void *), void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* dmxPropertyIterate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *(*)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *)&#160;</td>
+ <td class="paramname"><em>f</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Starting with the <em>start</em> screen, iterate over all of the screens on the same physical X server as <em>start</em>, calling <em>f</em> with the screen and the <em>closure</em>. (The common case is that <em>start</em> is the only DMX window on the backend X server.) </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">_DMXScreenInfo::next</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxBackendFindWindow()</a>, <a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxBackendGetEvent()</a>, <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>, <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>, <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxCommonMouOff()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, and <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad0a551002589f00b2bac2b081283bc83"></a><!-- doxytag: member="dmxprop.c::dmxPropertySameDisplay" ref="ad0a551002589f00b2bac2b081283bc83" args="(DMXScreenInfo *dmxScreen, const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPropertySameDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns 1 if the dmxScreen and the display in <em>name</em> are on the same display, or 0 otherwise. We can't just compare the display names because there can be multiple synonyms for the same display, some of which cannot be determined without accessing the display itself (e.g., domain aliases or machines with multiple NICs). </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa97527eeaaf0744a67a5c5d188daf8c2"></a><!-- doxytag: member="dmxprop.c::dmxPropertyWindow" ref="aa97527eeaaf0744a67a5c5d188daf8c2" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPropertyWindow </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Prints a log message if <em>dmxScreen</em> is on the same backend X server as some other DMX backend (output) screen. Modifies the property (<a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>) on the backend X server to reflect the creation of <em>dmxScreen</em>.</p>
+<p>The root window of the backend X server holds a list of window ids for all DMX windows (on this DMX server or some other DMX server).</p>
+<p>This list can then be iterated, and the property for each window can be examined. This property contains the following tuple (no quotes):</p>
+<p>"#DMX_IDENT:&lt;hostname running DMX&gt;:&lt;display name of DMX&gt;,&lt;screen number&gt;" </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">_DMXScreenInfo::next</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="ac49dfab9200d48f835ce64819c4fc878"></a><!-- doxytag: member="dmxprop.c::display" ref="ac49dfab9200d48f835ce64819c4fc878" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>, and <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxprop_8c.html">dmxprop.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxprop_8h.html b/hw/dmx/doc/html/dmxprop_8h.html
new file mode 100644
index 0000000..4f73624
--- /dev/null
+++ b/hw/dmx/doc/html/dmxprop_8h.html
@@ -0,0 +1,186 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxprop_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxprop.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxprop_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8h.html#a4c53640b27c787d65539555cc3bf3c57">dmxPropertyIterate</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start, void *(*f)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure), void *closure)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, const char *name)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for property support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxprop_8c.html">dmxprop.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a97a10defd6ace86dae6cf8c8765bf0de"></a><!-- doxytag: member="dmxprop.h::dmxPropertyDisplay" ref="a97a10defd6ace86dae6cf8c8765bf0de" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPropertyDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns 0 if this is the only Xdmx session on the display; 1 otherwise. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>, <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">_DMXScreenInfo::shared</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c53640b27c787d65539555cc3bf3c57"></a><!-- doxytag: member="dmxprop.h::dmxPropertyIterate" ref="a4c53640b27c787d65539555cc3bf3c57" args="(DMXScreenInfo *start, void *(*f)(DMXScreenInfo *dmxScreen, void *closure), void *closure)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* dmxPropertyIterate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *(*)(<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, void *closure)&#160;</td>
+ <td class="paramname"><em>f</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad0a551002589f00b2bac2b081283bc83"></a><!-- doxytag: member="dmxprop.h::dmxPropertySameDisplay" ref="ad0a551002589f00b2bac2b081283bc83" args="(DMXScreenInfo *dmxScreen, const char *name)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int dmxPropertySameDisplay </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Returns 1 if the dmxScreen and the display in <em>name</em> are on the same display, or 0 otherwise. We can't just compare the display names because there can be multiple synonyms for the same display, some of which cannot be determined without accessing the display itself (e.g., domain aliases or machines with multiple NICs). </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa97527eeaaf0744a67a5c5d188daf8c2"></a><!-- doxytag: member="dmxprop.h::dmxPropertyWindow" ref="aa97527eeaaf0744a67a5c5d188daf8c2" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxPropertyWindow </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Prints a log message if <em>dmxScreen</em> is on the same backend X server as some other DMX backend (output) screen. Modifies the property (<a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>) on the backend X server to reflect the creation of <em>dmxScreen</em>.</p>
+<p>The root window of the backend X server holds a list of window ids for all DMX windows (on this DMX server or some other DMX server).</p>
+<p>This list can then be iterated, and the property for each window can be examined. This property contains the following tuple (no quotes):</p>
+<p>"#DMX_IDENT:&lt;hostname running DMX&gt;:&lt;display name of DMX&gt;,&lt;screen number&gt;" </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">DMX_ATOMNAME</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxPropertyIdentifier()</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, <a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">_DMXScreenInfo::next</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxprop_8h.html">dmxprop.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxprop_8h_source.html b/hw/dmx/doc/html/dmxprop_8h_source.html
new file mode 100644
index 0000000..c7c4618
--- /dev/null
+++ b/hw/dmx/doc/html/dmxprop_8h_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxprop_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxprop.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxprop_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002,2003 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXPROP_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXPROP_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxprop_8c.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxprop_8c.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> *<a class="code" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *start,
+<a name="l00042"></a>00042 <span class="keywordtype">void</span> *(*f)(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen,
+<a name="l00043"></a>00043 <span class="keywordtype">void</span> *closure),
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> *closure);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);
+<a name="l00046"></a>00046 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxprop_8h.html">dmxprop.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxscrinit_8c.html b/hw/dmx/doc/html/dmxscrinit_8c.html
new file mode 100644
index 0000000..61aaa14
--- /dev/null
+++ b/hw/dmx/doc/html/dmxscrinit_8c.html
@@ -0,0 +1,415 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxscrinit_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxscrinit.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxshadow_8h_source.html">dmxshadow.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxscrinit_8h_source.html">dmxscrinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcursor_8h_source.html">dmxcursor.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgc_8h_source.html">dmxgc.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxgcops_8h_source.html">dmxgcops.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxfont_8h_source.html">dmxfont.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcmap_8h_source.html">dmxcmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprop_8h_source.html">dmxprop.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxdpms_8h_source.html">dmxdpms.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&quot;</code><br/>
+<code>#include &quot;fb.h&quot;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;micmap.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen</a> (int idx, ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen</a> (ScreenPtr pScreen, int what)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit</a> (int idx, ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit</a> (int idx, ScreenPtr pScreen, int argc, char *argv[])</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen</a> (ScreenPtr pScreen)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned long *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a1bed5fde9231f820a1aa25228649575b">dmxCursorGeneration</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevPrivateKeyRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for screen initialization. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a95af573befeeedfa4a7d15b574341c36"></a><!-- doxytag: member="dmxscrinit.c::dmxBECloseScreen" ref="a95af573befeeedfa4a7d15b574341c36" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECloseScreen </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Close the <em>pScreen</em> resources on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxdpms_8c.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo::noCursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>, <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>, <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a>, and <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, and <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a51bde87df35cd264d315d09e33c4f9e3"></a><!-- doxytag: member="dmxscrinit.c::dmxBEScreenInit" ref="a51bde87df35cd264d315d09e33c4f9e3" args="(int idx, ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBEScreenInit </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the parts of screen <em>idx</em> that require access to the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo::beBlackPixel</a>, <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo::beWhitePixel</a>, <a class="el" href="dmxdpms_8c.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>, <a class="el" href="dmxprop_8c.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo::noCursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo::shadow</a>, <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a>, and <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3a9963b8e65e9ffebe694c05260e530b"></a><!-- doxytag: member="dmxscrinit.c::dmxCloseScreen" ref="a3a9963b8e65e9ffebe694c05260e530b" args="(int idx, ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCloseScreen </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Close screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxfont_8c.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxResetFonts()</a>, <a class="el" href="dmxpict_8c.html#a93c956636d6aba1f2ce1cab637e00fff">dmxResetRender()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, and <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo::shadow</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af59f4754af961e2be5f6ef2ce4f5bfcc"></a><!-- doxytag: member="dmxscrinit.c::dmxSaveScreen" ref="af59f4754af961e2be5f6ef2ce4f5bfcc" args="(ScreenPtr pScreen, int what)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxSaveScreen </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>what</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a673d8a2c038f8ed0da5f910a72a5c4c2"></a><!-- doxytag: member="dmxscrinit.c::dmxScreenInit" ref="a673d8a2c038f8ed0da5f910a72a5c4c2" args="(int idx, ScreenPtr pScreen, int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxScreenInit </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxpixmap_8c.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmx_8h.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a>, <a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxcmap_8c.html#a5481a08a1030ecac42ff809a1c7d2139">dmxCreateDefColormap()</a>, <a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxscrinit_8c.html#a1bed5fde9231f820a1aa25228649575b">dmxCursorGeneration</a>, <a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxgcops_8c.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxgcops_8c.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxGetSpans()</a>, <a class="el" href="dmx_8h.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a>, <a class="el" href="dmxgc_8c.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC()</a>, <a class="el" href="dmxpixmap_8c.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap()</a>, <a class="el" href="dmxwindow_8c.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow()</a>, <a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxpict_8c.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxcursor_8c.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a>, <a class="el" href="dmxcursor_8c.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a>, <a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxfont_8c.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmx_8h.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxshadow_8c.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxfont_8c.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>, <a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, and <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo::shadow</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="af033a68c176abdaf96f094922d15d359"></a><!-- doxytag: member="dmxscrinit.c::dmxColormapPrivateKeyRec" ref="af033a68c176abdaf96f094922d15d359" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1bed5fde9231f820a1aa25228649575b"></a><!-- doxytag: member="dmxscrinit.c::dmxCursorGeneration" ref="a1bed5fde9231f820a1aa25228649575b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long* <a class="el" href="dmxscrinit_8c.html#a1bed5fde9231f820a1aa25228649575b">dmxCursorGeneration</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e2a5b2ae34073156aef6b406552657f"></a><!-- doxytag: member="dmxscrinit.c::dmxFontPrivateIndex" ref="a4e2a5b2ae34073156aef6b406552657f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxscrinit_8c.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Private index for Fonts </p>
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9aef85f2d27fb4a444c0a24ff953db57"></a><!-- doxytag: member="dmxscrinit.c::dmxGCPrivateKeyRec" ref="a9aef85f2d27fb4a444c0a24ff953db57" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxGCPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f7aaf448bb3a6c12bccf07600bb1d52"></a><!-- doxytag: member="dmxscrinit.c::dmxGeneration" ref="a4f7aaf448bb3a6c12bccf07600bb1d52" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxConsoleUpdatePosition()</a>, <a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxMakeUniqueDeviceName()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a82e1e514bdfabd9d2d898a5938018b06"></a><!-- doxytag: member="dmxscrinit.c::dmxGlyphSetPrivateKeyRec" ref="a82e1e514bdfabd9d2d898a5938018b06" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abf05e9930ee1c563f28664a2e425eabe"></a><!-- doxytag: member="dmxscrinit.c::dmxPictPrivateKeyRec" ref="abf05e9930ee1c563f28664a2e425eabe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxPictPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af773380733836d74aa67be0d75614fe4"></a><!-- doxytag: member="dmxscrinit.c::dmxPixPrivateKeyRec" ref="af773380733836d74aa67be0d75614fe4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxPixPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a28f509d7976acb88156303dd4231b463"></a><!-- doxytag: member="dmxscrinit.c::dmxScreenPrivateKeyRec" ref="a28f509d7976acb88156303dd4231b463" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acb038e21fd8e5d160e62e63b339f27af"></a><!-- doxytag: member="dmxscrinit.c::dmxWinPrivateKeyRec" ref="acb038e21fd8e5d160e62e63b339f27af" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevPrivateKeyRec <a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxscrinit_8h.html b/hw/dmx/doc/html/dmxscrinit_8h.html
new file mode 100644
index 0000000..ad7b870
--- /dev/null
+++ b/hw/dmx/doc/html/dmxscrinit_8h.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxscrinit_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxscrinit.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;scrnintstr.h&quot;</code><br/>
+</div>
+<p><a href="dmxscrinit_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit</a> (int idx, ScreenPtr pScreen, int argc, char *argv[])</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit</a> (int idx, ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen</a> (ScreenPtr pScreen)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for screen initialization. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a95af573befeeedfa4a7d15b574341c36"></a><!-- doxytag: member="dmxscrinit.h::dmxBECloseScreen" ref="a95af573befeeedfa4a7d15b574341c36" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBECloseScreen </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Close the <em>pScreen</em> resources on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="dmxdpms_8c.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo::noCursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>, <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>, <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a>, and <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, and <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a51bde87df35cd264d315d09e33c4f9e3"></a><!-- doxytag: member="dmxscrinit.h::dmxBEScreenInit" ref="a51bde87df35cd264d315d09e33c4f9e3" args="(int idx, ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxBEScreenInit </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the parts of screen <em>idx</em> that require access to the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo::beBlackPixel</a>, <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo::beWhitePixel</a>, <a class="el" href="dmxdpms_8c.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>, <a class="el" href="dmxprop_8c.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo::noCursor</a>, <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo::shadow</a>, <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a>, and <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a673d8a2c038f8ed0da5f910a72a5c4c2"></a><!-- doxytag: member="dmxscrinit.h::dmxScreenInit" ref="a673d8a2c038f8ed0da5f910a72a5c4c2" args="(int idx, ScreenPtr pScreen, int argc, char *argv[])" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxScreenInit </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>idx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>argv</em>[]&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize screen number <em>idx</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxpixmap_8c.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmx_8h.html#af033a68c176abdaf96f094922d15d359">dmxColormapPrivateKeyRec</a>, <a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxcmap_8c.html#a5481a08a1030ecac42ff809a1c7d2139">dmxCreateDefColormap()</a>, <a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxscrinit_8c.html#a1bed5fde9231f820a1aa25228649575b">dmxCursorGeneration</a>, <a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxFontPrivateIndex</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxgcops_8c.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxgcops_8c.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxGetSpans()</a>, <a class="el" href="dmx_8h.html#a82e1e514bdfabd9d2d898a5938018b06">dmxGlyphSetPrivateKeyRec</a>, <a class="el" href="dmxgc_8c.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxInitGC()</a>, <a class="el" href="dmxpixmap_8c.html#aacf02a6e5ba85a356f09f66159e71a75">dmxInitPixmap()</a>, <a class="el" href="dmxwindow_8c.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow()</a>, <a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxpict_8c.html#a457aa4df6b01e88a26cc069094e4b07c">dmxPictureInit()</a>, <a class="el" href="dmxcursor_8c.html#aacf8d4857dd965073f62f10a53edcaa3">dmxPointerCursorFuncs</a>, <a class="el" href="dmxcursor_8c.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxPointerSpriteFuncs</a>, <a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxfont_8c.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmx_8h.html#a28f509d7976acb88156303dd4231b463">dmxScreenPrivateKeyRec</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmxShadowFB</a>, <a class="el" href="dmxshadow_8c.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxfont_8c.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>, <a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, and <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo::shadow</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxscrinit_8h.html">dmxscrinit.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxscrinit_8h_source.html b/hw/dmx/doc/html/dmxscrinit_8h_source.html
new file mode 100644
index 0000000..d47c2de
--- /dev/null
+++ b/hw/dmx/doc/html/dmxscrinit_8h_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxscrinit_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxscrinit.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxscrinit_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> * David H. Dawes &lt;dawes@xfree86.org&gt;</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef DMXSCRINIT_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXSCRINIT_H</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include &quot;scrnintstr.h&quot;</span>
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 <span class="keyword">extern</span> Bool <a class="code" href="dmxscrinit_8c.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit</a>(<span class="keywordtype">int</span> idx, ScreenPtr pScreen, <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]);
+<a name="l00044"></a>00044
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit</a>(<span class="keywordtype">int</span> idx, ScreenPtr pScreen);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen</a>(ScreenPtr pScreen);
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="preprocessor">#endif </span><span class="comment">/* DMXSCRINIT_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxscrinit_8h.html">dmxscrinit.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxshadow_8c.html b/hw/dmx/doc/html/dmxshadow_8c.html
new file mode 100644
index 0000000..a576443
--- /dev/null
+++ b/hw/dmx/doc/html/dmxshadow_8c.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxshadow_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxshadow.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxshadow_8h_source.html">dmxshadow.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxshadow_8c.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc</a> (ScreenPtr pScreen, shadowBufPtr pBuf)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for the shadow frame buffer. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="af2e3c9fd493e63137db512ab54bf1327"></a><!-- doxytag: member="dmxshadow.c::dmxShadowUpdateProc" ref="af2e3c9fd493e63137db512ab54bf1327" args="(ScreenPtr pScreen, shadowBufPtr pBuf)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxShadowUpdateProc </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">shadowBufPtr&#160;</td>
+ <td class="paramname"><em>pBuf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update the screen from the shadow frame buffer. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>, <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a>, and <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxshadow_8c.html">dmxshadow.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxshadow_8h.html b/hw/dmx/doc/html/dmxshadow_8h.html
new file mode 100644
index 0000000..573ad08
--- /dev/null
+++ b/hw/dmx/doc/html/dmxshadow_8h.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxshadow_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxshadow.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;shadow.h&quot;</code><br/>
+<code>#include &quot;scrnintstr.h&quot;</code><br/>
+</div>
+<p><a href="dmxshadow_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc</a> (ScreenPtr pScreen, shadowBufPtr pBuf)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for shadow framebuffer support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxshadow_8c.html">dmxshadow.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="af2e3c9fd493e63137db512ab54bf1327"></a><!-- doxytag: member="dmxshadow.h::dmxShadowUpdateProc" ref="af2e3c9fd493e63137db512ab54bf1327" args="(ScreenPtr pScreen, shadowBufPtr pBuf)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxShadowUpdateProc </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">shadowBufPtr&#160;</td>
+ <td class="paramname"><em>pBuf</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update the screen from the shadow frame buffer. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>, <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a>, and <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxshadow_8h.html">dmxshadow.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxshadow_8h_source.html b/hw/dmx/doc/html/dmxshadow_8h_source.html
new file mode 100644
index 0000000..37f92a7
--- /dev/null
+++ b/hw/dmx/doc/html/dmxshadow_8h_source.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxshadow_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxshadow.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxshadow_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> * David H. Dawes &lt;dawes@xfree86.org&gt;</span>
+<a name="l00032"></a>00032 <span class="comment"> *</span>
+<a name="l00033"></a>00033 <span class="comment"> */</span>
+<a name="l00034"></a>00034
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef DMXSHADOW_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define DMXSHADOW_H</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="preprocessor">#include &quot;shadow.h&quot;</span>
+<a name="l00042"></a>00042 <span class="preprocessor">#include &quot;scrnintstr.h&quot;</span>
+<a name="l00043"></a>00043
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxshadow_8c.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc</a>(ScreenPtr pScreen, shadowBufPtr pBuf);
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046 <span class="preprocessor">#endif </span><span class="comment">/* DMXSHADOW_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxshadow_8h.html">dmxshadow.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxsigio_8c.html b/hw/dmx/doc/html/dmxsigio_8c.html
new file mode 100644
index 0000000..4c4c18c
--- /dev/null
+++ b/hw/dmx/doc/html/dmxsigio_8c.html
@@ -0,0 +1,398 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxsigio_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxsigio.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsigio_8h_source.html">dmxsigio.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxevents_8h_source.html">dmxevents.h</a>&quot;</code><br/>
+<code>#include &lt;signal.h&gt;</code><br/>
+<code>#include &lt;unistd.h&gt;</code><br/>
+<code>#include &lt;fcntl.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#ac5d0c9848f853f8b026b1211b93f78b1">O_ASYNC</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>&#160;&#160;&#160;FNONBLK</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler</a> (int sig)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a71472c553212e8de00f36e072c378a6c">dmxSigioHook</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a0092cc73f6beb3d16b542a8527f1cbf6">dmxSigioUnhook</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int fd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#ac926cb5aa8d124192f381a9e05d49cb8">dmxFdCount</a> = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a> = TRUE</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Provides an interface for handling SIGIO signals for input devices. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="ac5d0c9848f853f8b026b1211b93f78b1"></a><!-- doxytag: member="dmxsigio.c::O_ASYNC" ref="ac5d0c9848f853f8b026b1211b93f78b1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define O_ASYNC&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, and <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a39d33ce33804efd4d52606d59071c6d8"></a><!-- doxytag: member="dmxsigio.c::O_NONBLOCK" ref="a39d33ce33804efd4d52606d59071c6d8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define O_NONBLOCK&#160;&#160;&#160;FNONBLK</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>, <a class="el" href="lnx-keyboard_8c.html#af405cce5d5bbc25171b425782f6e0b92">kbdLinuxOpenVT()</a>, <a class="el" href="lnx-ms_8h.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit()</a>, <a class="el" href="lnx-ps2_8h.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit()</a>, and <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a6651a6fe035f3ba2d8f09a730bc9c0cb"></a><!-- doxytag: member="dmxsigio.c::dmxSigioAdd" ref="a6651a6fe035f3ba2d8f09a730bc9c0cb" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSigioAdd </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">DMX_ACTIVESIGIO</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">DMX_NOSIGIO</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">DMX_USESIGIO</a>, <a class="el" href="dmxsigio_8c.html#ac926cb5aa8d124192f381a9e05d49cb8">dmxFdCount</a>, <a class="el" href="dmxsigio_8c.html#a71472c553212e8de00f36e072c378a6c">dmxSigioHook()</a>, <a class="el" href="dmxsigio_8c.html#ac5d0c9848f853f8b026b1211b93f78b1">O_ASYNC</a>, <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>, <a class="el" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">_DMXInputInfo::sigioAdded</a>, <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo::sigioFd</a>, <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, and <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ab74a514a7e18842b085aa001553137"></a><!-- doxytag: member="dmxsigio.c::dmxSigioBlock" ref="a0ab74a514a7e18842b085aa001553137" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioBlock </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Block SIGIO handling. </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aea86e1800e644fac954c6bbf6012c7aa"></a><!-- doxytag: member="dmxsigio.c::dmxSigioDisableInput" ref="aea86e1800e644fac954c6bbf6012c7aa" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioDisableInput </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Disable SIGIO handling. This removes the hanlder from the OS. </p>
+
+<p>References <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86b07a489751508e422ce60fc4ad332d"></a><!-- doxytag: member="dmxsigio.c::dmxSigioEnableInput" ref="a86b07a489751508e422ce60fc4ad332d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioEnableInput </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enable SIGIO handling. This instantiates the handler with the OS. </p>
+
+<p>References <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d77ce64f0495ed7bb1f5bfcde316371"></a><!-- doxytag: member="dmxsigio.c::dmxSigioHandler" ref="a7d77ce64f0495ed7bb1f5bfcde316371" args="(int sig)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSigioHandler </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>sig</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">_DMXLocalInputInfo::collect_events</a>, <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">DMX_ACTIVESIGIO</a>, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">DMX_NO_BLOCK</a>, <a class="el" href="dmxevents_8c.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxevents_8c.html#ac678be4d489b749fea88a8f0e9045499">dmxEnqueue()</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxevents_8c.html#ae08f1801d0215396a7f39bd083ddca11">dmxMotion()</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a>, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a71472c553212e8de00f36e072c378a6c">dmxSigioHook()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71472c553212e8de00f36e072c378a6c"></a><!-- doxytag: member="dmxsigio.c::dmxSigioHook" ref="a71472c553212e8de00f36e072c378a6c" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSigioHook </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3cccb6a8d72aaa0c7ac64f061d0b877"></a><!-- doxytag: member="dmxsigio.c::dmxSigioRegister" ref="ac3cccb6a8d72aaa0c7ac64f061d0b877" args="(DMXInputInfo *dmxInput, int fd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioRegister </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that the input device described in <em>dmxInput</em> will be using the file descriptor <em>fd</em> for SIGIO signals. Calls AddEnabledDevice ifi SIGIO handling has been enabled with <a class="el" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>. </p>
+
+<p>References <a class="el" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">DMX_MAX_SIGIO_FDS</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">DMX_USESIGIO</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo::sigioFd</a>, <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d563164ebc1ef320b68136f69bec3aa"></a><!-- doxytag: member="dmxsigio.c::dmxSigioRemove" ref="a9d563164ebc1ef320b68136f69bec3aa" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSigioRemove </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">DMX_ACTIVESIGIO</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">DMX_NOSIGIO</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">DMX_USESIGIO</a>, <a class="el" href="dmxsigio_8c.html#ac926cb5aa8d124192f381a9e05d49cb8">dmxFdCount</a>, <a class="el" href="dmxsigio_8c.html#a0092cc73f6beb3d16b542a8527f1cbf6">dmxSigioUnhook()</a>, <a class="el" href="dmxsigio_8c.html#ac5d0c9848f853f8b026b1211b93f78b1">O_ASYNC</a>, <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>, <a class="el" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">_DMXInputInfo::sigioAdded</a>, <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo::sigioFd</a>, <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, and <a class="el" href="dmxsigio_8h.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aadc7d1d3b885b68d326ccc8ae1c17d11"></a><!-- doxytag: member="dmxsigio.c::dmxSigioUnblock" ref="aadc7d1d3b885b68d326ccc8ae1c17d11" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioUnblock </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unblock SIGIO handling. </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0092cc73f6beb3d16b542a8527f1cbf6"></a><!-- doxytag: member="dmxsigio.c::dmxSigioUnhook" ref="a0092cc73f6beb3d16b542a8527f1cbf6" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSigioUnhook </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac447ef5c9a3aa88a5cb049ea0beecfd2"></a><!-- doxytag: member="dmxsigio.c::dmxSigioUnregister" ref="ac447ef5c9a3aa88a5cb049ea0beecfd2" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioUnregister </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Remove the notes that <em>dmxInput</em> is using any file descriptors for SIGIO signals. Calls RemoveEnabledDevice. </p>
+
+<p>References <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">DMX_NOSIGIO</a>, <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>, <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="ac926cb5aa8d124192f381a9e05d49cb8"></a><!-- doxytag: member="dmxsigio.c::dmxFdCount" ref="ac926cb5aa8d124192f381a9e05d49cb8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxsigio_8c.html#ac926cb5aa8d124192f381a9e05d49cb8">dmxFdCount</a> = 0<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, and <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ace65587735b6bff523a064f6ad1f978f"></a><!-- doxytag: member="dmxsigio.c::dmxInputEnabled" ref="ace65587735b6bff523a064f6ad1f978f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a> = TRUE<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput()</a>, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>, and <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxsigio_8c.html">dmxsigio.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxsigio_8h.html b/hw/dmx/doc/html/dmxsigio_8h.html
new file mode 100644
index 0000000..b1c0b52
--- /dev/null
+++ b/hw/dmx/doc/html/dmxsigio_8h.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxsigio_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxsigio.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxsigio_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8h.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8h.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, int fd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsigio_8h.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister</a> (<a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to SIGIO handling support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxsigio_8c.html">dmxsigio.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0ab74a514a7e18842b085aa001553137"></a><!-- doxytag: member="dmxsigio.h::dmxSigioBlock" ref="a0ab74a514a7e18842b085aa001553137" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioBlock </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Block SIGIO handling. </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aea86e1800e644fac954c6bbf6012c7aa"></a><!-- doxytag: member="dmxsigio.h::dmxSigioDisableInput" ref="aea86e1800e644fac954c6bbf6012c7aa" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioDisableInput </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Disable SIGIO handling. This removes the hanlder from the OS. </p>
+
+<p>References <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86b07a489751508e422ce60fc4ad332d"></a><!-- doxytag: member="dmxsigio.h::dmxSigioEnableInput" ref="a86b07a489751508e422ce60fc4ad332d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioEnableInput </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Enable SIGIO handling. This instantiates the handler with the OS. </p>
+
+<p>References <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a>, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a>, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxNumInputs</a>, and <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3cccb6a8d72aaa0c7ac64f061d0b877"></a><!-- doxytag: member="dmxsigio.h::dmxSigioRegister" ref="ac3cccb6a8d72aaa0c7ac64f061d0b877" args="(DMXInputInfo *dmxInput, int fd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioRegister </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Make a note that the input device described in <em>dmxInput</em> will be using the file descriptor <em>fd</em> for SIGIO signals. Calls AddEnabledDevice ifi SIGIO handling has been enabled with <a class="el" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput()</a>. </p>
+
+<p>References <a class="el" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">DMX_MAX_SIGIO_FDS</a>, <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">DMX_USESIGIO</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxInputEnabled</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo::sigioFd</a>, <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aadc7d1d3b885b68d326ccc8ae1c17d11"></a><!-- doxytag: member="dmxsigio.h::dmxSigioUnblock" ref="aadc7d1d3b885b68d326ccc8ae1c17d11" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioUnblock </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unblock SIGIO handling. </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac447ef5c9a3aa88a5cb049ea0beecfd2"></a><!-- doxytag: member="dmxsigio.h::dmxSigioUnregister" ref="ac447ef5c9a3aa88a5cb049ea0beecfd2" args="(DMXInputInfo *dmxInput)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSigioUnregister </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxInput</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Remove the notes that <em>dmxInput</em> is using any file descriptors for SIGIO signals. Calls RemoveEnabledDevice. </p>
+
+<p>References <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">DMX_NOSIGIO</a>, <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>, <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a>, and <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxsigio_8h.html">dmxsigio.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxsigio_8h_source.html b/hw/dmx/doc/html/dmxsigio_8h_source.html
new file mode 100644
index 0000000..3186470
--- /dev/null
+++ b/hw/dmx/doc/html/dmxsigio_8h_source.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxsigio_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxsigio.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxsigio_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXSIGIO_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSIGIO_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxSigioBlock</a>(<span class="keywordtype">void</span>);
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxSigioUnblock</a>(<span class="keywordtype">void</span>);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxSigioEnableInput</a>(<span class="keywordtype">void</span>);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#aea86e1800e644fac954c6bbf6012c7aa">dmxSigioDisableInput</a>(<span class="keywordtype">void</span>);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput, <span class="keywordtype">int</span> fd);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsigio_8c.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister</a>(<a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *dmxInput);
+<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxsigio_8h.html">dmxsigio.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxstat_8c.html b/hw/dmx/doc/html/dmxstat_8c.html
new file mode 100644
index 0000000..eb12f69
--- /dev/null
+++ b/hw/dmx/doc/html/dmxstat_8c.html
@@ -0,0 +1,424 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxstat_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxstat.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxstat_8h_source.html">dmxstat.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &lt;X11/Xos.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a75a8942c042ee0a2c387e61a28a59b94">DMXStatAvg</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a1a534cc2274afee02c883ac10ea9435f">usec</a> (struct timeval *stop, struct timeval *start)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#aeccae65bbc33f6b7717b2dc1a536d3cd">avg</a> (<a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a> *data, unsigned long *max)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate</a> (const char *interval, const char *displays)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxStatAlloc</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a23687b91d203902bb293ba64c391cee4">dmxStatFree</a> (<a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *pt)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue</a> (<a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a> *data, unsigned long value)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static CARD32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback</a> (OsTimerPtr timer, CARD32 t, pointer arg)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit</a> (void)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxStatDisplays</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static OsTimerPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8c.html#a4b07a4c989d24e5cad8f85a24d24406c">dmxStatTimer</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>The DMX server code is written to call <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a> whenever an XSync() might be necessary. However, since XSync() requires a two way communication with the other X server, eliminating unnecessary XSync() calls is a key performance optimization. Support for this optimization is provided in <em><a class="el" href="dmxsync_8c.html">dmxsync.c</a></em>. This file provides routines that evaluate this optimization by counting the number of XSync() calls and monitoring their latency. This functionality can be turned on using the -stat command-line parameter. </p>
+</div><hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a75a8942c042ee0a2c387e61a28a59b94"></a><!-- doxytag: member="dmxstat.c::DMXStatAvg" ref="a75a8942c042ee0a2c387e61a28a59b94" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a> <a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Used to compute a running average of value. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aeccae65bbc33f6b7717b2dc1a536d3cd"></a><!-- doxytag: member="dmxstat.c::avg" ref="aeccae65bbc33f6b7717b2dc1a536d3cd" args="(DMXStatAvg *data, unsigned long *max)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static unsigned long avg </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a> *&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long *&#160;</td>
+ <td class="paramname"><em>max</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXStatAvg.html#a361c10829231fd6805e59232321de2fe">_DMXStatAvg::count</a>, and <a class="el" href="struct__DMXStatAvg.html#a621cad02496227c50cc76aca84037b47">_DMXStatAvg::value</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3d01ce5487317c131c32e31f05489c58"></a><!-- doxytag: member="dmxstat.c::dmxStatActivate" ref="a3d01ce5487317c131c32e31f05489c58" args="(const char *interval, const char *displays)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatActivate </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>interval</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>displays</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn on XSync statistic gathering and printing. Print every <em>interval</em> seconds, with lines for the first <em>displays</em>. If <em>interval</em> is NULL, 1 will be used. If <em>displays</em> is NULL, 0 will be used (meaning a line for every display will be printed). Note that this function takes string arguments because it will usually be called from <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a> in <em><a class="el" href="dmxinit_8c.html">dmxinit.c</a></em>. </p>
+
+<p>References <a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxStatDisplays</a>, and <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5637440dfb18ba8ccf47bde3037d93aa"></a><!-- doxytag: member="dmxstat.c::dmxStatAlloc" ref="a5637440dfb18ba8ccf47bde3037d93aa" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>* dmxStatAlloc </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Allocate a <em>DMXStatInfo</em> structure. </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a218b57229dca87bd0564671d8f68f15f"></a><!-- doxytag: member="dmxstat.c::dmxStatCallback" ref="a218b57229dca87bd0564671d8f68f15f" args="(OsTimerPtr timer, CARD32 t, pointer arg)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static CARD32 dmxStatCallback </td>
+ <td>(</td>
+ <td class="paramtype">OsTimerPtr&#160;</td>
+ <td class="paramname"><em>timer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32&#160;</td>
+ <td class="paramname"><em>t</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>arg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxstat_8c.html#aeccae65bbc33f6b7717b2dc1a536d3cd">avg()</a>, <a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">_DMXStatInfo::bins</a>, <a class="el" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">DMX_STAT_BINS</a>, <a class="el" href="dmxstat_8h.html#a4cb43c9c7db58a10d8834a6b95a5c180">DMX_STAT_INTERVAL</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxDebug</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxLogCont()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxStatDisplays</a>, <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a>, <a class="el" href="struct__DMXStatInfo.html#a06c2832f03e95a2139099bbec7bd4794">_DMXStatInfo::oldSyncCount</a>, <a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">_DMXStatInfo::pending</a>, <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo::stat</a>, <a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">_DMXStatInfo::syncCount</a>, and <a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">_DMXStatInfo::usec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a23687b91d203902bb293ba64c391cee4"></a><!-- doxytag: member="dmxstat.c::dmxStatFree" ref="a23687b91d203902bb293ba64c391cee4" args="(DMXStatInfo *pt)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&#160;</td>
+ <td class="paramname"><em>pt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the memory used by a <em>DMXStatInfo</em> structure. </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48ed41878576dd3ff9212deaecb2cc1f"></a><!-- doxytag: member="dmxstat.c::dmxStatInit" ref="a48ed41878576dd3ff9212deaecb2cc1f" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatInit </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Try to initialize the statistic gathering and printing routines. Initialization only takes place if <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate</a> has already been called. We don't need the same generation protection that we used in dmxSyncInit because our timer is always on a queue -- hence, server generation will always free it. </p>
+
+<p>References <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a>, and <a class="el" href="dmxstat_8c.html#a4b07a4c989d24e5cad8f85a24d24406c">dmxStatTimer</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1098a195e40df685aaf2fbc238884027"></a><!-- doxytag: member="dmxstat.c::dmxStatSync" ref="a1098a195e40df685aaf2fbc238884027" args="(DMXScreenInfo *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatSync </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct timeval *&#160;</td>
+ <td class="paramname"><em>stop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct timeval *&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>pending</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Note that a XSync() was just done on <em>dmxScreen</em> with the <em>start</em> and <em>stop</em> times (from gettimeofday()) and the number of pending-but-not-yet-processed XSync requests. This routine is called from <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync</a> in <em><a class="el" href="dmxsync_8c.html">dmxsync.c</a></em> </p>
+
+<p>References <a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">_DMXStatInfo::bins</a>, <a class="el" href="dmxstat_8h.html#a8757af3ae82fef58d05e31523454065f">DMX_STAT_BIN0</a>, <a class="el" href="dmxstat_8h.html#a9c3e64f7fc0b5305bb6798b298ae6283">DMX_STAT_BINMULT</a>, <a class="el" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">DMX_STAT_BINS</a>, <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue()</a>, <a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">_DMXStatInfo::pending</a>, <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo::stat</a>, <a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">_DMXStatInfo::syncCount</a>, <a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">_DMXStatInfo::usec</a>, and <a class="el" href="dmxstat_8c.html#a1a534cc2274afee02c883ac10ea9435f">usec()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab17f1e926473a1df95e781c6c7a8e940"></a><!-- doxytag: member="dmxstat.c::dmxStatValue" ref="ab17f1e926473a1df95e781c6c7a8e940" args="(DMXStatAvg *data, unsigned long value)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxStatValue </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a> *&#160;</td>
+ <td class="paramname"><em>data</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>value</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXStatAvg.html#a361c10829231fd6805e59232321de2fe">_DMXStatAvg::count</a>, <a class="el" href="dmxstat_8h.html#ad38ec0be743fab83c032d231034d4d49">DMX_STAT_LENGTH</a>, <a class="el" href="struct__DMXStatAvg.html#a4ee50be7c55ef55ea0e8ca9edaf2ac52">_DMXStatAvg::pos</a>, and <a class="el" href="struct__DMXStatAvg.html#a621cad02496227c50cc76aca84037b47">_DMXStatAvg::value</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1a534cc2274afee02c883ac10ea9435f"></a><!-- doxytag: member="dmxstat.c::usec" ref="a1a534cc2274afee02c883ac10ea9435f" args="(struct timeval *stop, struct timeval *start)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static unsigned long usec </td>
+ <td>(</td>
+ <td class="paramtype">struct timeval *&#160;</td>
+ <td class="paramname"><em>stop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct timeval *&#160;</td>
+ <td class="paramname"><em>start</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the number of microseconds as an unsigned long. Unfortunately, this is only useful for intervals &lt; about 4 sec. </p>
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a9994506527c1e7aac2f30d4ed67ea4a5"></a><!-- doxytag: member="dmxstat.c::dmxStatDisplays" ref="a9994506527c1e7aac2f30d4ed67ea4a5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxStatDisplays</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate()</a>, and <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe67369da5135f53f058261d3c173927"></a><!-- doxytag: member="dmxstat.c::dmxStatInterval" ref="abe67369da5135f53f058261d3c173927" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxstat_8h.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Only for <a class="el" href="dmxstat_8c.html">dmxstat.c</a> and <a class="el" href="dmxsync_8c.html">dmxsync.c</a> </p>
+
+<p>Referenced by <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4b07a4c989d24e5cad8f85a24d24406c"></a><!-- doxytag: member="dmxstat.c::dmxStatTimer" ref="a4b07a4c989d24e5cad8f85a24d24406c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">OsTimerPtr <a class="el" href="dmxstat_8c.html#a4b07a4c989d24e5cad8f85a24d24406c">dmxStatTimer</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxstat_8c.html">dmxstat.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxstat_8h.html b/hw/dmx/doc/html/dmxstat_8h.html
new file mode 100644
index 0000000..cfe7825
--- /dev/null
+++ b/hw/dmx/doc/html/dmxstat_8h.html
@@ -0,0 +1,323 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxstat_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxstat.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxstat_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#ad38ec0be743fab83c032d231034d4d49">DMX_STAT_LENGTH</a>&#160;&#160;&#160;10</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a4cb43c9c7db58a10d8834a6b95a5c180">DMX_STAT_INTERVAL</a>&#160;&#160;&#160;1000</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">DMX_STAT_BINS</a>&#160;&#160;&#160;3</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a8757af3ae82fef58d05e31523454065f">DMX_STAT_BIN0</a>&#160;&#160;&#160;10000</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a9c3e64f7fc0b5305bb6798b298ae6283">DMX_STAT_BINMULT</a>&#160;&#160;&#160;100</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate</a> (const char *interval, const char *displays)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxStatAlloc</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a33d0c28b9f5f129f4328a714f1da1db7">dmxStatFree</a> (<a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxstat_8h.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for statistic gathering interface. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxstat_8c.html">dmxstat.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a8757af3ae82fef58d05e31523454065f"></a><!-- doxytag: member="dmxstat.h::DMX_STAT_BIN0" ref="a8757af3ae82fef58d05e31523454065f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_STAT_BIN0&#160;&#160;&#160;10000</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>us for bin[0] </p>
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9c3e64f7fc0b5305bb6798b298ae6283"></a><!-- doxytag: member="dmxstat.h::DMX_STAT_BINMULT" ref="a9c3e64f7fc0b5305bb6798b298ae6283" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_STAT_BINMULT&#160;&#160;&#160;100</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>multiplier for next bin[] </p>
+
+<p>Referenced by <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac0caef45e7427ea05d5425da659ac56"></a><!-- doxytag: member="dmxstat.h::DMX_STAT_BINS" ref="aac0caef45e7427ea05d5425da659ac56" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_STAT_BINS&#160;&#160;&#160;3</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>number of bins </p>
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4cb43c9c7db58a10d8834a6b95a5c180"></a><!-- doxytag: member="dmxstat.h::DMX_STAT_INTERVAL" ref="a4cb43c9c7db58a10d8834a6b95a5c180" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_STAT_INTERVAL&#160;&#160;&#160;1000</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>msec between printouts </p>
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad38ec0be743fab83c032d231034d4d49"></a><!-- doxytag: member="dmxstat.h::DMX_STAT_LENGTH" ref="ad38ec0be743fab83c032d231034d4d49" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_STAT_LENGTH&#160;&#160;&#160;10</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>number of events for moving average </p>
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a3d01ce5487317c131c32e31f05489c58"></a><!-- doxytag: member="dmxstat.h::dmxStatActivate" ref="a3d01ce5487317c131c32e31f05489c58" args="(const char *interval, const char *displays)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatActivate </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>interval</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>displays</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn on XSync statistic gathering and printing. Print every <em>interval</em> seconds, with lines for the first <em>displays</em>. If <em>interval</em> is NULL, 1 will be used. If <em>displays</em> is NULL, 0 will be used (meaning a line for every display will be printed). Note that this function takes string arguments because it will usually be called from <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a> in <em><a class="el" href="dmxinit_8c.html">dmxinit.c</a></em>. </p>
+
+<p>References <a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxStatDisplays</a>, and <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5637440dfb18ba8ccf47bde3037d93aa"></a><!-- doxytag: member="dmxstat.h::dmxStatAlloc" ref="a5637440dfb18ba8ccf47bde3037d93aa" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>* dmxStatAlloc </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Allocate a <em>DMXStatInfo</em> structure. </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a33d0c28b9f5f129f4328a714f1da1db7"></a><!-- doxytag: member="dmxstat.h::dmxStatFree" ref="a33d0c28b9f5f129f4328a714f1da1db7" args="(DMXStatInfo *)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatFree </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&#160;</td>
+ <td class="paramname"><em>pt</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Free the memory used by a <em>DMXStatInfo</em> structure. </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48ed41878576dd3ff9212deaecb2cc1f"></a><!-- doxytag: member="dmxstat.h::dmxStatInit" ref="a48ed41878576dd3ff9212deaecb2cc1f" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatInit </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Try to initialize the statistic gathering and printing routines. Initialization only takes place if <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate</a> has already been called. We don't need the same generation protection that we used in dmxSyncInit because our timer is always on a queue -- hence, server generation will always free it. </p>
+
+<p>References <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a>, and <a class="el" href="dmxstat_8c.html#a4b07a4c989d24e5cad8f85a24d24406c">dmxStatTimer</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1098a195e40df685aaf2fbc238884027"></a><!-- doxytag: member="dmxstat.h::dmxStatSync" ref="a1098a195e40df685aaf2fbc238884027" args="(DMXScreenInfo *dmxScreen, struct timeval *stop, struct timeval *start, unsigned long pending)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxStatSync </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct timeval *&#160;</td>
+ <td class="paramname"><em>stop</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct timeval *&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>pending</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Note that a XSync() was just done on <em>dmxScreen</em> with the <em>start</em> and <em>stop</em> times (from gettimeofday()) and the number of pending-but-not-yet-processed XSync requests. This routine is called from <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync</a> in <em><a class="el" href="dmxsync_8c.html">dmxsync.c</a></em> </p>
+
+<p>References <a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">_DMXStatInfo::bins</a>, <a class="el" href="dmxstat_8h.html#a8757af3ae82fef58d05e31523454065f">DMX_STAT_BIN0</a>, <a class="el" href="dmxstat_8h.html#a9c3e64f7fc0b5305bb6798b298ae6283">DMX_STAT_BINMULT</a>, <a class="el" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">DMX_STAT_BINS</a>, <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue()</a>, <a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">_DMXStatInfo::pending</a>, <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo::stat</a>, <a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">_DMXStatInfo::syncCount</a>, <a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">_DMXStatInfo::usec</a>, and <a class="el" href="dmxstat_8c.html#a1a534cc2274afee02c883ac10ea9435f">usec()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="abe67369da5135f53f058261d3c173927"></a><!-- doxytag: member="dmxstat.h::dmxStatInterval" ref="abe67369da5135f53f058261d3c173927" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxstat_8h.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Only for <a class="el" href="dmxstat_8c.html">dmxstat.c</a> and <a class="el" href="dmxsync_8c.html">dmxsync.c</a> </p>
+
+<p>Referenced by <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxStatActivate()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxstat_8h.html">dmxstat.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxstat_8h_source.html b/hw/dmx/doc/html/dmxstat_8h_source.html
new file mode 100644
index 0000000..37de8b4
--- /dev/null
+++ b/hw/dmx/doc/html/dmxstat_8h_source.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxstat_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxstat.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxstat_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXSTAT_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSTAT_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="dmxstat_8h.html#ad38ec0be743fab83c032d231034d4d49">00040</a> <span class="preprocessor">#define DMX_STAT_LENGTH 10 </span>
+<a name="l00041"></a><a class="code" href="dmxstat_8h.html#a4cb43c9c7db58a10d8834a6b95a5c180">00041</a> <span class="preprocessor">#define DMX_STAT_INTERVAL 1000 </span>
+<a name="l00042"></a><a class="code" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">00042</a> <span class="preprocessor">#define DMX_STAT_BINS 3 </span>
+<a name="l00043"></a><a class="code" href="dmxstat_8h.html#a8757af3ae82fef58d05e31523454065f">00043</a> <span class="preprocessor">#define DMX_STAT_BIN0 10000 </span>
+<a name="l00044"></a><a class="code" href="dmxstat_8h.html#a9c3e64f7fc0b5305bb6798b298ae6283">00044</a> <span class="preprocessor">#define DMX_STAT_BINMULT 100 </span>
+<a name="l00046"></a>00046 <span class="preprocessor">extern int dmxStatInterval; </span>
+<a name="l00047"></a>00047 <span class="preprocessor">extern void dmxStatActivate(const char *interval, const char *displays);</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="keyword">extern</span> <a class="code" href="struct__DMXStatInfo.html">DMXStatInfo</a> *<a class="code" href="dmxstat_8c.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxStatAlloc</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxstat_8c.html#a23687b91d203902bb293ba64c391cee4">dmxStatFree</a>(<a class="code" href="struct__DMXStatInfo.html">DMXStatInfo</a> *);
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxstat_8c.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxStatInit</a>(<span class="keywordtype">void</span>);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxstat_8c.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen,
+<a name="l00052"></a>00052 <span class="keyword">struct</span> timeval *stop, <span class="keyword">struct</span> timeval *start,
+<a name="l00053"></a>00053 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pending);
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxstat_8h.html">dmxstat.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxsync_8c.html b/hw/dmx/doc/html/dmxsync_8c.html
new file mode 100644
index 0000000..c033f89
--- /dev/null
+++ b/hw/dmx/doc/html/dmxsync_8c.html
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxsync_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxsync.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxstat_8h_source.html">dmxstat.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxlog_8h_source.html">dmxlog.h</a>&quot;</code><br/>
+<code>#include &lt;sys/time.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static CARD32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback</a> (OsTimerPtr timer, CARD32 time, pointer arg)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#aa5bb6eee83aba5bedf3c93fbb85af049">dmxSyncBlockHandler</a> (pointer blockData, OSTimePtr pTimeout, pointer pReadMask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a9329ae45fff6668caaca1fb93792b0b9">dmxSyncWakeupHandler</a> (pointer blockData, int result, pointer pReadMask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate</a> (const char *interval)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool now)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a> = 100</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static OsTimerPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxSyncTimer</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxSyncPending</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>The DMX server code is written to call <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a> whenever an XSync() might be necessary. However, since XSync() requires a two way communication with the other X server, eliminating unnecessary XSync() calls is a key performance optimization. Support for this optimization is provided here. Statistics about XSync() calls and latency are gathered in <em><a class="el" href="dmxstat_8c.html">dmxstat.c</a></em>.</p>
+<p>During the initial conversion from calling XSync() immediately to the XSync() batching method implemented in this file, it was noted that, out of more than 300 <em>x11perf</em> tests, 8 tests became more than 100 times faster, with 68 more than 50X faster, 114 more than 10X faster, and 181 more than 2X faster. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a3f47aabdd830525720f7a01acbac91ef"></a><!-- doxytag: member="dmxsync.c::dmxDoSync" ref="a3f47aabdd830525720f7a01acbac91ef" args="(DMXScreenInfo *dmxScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDoSync </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxStatInterval</a>, <a class="el" href="dmxstat_8c.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>, <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxSyncPending</a>, and <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo::needsSync</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab848762f4d2e30d31b87d3e8e10c5967"></a><!-- doxytag: member="dmxsync.c::dmxSync" ref="ab848762f4d2e30d31b87d3e8e10c5967" args="(DMXScreenInfo *dmxScreen, Bool now)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSync </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>now</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Request an XSync() to the display used by <em>dmxScreen</em>. If <em>now</em> is TRUE, call XSync() immediately instead of waiting for the next XSync() batching point. Note that if XSync() batching was deselected with <a class="el" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate()</a> before <a class="el" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a> was called, then no XSync() batching is performed and this function always calles XSync() immediately.</p>
+<p>(Note that this function uses TimerSet but works correctly in the face of a server generation. See the source for details.)</p>
+<p>If <em>dmxScreen</em> is <em>NULL</em>, then all pending syncs will be flushed immediately. </p>
+
+<p>References <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>, <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a>, <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxSyncPending</a>, <a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxSyncTimer</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo::needsSync</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxCheckFontPath()</a>, <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>, <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxextension_8h.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0a769161d6f8d88067a9cac16f9cf6f"></a><!-- doxytag: member="dmxsync.c::dmxSyncActivate" ref="ae0a769161d6f8d88067a9cac16f9cf6f" args="(const char *interval)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSyncActivate </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>interval</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Request the XSync() batching optimization with the specified <em>interval</em> (in mS). If the <em>interval</em> is 0, 100mS is used. If the <em>interval</em> is less than 0, then the XSync() batching optimization is not requested (e.g., so the -syncbatch -1 command line option can turn off the default 100mS XSync() batching).</p>
+<p>Note that the parameter to this routine is a string, since it will usually be called from <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a> in <em><a class="el" href="dmxinit_8c.html">dmxinit.c</a></em> </p>
+
+<p>References <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5bb6eee83aba5bedf3c93fbb85af049"></a><!-- doxytag: member="dmxsync.c::dmxSyncBlockHandler" ref="aa5bb6eee83aba5bedf3c93fbb85af049" args="(pointer blockData, OSTimePtr pTimeout, pointer pReadMask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSyncBlockHandler </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>blockData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">OSTimePtr&#160;</td>
+ <td class="paramname"><em>pTimeout</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pReadMask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxSyncTimer</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a00478eb7de1c84d98b41ca4c6d4b50e4"></a><!-- doxytag: member="dmxsync.c::dmxSyncCallback" ref="a00478eb7de1c84d98b41ca4c6d4b50e4" args="(OsTimerPtr timer, CARD32 time, pointer arg)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static CARD32 dmxSyncCallback </td>
+ <td>(</td>
+ <td class="paramtype">OsTimerPtr&#160;</td>
+ <td class="paramname"><em>timer</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD32&#160;</td>
+ <td class="paramname"><em>time</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>arg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxNumScreens</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxSyncPending</a>, and <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo::needsSync</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0b349896e58d4291d712e31121fdc0ac"></a><!-- doxytag: member="dmxsync.c::dmxSyncInit" ref="a0b349896e58d4291d712e31121fdc0ac" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSyncInit </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the XSync() batching optimization, but only if <a class="el" href="dmxsync_8h.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate</a> was last called with a non-negative value. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsync_8c.html#aa5bb6eee83aba5bedf3c93fbb85af049">dmxSyncBlockHandler()</a>, <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a>, and <a class="el" href="dmxsync_8c.html#a9329ae45fff6668caaca1fb93792b0b9">dmxSyncWakeupHandler()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9329ae45fff6668caaca1fb93792b0b9"></a><!-- doxytag: member="dmxsync.c::dmxSyncWakeupHandler" ref="a9329ae45fff6668caaca1fb93792b0b9" args="(pointer blockData, int result, pointer pReadMask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxSyncWakeupHandler </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>blockData</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>result</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>pReadMask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a01c45efcf0b2d9242b06e1e0fe42bd76"></a><!-- doxytag: member="dmxsync.c::dmxSyncInterval" ref="a01c45efcf0b2d9242b06e1e0fe42bd76" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a> = 100<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxsync_8h.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate()</a>, and <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6fb7fbcbe509b8ffb8637691925d46f2"></a><!-- doxytag: member="dmxsync.c::dmxSyncPending" ref="a6fb7fbcbe509b8ffb8637691925d46f2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxSyncPending</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9466911712aef6631a5b88d1bcb1afad"></a><!-- doxytag: member="dmxsync.c::dmxSyncTimer" ref="a9466911712aef6631a5b88d1bcb1afad" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">OsTimerPtr <a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxSyncTimer</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxsync_8c.html#aa5bb6eee83aba5bedf3c93fbb85af049">dmxSyncBlockHandler()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxsync_8c.html">dmxsync.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxsync_8h.html b/hw/dmx/doc/html/dmxsync_8h.html
new file mode 100644
index 0000000..fe570e7
--- /dev/null
+++ b/hw/dmx/doc/html/dmxsync_8h.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxsync_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxsync.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="dmxsync_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8h.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate</a> (const char *interval)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync</a> (<a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool now)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for sync support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxsync_8c.html">dmxsync.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab848762f4d2e30d31b87d3e8e10c5967"></a><!-- doxytag: member="dmxsync.h::dmxSync" ref="ab848762f4d2e30d31b87d3e8e10c5967" args="(DMXScreenInfo *dmxScreen, Bool now)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSync </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td>
+ <td class="paramname"><em>dmxScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>now</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Request an XSync() to the display used by <em>dmxScreen</em>. If <em>now</em> is TRUE, call XSync() immediately instead of waiting for the next XSync() batching point. Note that if XSync() batching was deselected with <a class="el" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate()</a> before <a class="el" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit()</a> was called, then no XSync() batching is performed and this function always calles XSync() immediately.</p>
+<p>(Note that this function uses TimerSet but works correctly in the face of a server generation. See the source for details.)</p>
+<p>If <em>dmxScreen</em> is <em>NULL</em>, then all pending syncs will be flushed immediately. </p>
+
+<p>References <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxFatal</a>, <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxGeneration</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>, <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a>, <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxSyncPending</a>, <a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxSyncTimer</a>, <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a>, and <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo::needsSync</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxBackendProcessInput()</a>, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxBackendUpdatePosition()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxCheckFontPath()</a>, <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxCommonMouOn()</a>, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxCommonSaveState()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxDestroyPicture()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>, <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxextension_8h.html#af7927d9de14425779c5de40312407203">dmxFlushPendingSyncs()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae0a769161d6f8d88067a9cac16f9cf6f"></a><!-- doxytag: member="dmxsync.h::dmxSyncActivate" ref="ae0a769161d6f8d88067a9cac16f9cf6f" args="(const char *interval)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSyncActivate </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>interval</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Request the XSync() batching optimization with the specified <em>interval</em> (in mS). If the <em>interval</em> is 0, 100mS is used. If the <em>interval</em> is less than 0, then the XSync() batching optimization is not requested (e.g., so the -syncbatch -1 command line option can turn off the default 100mS XSync() batching).</p>
+<p>Note that the parameter to this routine is a string, since it will usually be called from <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument</a> in <em><a class="el" href="dmxinit_8c.html">dmxinit.c</a></em> </p>
+
+<p>References <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">ddxProcessArgument()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0b349896e58d4291d712e31121fdc0ac"></a><!-- doxytag: member="dmxsync.h::dmxSyncInit" ref="a0b349896e58d4291d712e31121fdc0ac" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSyncInit </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the XSync() batching optimization, but only if <a class="el" href="dmxsync_8h.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate</a> was last called with a non-negative value. </p>
+
+<p>References <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxsync_8c.html#aa5bb6eee83aba5bedf3c93fbb85af049">dmxSyncBlockHandler()</a>, <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxSyncInterval</a>, and <a class="el" href="dmxsync_8c.html#a9329ae45fff6668caaca1fb93792b0b9">dmxSyncWakeupHandler()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxsync_8h.html">dmxsync.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxsync_8h_source.html b/hw/dmx/doc/html/dmxsync_8h_source.html
new file mode 100644
index 0000000..7a0db16
--- /dev/null
+++ b/hw/dmx/doc/html/dmxsync_8h_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxsync_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxsync.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxsync_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _DMXSYNC_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _DMXSYNC_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxSyncActivate</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *interval);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxSyncInit</a>(<span class="keywordtype">void</span>);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync</a>(<a class="code" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *dmxScreen, Bool now);
+<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxsync_8h.html">dmxsync.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxtodmx_8c.html b/hw/dmx/doc/html/dmxtodmx_8c.html
new file mode 100644
index 0000000..5774d94
--- /dev/null
+++ b/hw/dmx/doc/html/dmxtodmx_8c.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxtodmx_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>dmxtodmx.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxconfig_8h_source.html">dmxconfig.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprint_8h_source.html">dmxprint.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcompat_8h_source.html">dmxcompat.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxtodmx_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">yyparse</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">FILE *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxtodmx_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a></td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a><!-- doxytag: member="dmxtodmx.c::main" ref="a3c04138a5bfe5d72780bb7e82a18e627" args="(int argc, char **argv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a>, <a class="el" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxConfigPrint()</a>, <a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">yydebug</a>, and <a class="el" href="dmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">yyparse()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a847a2de5c1c28c9d7055a2b89ed7dad7"></a><!-- doxytag: member="dmxtodmx.c::yyparse" ref="a847a2de5c1c28c9d7055a2b89ed7dad7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int yyparse </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a46af646807e0797e72b6e8945e7ea88b"></a><!-- doxytag: member="dmxtodmx.c::yyin" ref="a46af646807e0797e72b6e8945e7ea88b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">FILE* <a class="el" href="xdmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxtodmx_8c.html">dmxtodmx.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxvisual_8c.html b/hw/dmx/doc/html/dmxvisual_8c.html
new file mode 100644
index 0000000..8f9cde9
--- /dev/null
+++ b/hw/dmx/doc/html/dmxvisual_8c.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxvisual_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxvisual.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxvisual_8h_source.html">dmxvisual.h</a>&quot;</code><br/>
+<code>#include &quot;scrnintstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Visual *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual</a> (ScreenPtr pScreen, VisualPtr pVisual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Visual *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID</a> (ScreenPtr pScreen, VisualID vid)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Colormap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxvisual_8c.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual</a> (ScreenPtr pScreen, Visual *visual)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for visuals. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aca13684e9357c96035388a924d8af570"></a><!-- doxytag: member="dmxvisual.c::dmxColormapFromDefaultVisual" ref="aca13684e9357c96035388a924d8af570" args="(ScreenPtr pScreen, Visual *visual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Colormap dmxColormapFromDefaultVisual </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Visual *&#160;</td>
+ <td class="paramname"><em>visual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the colormap for the <em>visual</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5adae45cafd52da17108cbfcdbd5d53c"></a><!-- doxytag: member="dmxvisual.c::dmxLookupVisual" ref="a5adae45cafd52da17108cbfcdbd5d53c" args="(ScreenPtr pScreen, VisualPtr pVisual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Visual* dmxLookupVisual </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VisualPtr&#160;</td>
+ <td class="paramname"><em>pVisual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the visual that matched <em>pVisual</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, and <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1abfce5d0ad66062cc75a5293c514499"></a><!-- doxytag: member="dmxvisual.c::dmxLookupVisualFromID" ref="a1abfce5d0ad66062cc75a5293c514499" args="(ScreenPtr pScreen, VisualID vid)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Visual* dmxLookupVisualFromID </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VisualID&#160;</td>
+ <td class="paramname"><em>vid</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the visual that matched the <em>vid</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxvisual_8c.html">dmxvisual.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxvisual_8h.html b/hw/dmx/doc/html/dmxvisual_8h.html
new file mode 100644
index 0000000..a411346
--- /dev/null
+++ b/hw/dmx/doc/html/dmxvisual_8h.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxvisual_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxvisual.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;scrnintstr.h&quot;</code><br/>
+</div>
+<p><a href="dmxvisual_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Visual *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual</a> (ScreenPtr pScreen, VisualPtr pVisual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Visual *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID</a> (ScreenPtr pScreen, VisualID vid)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Colormap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual</a> (ScreenPtr pScreen, Visual *visual)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for visual support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxvisual_8c.html">dmxvisual.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="aca13684e9357c96035388a924d8af570"></a><!-- doxytag: member="dmxvisual.h::dmxColormapFromDefaultVisual" ref="aca13684e9357c96035388a924d8af570" args="(ScreenPtr pScreen, Visual *visual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Colormap dmxColormapFromDefaultVisual </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Visual *&#160;</td>
+ <td class="paramname"><em>visual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the colormap for the <em>visual</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5adae45cafd52da17108cbfcdbd5d53c"></a><!-- doxytag: member="dmxvisual.h::dmxLookupVisual" ref="a5adae45cafd52da17108cbfcdbd5d53c" args="(ScreenPtr pScreen, VisualPtr pVisual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Visual* dmxLookupVisual </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VisualPtr&#160;</td>
+ <td class="paramname"><em>pVisual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the visual that matched <em>pVisual</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, and <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1abfce5d0ad66062cc75a5293c514499"></a><!-- doxytag: member="dmxvisual.h::dmxLookupVisualFromID" ref="a1abfce5d0ad66062cc75a5293c514499" args="(ScreenPtr pScreen, VisualID vid)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Visual* dmxLookupVisualFromID </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">VisualID&#160;</td>
+ <td class="paramname"><em>vid</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Return the visual that matched the <em>vid</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, and <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxvisual_8h.html">dmxvisual.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxvisual_8h_source.html b/hw/dmx/doc/html/dmxvisual_8h_source.html
new file mode 100644
index 0000000..1a82e8b
--- /dev/null
+++ b/hw/dmx/doc/html/dmxvisual_8h_source.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxvisual_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxvisual.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxvisual_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXVISUAL_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXVISUAL_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;scrnintstr.h&quot;</span>
+<a name="l00041"></a>00041
+<a name="l00042"></a>00042 <span class="keyword">extern</span> Visual *<a class="code" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual</a>(ScreenPtr pScreen, VisualPtr pVisual);
+<a name="l00043"></a>00043 <span class="keyword">extern</span> Visual *<a class="code" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID</a>(ScreenPtr pScreen, VisualID vid);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> Colormap <a class="code" href="dmxvisual_8c.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual</a>(ScreenPtr pScreen,
+<a name="l00045"></a>00045 Visual *visual);
+<a name="l00046"></a>00046
+<a name="l00047"></a>00047 <span class="preprocessor">#endif </span><span class="comment">/* DMXVISUAL_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxvisual_8h.html">dmxvisual.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxwindow_8c.html b/hw/dmx/doc/html/dmxwindow_8c.html
new file mode 100644
index 0000000..0b5e643
--- /dev/null
+++ b/hw/dmx/doc/html/dmxwindow_8c.html
@@ -0,0 +1,887 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxwindow_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxwindow.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmx_8h_source.html">dmx.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxsync_8h_source.html">dmxsync.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcmap_8h_source.html">dmxcmap.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxvisual_8h_source.html">dmxvisual.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&quot;</code><br/>
+<code>#include &quot;windowstr.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes</a> (WindowPtr pWindow, unsigned long *mask, XSetWindowAttributes *attribs)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow</a> (ScreenPtr pScreen, int x, int y, int w, int h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow</a> (WindowPtr pRoot, int x, int y, int w, int h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes</a> (WindowPtr pWindow, Colormap *cmap, Visual **visual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow</a> (WindowPtr pWindow, Bool doSync)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow</a> (WindowPtr pWindow, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes</a> (WindowPtr pWindow, unsigned long mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow</a> (WindowPtr pWindow, WindowPtr pOldNextSib)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a2d44bd3ba7edbd43508cca91982ce572">dmxWindowExposurePredicate</a> (Display *dpy, XEvent *ev, XPointer ptr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures</a> (WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow</a> (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow</a> (WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow</a> (WindowPtr pWindow, WindowPtr pPriorParent)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth</a> (WindowPtr pWindow, unsigned int width)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape</a> (WindowPtr pWindow, int kind)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file provides support for window-related functions. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a978ad158f0c814ca10dc965c5f7b74c2"></a><!-- doxytag: member="dmxwindow.c::dmxBEDestroyWindow" ref="a978ad158f0c814ca10dc965c5f7b74c2" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEDestroyWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5d63a05eab33981615afdf523a44c697"></a><!-- doxytag: member="dmxwindow.c::dmxChangeBorderWidth" ref="a5d63a05eab33981615afdf523a44c697" args="(WindowPtr pWindow, unsigned int width)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangeBorderWidth </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>width</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change border width for <em>pWindow</em> to <em>width</em> pixels. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae6f0ba304627ea760df9e9c53f7bbae6"></a><!-- doxytag: member="dmxwindow.c::dmxChangeWindowAttributes" ref="ae6f0ba304627ea760df9e9c53f7bbae6" args="(WindowPtr pWindow, unsigned long mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxChangeWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the window attributes of <em>pWindow</em>. </p>
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad78bdba42db62285cf174f072a63a81a"></a><!-- doxytag: member="dmxwindow.c::dmxCopyWindow" ref="ad78bdba42db62285cf174f072a63a81a" args="(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCopyWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointRec&#160;</td>
+ <td class="paramname"><em>ptOldOrg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RegionPtr&#160;</td>
+ <td class="paramname"><em>prgnSrc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Move <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">DMX_UPDATE_COPY</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afefa2121a2898700d285e77730a52c4d"></a><!-- doxytag: member="dmxwindow.c::dmxCreateAndRealizeWindow" ref="afefa2121a2898700d285e77730a52c4d" args="(WindowPtr pWindow, Bool doSync)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCreateAndRealizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>doSync</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function handles lazy window creation and realization. Window creation is handled by <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>. It also handles any stacking changes that have occured since the window was originally created by calling <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>. If the window is shaped, the shape is set on the back-end server by calling <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, and if the window has pictures (from RENDER) associated with it, those pictures are created on the back-end server by calling <a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>. If <em>doSync</em> is TRUE, then <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a> is called. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv::hasPict</a>, <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, and <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a85749ac991a90590437409977222d827"></a><!-- doxytag: member="dmxwindow.c::dmxCreateNonRootWindow" ref="a85749ac991a90590437409977222d827" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Window dmxCreateNonRootWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv::cmap</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv::visual</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5296d023014ce3d69c04557431785923"></a><!-- doxytag: member="dmxwindow.c::dmxCreateRootWindow" ref="a5296d023014ce3d69c04557431785923" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Window dmxCreateRootWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aebb0ce7ac51645832a20c7d6a7d21d9c"></a><!-- doxytag: member="dmxwindow.c::dmxCreateWindow" ref="aebb0ce7ac51645832a20c7d6a7d21d9c" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, then the actual creation and realization of the window is handled by <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>. </p>
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv::cmap</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>, <a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a>, <a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>, <a class="el" href="dmxwindow_8c.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxextension_8c.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources()</a>, <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv::hasPict</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">_DMXScreenInfo::rootWin</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv::visual</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25a0aafd36f68137e67a3e6d95b78f53"></a><!-- doxytag: member="dmxwindow.c::dmxDestroyWindow" ref="a25a0aafd36f68137e67a3e6d95b78f53" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxDestroyWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pWindow</em> on the back-end server. If any RENDER pictures were created, destroy them as well. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxpict_8c.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList()</a>, <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8d5f02a09348890a468a08464becbac3"></a><!-- doxytag: member="dmxwindow.c::dmxDoChangeWindowAttributes" ref="a8d5f02a09348890a468a08464becbac3" args="(WindowPtr pWindow, unsigned long *mask, XSetWindowAttributes *attribs)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDoChangeWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long *&#160;</td>
+ <td class="paramname"><em>mask</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XSetWindowAttributes *&#160;</td>
+ <td class="paramname"><em>attribs</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">DMX_GET_PIXMAP_PRIV</a>, and <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, and <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa3d29fd7e2f88855318fbc5cb739e1b9"></a><!-- doxytag: member="dmxwindow.c::dmxDoRestackWindow" ref="aa3d29fd7e2f88855318fbc5cb739e1b9" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDoRestackWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acf115ae2724d655dd75267f8b96f1986"></a><!-- doxytag: member="dmxwindow.c::dmxDoSetShape" ref="acf115ae2724d655dd75267f8b96f1986" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxDoSetShape </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8f054330062393aa409a31ec692cf0d"></a><!-- doxytag: member="dmxwindow.c::dmxGetDefaultWindowAttributes" ref="ab8f054330062393aa409a31ec692cf0d" args="(WindowPtr pWindow, Colormap *cmap, Visual **visual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetDefaultWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Colormap *&#160;</td>
+ <td class="paramname"><em>cmap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Visual **&#160;</td>
+ <td class="paramname"><em>visual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxvisual_8c.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, and <a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1c1a5296c1ef99d4dd829108903b21f"></a><!-- doxytag: member="dmxwindow.c::dmxInitWindow" ref="ad1c1a5296c1ef99d4dd829108903b21f" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitWindow </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the private area for the window functions. </p>
+
+<p>References <a class="el" href="dmx_8h.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adba873c51adf03b8af700c67fc6fba9b"></a><!-- doxytag: member="dmxwindow.c::dmxPositionWindow" ref="adba873c51adf03b8af700c67fc6fba9b" args="(WindowPtr pWindow, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxPositionWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the position of <em>pWindow</em> to be <em>x</em>, <em>y</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac75f5d6332a78eeac4e0e185cf326045"></a><!-- doxytag: member="dmxwindow.c::dmxRealizeWindow" ref="ac75f5d6332a78eeac4e0e185cf326045" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxRealizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Realize <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, the window is only realized when it at least partially overlaps the screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">DMX_UPDATE_REALIZE</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab07d7010858aa078f26396f420fdea8c"></a><!-- doxytag: member="dmxwindow.c::dmxReparentWindow" ref="ab07d7010858aa078f26396f420fdea8c" args="(WindowPtr pWindow, WindowPtr pPriorParent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxReparentWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pPriorParent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reparent <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">DMX_UPDATE_REPARENT</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a817739d4921329f1cf71f2af6fcacfc2"></a><!-- doxytag: member="dmxwindow.c::dmxResizeRootWindow" ref="a817739d4921329f1cf71f2af6fcacfc2" args="(WindowPtr pRoot, int x, int y, int w, int h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResizeRootWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pRoot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the location and size of the "root" window. Called from #dmxConfigureRootWindow. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af96b8583264e78a4c693c6f7ee887067"></a><!-- doxytag: member="dmxwindow.c::dmxResizeScreenWindow" ref="af96b8583264e78a4c693c6f7ee887067" args="(ScreenPtr pScreen, int x, int y, int w, int h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResizeScreenWindow </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the location and size of the "screen" window. Called from #dmxConfigureScreenWindow(). </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3811e381fef200b5cd3207478df66e1"></a><!-- doxytag: member="dmxwindow.c::dmxResizeWindow" ref="ac3811e381fef200b5cd3207478df66e1" args="(WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pSib</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Resize <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">DMX_UPDATE_RESIZE</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a21e147f295faee8e53eb162071dc66ad"></a><!-- doxytag: member="dmxwindow.c::dmxRestackWindow" ref="a21e147f295faee8e53eb162071dc66ad" args="(WindowPtr pWindow, WindowPtr pOldNextSib)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxRestackWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pOldNextSib</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Handle window restacking. The actual restacking occurs in <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">DMX_UPDATE_RESTACK</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa14e289855150f41c4f574afea427bb0"></a><!-- doxytag: member="dmxwindow.c::dmxSetShape" ref="aa14e289855150f41c4f574afea427bb0" args="(WindowPtr pWindow, int kind)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetShape </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>kind</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set shape of <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeab9f468cc2c9374658213ee90a234a0"></a><!-- doxytag: member="dmxwindow.c::dmxUnrealizeWindow" ref="aeab9f468cc2c9374658213ee90a234a0" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxUnrealizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unrealize <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">DMX_UPDATE_UNREALIZE</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d44bd3ba7edbd43508cca91982ce572"></a><!-- doxytag: member="dmxwindow.c::dmxWindowExposurePredicate" ref="a2d44bd3ba7edbd43508cca91982ce572" args="(Display *dpy, XEvent *ev, XPointer ptr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static Bool dmxWindowExposurePredicate </td>
+ <td>(</td>
+ <td class="paramtype">Display *&#160;</td>
+ <td class="paramname"><em>dpy</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>ev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XPointer&#160;</td>
+ <td class="paramname"><em>ptr</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a02a6991e5248012e287fe4be3a985926"></a><!-- doxytag: member="dmxwindow.c::dmxWindowExposures" ref="a02a6991e5248012e287fe4be3a985926" args="(WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxWindowExposures </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RegionPtr&#160;</td>
+ <td class="paramname"><em>prgn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RegionPtr&#160;</td>
+ <td class="paramname"><em>other_exposed</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Handle exposures on <em>pWindow</em>. Since window exposures are handled in DMX, the events that are generated by the back-end server are redundant, so we eat them here. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxwindow_8c.html#a2d44bd3ba7edbd43508cca91982ce572">dmxWindowExposurePredicate()</a>, <a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxwindow_8h.html b/hw/dmx/doc/html/dmxwindow_8h.html
new file mode 100644
index 0000000..44b7c44
--- /dev/null
+++ b/hw/dmx/doc/html/dmxwindow_8h.html
@@ -0,0 +1,949 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxwindow_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxwindow.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;windowstr.h&quot;</code><br/>
+</div>
+<p><a href="dmxwindow_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>(_pWin)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a35b887c43ad7855996b9aab8151fc479">DMX_WINDOW_FUNC_PROLOGUE</a>(_pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a9144b8f0cbe6f869da8a9ddcfbaa5f1b">DMX_WINDOW_FUNC_EPILOGUE</a>(_pGC)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a7eb75e49cc319067cfd50841378f8808">DMX_WINDOW_X1</a>(_pWin)&#160;&#160;&#160;((_pWin)-&gt;drawable.x - wBorderWidth(_pWin))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a744e6f0a3bd069a37c77b8bff83bf491">DMX_WINDOW_Y1</a>(_pWin)&#160;&#160;&#160;((_pWin)-&gt;drawable.y - wBorderWidth(_pWin))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ad52fe7cfe660be4536aabed92c0108d1">DMX_WINDOW_X2</a>(_pWin)&#160;&#160;&#160;((_pWin)-&gt;drawable.x + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.width)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a2d0ce76b2c1b06889444d93d5368c0ba">DMX_WINDOW_Y2</a>(_pWin)&#160;&#160;&#160;((_pWin)-&gt;drawable.y + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.height)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>(_pWin)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a5f9a6e44e1c8fbd89cf1d50b50fee122">dmxWinPrivRec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a3024ab3c0220000ce6ed1e93fd4880cc">dmxWinPrivPtr</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow</a> (ScreenPtr pScreen)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes</a> (WindowPtr pWindow, Colormap *cmap, Visual **visual)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow</a> (WindowPtr pWindow, Bool doSync)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow</a> (WindowPtr pWindow, int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes</a> (WindowPtr pWindow, unsigned long mask)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow</a> (WindowPtr pWindow, WindowPtr pOldNextSib)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures</a> (WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow</a> (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow</a> (WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow</a> (WindowPtr pWindow, WindowPtr pPriorParent)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth</a> (WindowPtr pWindow, unsigned int width)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow</a> (ScreenPtr pScreen, int x, int y, int w, int h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow</a> (WindowPtr pRoot, int x, int y, int w, int h)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow</a> (WindowPtr pWindow)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape</a> (WindowPtr pWindow, int kind)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface for window support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="afbcb941cf0707b8bfbe0ac5889123ea3"></a><!-- doxytag: member="dmxwindow.h::DMX_GET_WINDOW_PRIV" ref="afbcb941cf0707b8bfbe0ac5889123ea3" args="(_pWin)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_GET_WINDOW_PRIV</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pWin</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">((<a class="code" href="dmxwindow_8h.html#a3024ab3c0220000ce6ed1e93fd4880cc">dmxWinPrivPtr</a>) \
+ dixLookupPrivate(&amp;(_pWin)-&gt;devPrivates, <a class="code" href="dmx_8h.html#a7f019f89eaada79f813c4f969ef4ab00">dmxWinPrivateKey</a>))
+</pre></div><p>Get window private pointer. </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation()</a>, <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9144b8f0cbe6f869da8a9ddcfbaa5f1b"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_FUNC_EPILOGUE" ref="a9144b8f0cbe6f869da8a9ddcfbaa5f1b" args="(_pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_FUNC_EPILOGUE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGC</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ <a class="code" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a> pGCPriv = <a class="code" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>(_pGC); \
+ <a class="code" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>(funcs, &amp;<a class="code" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxGCFuncs</a>, pGCPriv, (_pGC)); \
+ <span class="keywordflow">if</span> (pGCPriv-&gt;<a class="code" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">ops</a>) \
+ <a class="code" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>(ops, &amp;<a class="code" href="dmxgc_8c.html#a4688e83670c13b303cba5309eaf23424">dmxGCOps</a>, pGCPriv, (_pGC)); \
+} <span class="keywordflow">while</span> (0)
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a35b887c43ad7855996b9aab8151fc479"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_FUNC_PROLOGUE" ref="a35b887c43ad7855996b9aab8151fc479" args="(_pGC)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_FUNC_PROLOGUE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pGC</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ <a class="code" href="struct__dmxGCPriv.html">dmxGCPrivPtr</a> pGCPriv = <a class="code" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">DMX_GET_GC_PRIV</a>(_pGC); \
+ <a class="code" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>(funcs, pGCPriv, (_pGC)); \
+ <span class="keywordflow">if</span> (pGCPriv-&gt;<a class="code" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">ops</a>) \
+ <a class="code" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>(ops, pGCPriv, (_pGC)); \
+} <span class="keywordflow">while</span> (0)
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a9d5f07cf04c9e32d918d57d096769a5d"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_OFFSCREEN" ref="a9d5f07cf04c9e32d918d57d096769a5d" args="(_pWin)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_OFFSCREEN</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pWin</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">(<a class="code" href="dmxwindow_8h.html#a7eb75e49cc319067cfd50841378f8808">DMX_WINDOW_X1</a>(_pWin) &gt;= (_pWin)-&gt;drawable.pScreen-&gt;width || \
+ <a class="code" href="dmxwindow_8h.html#a744e6f0a3bd069a37c77b8bff83bf491">DMX_WINDOW_Y1</a>(_pWin) &gt;= (_pWin)-&gt;drawable.pScreen-&gt;height || \
+ <a class="code" href="dmxwindow_8h.html#ad52fe7cfe660be4536aabed92c0108d1">DMX_WINDOW_X2</a>(_pWin) &lt;= 0 || \
+ <a class="code" href="dmxwindow_8h.html#a2d0ce76b2c1b06889444d93d5368c0ba">DMX_WINDOW_Y2</a>(_pWin) &lt;= 0)
+</pre></div>
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7eb75e49cc319067cfd50841378f8808"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_X1" ref="a7eb75e49cc319067cfd50841378f8808" args="(_pWin)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_X1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pWin</td><td>)</td>
+ <td>&#160;&#160;&#160;((_pWin)-&gt;drawable.x - wBorderWidth(_pWin))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad52fe7cfe660be4536aabed92c0108d1"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_X2" ref="ad52fe7cfe660be4536aabed92c0108d1" args="(_pWin)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_X2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pWin</td><td>)</td>
+ <td>&#160;&#160;&#160;((_pWin)-&gt;drawable.x + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.width)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a744e6f0a3bd069a37c77b8bff83bf491"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_Y1" ref="a744e6f0a3bd069a37c77b8bff83bf491" args="(_pWin)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_Y1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pWin</td><td>)</td>
+ <td>&#160;&#160;&#160;((_pWin)-&gt;drawable.y - wBorderWidth(_pWin))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2d0ce76b2c1b06889444d93d5368c0ba"></a><!-- doxytag: member="dmxwindow.h::DMX_WINDOW_Y2" ref="a2d0ce76b2c1b06889444d93d5368c0ba" args="(_pWin)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_WINDOW_Y2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">_pWin</td><td>)</td>
+ <td>&#160;&#160;&#160;((_pWin)-&gt;drawable.y + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.height)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a3024ab3c0220000ce6ed1e93fd4880cc"></a><!-- doxytag: member="dmxwindow.h::dmxWinPrivPtr" ref="a3024ab3c0220000ce6ed1e93fd4880cc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a> * <a class="el" href="struct__dmxWinPriv.html">dmxWinPrivPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5f9a6e44e1c8fbd89cf1d50b50fee122"></a><!-- doxytag: member="dmxwindow.h::dmxWinPrivRec" ref="a5f9a6e44e1c8fbd89cf1d50b50fee122" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a> <a class="el" href="struct__dmxWinPriv.html">dmxWinPrivRec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Window private area. </p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a978ad158f0c814ca10dc965c5f7b74c2"></a><!-- doxytag: member="dmxwindow.h::dmxBEDestroyWindow" ref="a978ad158f0c814ca10dc965c5f7b74c2" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxBEDestroyWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxBEDestroyWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5d63a05eab33981615afdf523a44c697"></a><!-- doxytag: member="dmxwindow.h::dmxChangeBorderWidth" ref="a5d63a05eab33981615afdf523a44c697" args="(WindowPtr pWindow, unsigned int width)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxChangeBorderWidth </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>width</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change border width for <em>pWindow</em> to <em>width</em> pixels. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae6f0ba304627ea760df9e9c53f7bbae6"></a><!-- doxytag: member="dmxwindow.h::dmxChangeWindowAttributes" ref="ae6f0ba304627ea760df9e9c53f7bbae6" args="(WindowPtr pWindow, unsigned long mask)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxChangeWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned long&#160;</td>
+ <td class="paramname"><em>mask</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the window attributes of <em>pWindow</em>. </p>
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad78bdba42db62285cf174f072a63a81a"></a><!-- doxytag: member="dmxwindow.h::dmxCopyWindow" ref="ad78bdba42db62285cf174f072a63a81a" args="(WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCopyWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DDXPointRec&#160;</td>
+ <td class="paramname"><em>ptOldOrg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RegionPtr&#160;</td>
+ <td class="paramname"><em>prgnSrc</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Move <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">DMX_UPDATE_COPY</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afefa2121a2898700d285e77730a52c4d"></a><!-- doxytag: member="dmxwindow.h::dmxCreateAndRealizeWindow" ref="afefa2121a2898700d285e77730a52c4d" args="(WindowPtr pWindow, Bool doSync)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxCreateAndRealizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Bool&#160;</td>
+ <td class="paramname"><em>doSync</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>This function handles lazy window creation and realization. Window creation is handled by <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>. It also handles any stacking changes that have occured since the window was originally created by calling <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>. If the window is shaped, the shape is set on the back-end server by calling <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, and if the window has pictures (from RENDER) associated with it, those pictures are created on the back-end server by calling <a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>. If <em>doSync</em> is TRUE, then <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a> is called. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv::hasPict</a>, <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, and <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5296d023014ce3d69c04557431785923"></a><!-- doxytag: member="dmxwindow.h::dmxCreateRootWindow" ref="a5296d023014ce3d69c04557431785923" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Window dmxCreateRootWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a>, <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aebb0ce7ac51645832a20c7d6a7d21d9c"></a><!-- doxytag: member="dmxwindow.h::dmxCreateWindow" ref="aebb0ce7ac51645832a20c7d6a7d21d9c" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxCreateWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, then the actual creation and realization of the window is handled by <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>. </p>
+
+<p>References <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a>, <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv::cmap</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>, <a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmxLazyWindowCreation</a>, <a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>, <a class="el" href="dmxwindow_8c.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxextension_8c.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources()</a>, <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv::hasPict</a>, <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a>, <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">_DMXScreenInfo::rootWin</a>, <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a>, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a>, <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a>, <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a>, <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a>, <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a>, <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv::visual</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25a0aafd36f68137e67a3e6d95b78f53"></a><!-- doxytag: member="dmxwindow.h::dmxDestroyWindow" ref="a25a0aafd36f68137e67a3e6d95b78f53" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxDestroyWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy <em>pWindow</em> on the back-end server. If any RENDER pictures were created, destroy them as well. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxpict_8c.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxDestroyPictureList()</a>, <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, and <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab8f054330062393aa409a31ec692cf0d"></a><!-- doxytag: member="dmxwindow.h::dmxGetDefaultWindowAttributes" ref="ab8f054330062393aa409a31ec692cf0d" args="(WindowPtr pWindow, Colormap *cmap, Visual **visual)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxGetDefaultWindowAttributes </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Colormap *&#160;</td>
+ <td class="paramname"><em>cmap</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Visual **&#160;</td>
+ <td class="paramname"><em>visual</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a>, <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">DMX_GET_COLORMAP_PRIV</a>, <a class="el" href="dmxvisual_8c.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, and <a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1c1a5296c1ef99d4dd829108903b21f"></a><!-- doxytag: member="dmxwindow.h::dmxInitWindow" ref="ad1c1a5296c1ef99d4dd829108903b21f" args="(ScreenPtr pScreen)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxInitWindow </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the private area for the window functions. </p>
+
+<p>References <a class="el" href="dmx_8h.html#acb038e21fd8e5d160e62e63b339f27af">dmxWinPrivateKeyRec</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adba873c51adf03b8af700c67fc6fba9b"></a><!-- doxytag: member="dmxwindow.h::dmxPositionWindow" ref="adba873c51adf03b8af700c67fc6fba9b" args="(WindowPtr pWindow, int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxPositionWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the position of <em>pWindow</em> to be <em>x</em>, <em>y</em>. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac75f5d6332a78eeac4e0e185cf326045"></a><!-- doxytag: member="dmxwindow.h::dmxRealizeWindow" ref="ac75f5d6332a78eeac4e0e185cf326045" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxRealizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Realize <em>pWindow</em> on the back-end server. If the lazy window creation optimization is enabled, the window is only realized when it at least partially overlaps the screen. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">DMX_UPDATE_REALIZE</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab07d7010858aa078f26396f420fdea8c"></a><!-- doxytag: member="dmxwindow.h::dmxReparentWindow" ref="ab07d7010858aa078f26396f420fdea8c" args="(WindowPtr pWindow, WindowPtr pPriorParent)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxReparentWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pPriorParent</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reparent <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">DMX_UPDATE_REPARENT</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a817739d4921329f1cf71f2af6fcacfc2"></a><!-- doxytag: member="dmxwindow.h::dmxResizeRootWindow" ref="a817739d4921329f1cf71f2af6fcacfc2" args="(WindowPtr pRoot, int x, int y, int w, int h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResizeRootWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pRoot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the location and size of the "root" window. Called from #dmxConfigureRootWindow. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af96b8583264e78a4c693c6f7ee887067"></a><!-- doxytag: member="dmxwindow.h::dmxResizeScreenWindow" ref="af96b8583264e78a4c693c6f7ee887067" args="(ScreenPtr pScreen, int x, int y, int w, int h)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResizeScreenWindow </td>
+ <td>(</td>
+ <td class="paramtype">ScreenPtr&#160;</td>
+ <td class="paramname"><em>pScreen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>h</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change the location and size of the "screen" window. Called from #dmxConfigureScreenWindow(). </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3811e381fef200b5cd3207478df66e1"></a><!-- doxytag: member="dmxwindow.h::dmxResizeWindow" ref="ac3811e381fef200b5cd3207478df66e1" args="(WindowPtr pWindow, int x, int y, unsigned int w, unsigned int h, WindowPtr pSib)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxResizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>h</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pSib</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Resize <em>pWindow</em> on the back-end server. Determine whether or not it is on or offscreen, and realize it if it is newly on screen and the lazy window creation optimization is enabled. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">DMX_UPDATE_RESIZE</a>, <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">DMX_WINDOW_OFFSCREEN</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a21e147f295faee8e53eb162071dc66ad"></a><!-- doxytag: member="dmxwindow.h::dmxRestackWindow" ref="a21e147f295faee8e53eb162071dc66ad" args="(WindowPtr pWindow, WindowPtr pOldNextSib)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxRestackWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pOldNextSib</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Handle window restacking. The actual restacking occurs in <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">DMX_UPDATE_RESTACK</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa14e289855150f41c4f574afea427bb0"></a><!-- doxytag: member="dmxwindow.h::dmxSetShape" ref="aa14e289855150f41c4f574afea427bb0" args="(WindowPtr pWindow, int kind)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxSetShape </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>kind</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set shape of <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeab9f468cc2c9374658213ee90a234a0"></a><!-- doxytag: member="dmxwindow.h::dmxUnrealizeWindow" ref="aeab9f468cc2c9374658213ee90a234a0" args="(WindowPtr pWindow)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool dmxUnrealizeWindow </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Unrealize <em>pWindow</em> on the back-end server. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">DMX_UPDATE_UNREALIZE</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a>, <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a02a6991e5248012e287fe4be3a985926"></a><!-- doxytag: member="dmxwindow.h::dmxWindowExposures" ref="a02a6991e5248012e287fe4be3a985926" args="(WindowPtr pWindow, RegionPtr prgn, RegionPtr other_exposed)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void dmxWindowExposures </td>
+ <td>(</td>
+ <td class="paramtype">WindowPtr&#160;</td>
+ <td class="paramname"><em>pWindow</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RegionPtr&#160;</td>
+ <td class="paramname"><em>prgn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">RegionPtr&#160;</td>
+ <td class="paramname"><em>other_exposed</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Handle exposures on <em>pWindow</em>. Since window exposures are handled in DMX, the events that are generated by the back-end server are redundant, so we eat them here. </p>
+
+<p>References <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a>, <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">DMX_GET_WINDOW_PRIV</a>, <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">DMX_UNWRAP</a>, <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">DMX_WRAP</a>, <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a>, <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, <a class="el" href="dmxwindow_8c.html#a2d44bd3ba7edbd43508cca91982ce572">dmxWindowExposurePredicate()</a>, <a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>, and <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a>.</p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxwindow_8h.html">dmxwindow.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxwindow_8h_source.html b/hw/dmx/doc/html/dmxwindow_8h_source.html
new file mode 100644
index 0000000..1790319
--- /dev/null
+++ b/hw/dmx/doc/html/dmxwindow_8h_source.html
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxwindow_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>dmxwindow.h</h1> </div>
+</div>
+<div class="contents">
+<a href="dmxwindow_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Kevin E. Martin &lt;kem@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef DMXWINDOW_H</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define DMXWINDOW_H</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="preprocessor">#include &quot;windowstr.h&quot;</span>
+<a name="l00041"></a>00041
+<a name="l00043"></a><a class="code" href="struct__dmxWinPriv.html">00043</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__dmxWinPriv.html">_dmxWinPriv</a> {
+<a name="l00044"></a><a class="code" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">00044</a> Window <a class="code" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">window</a>;
+<a name="l00045"></a><a class="code" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">00045</a> Bool <a class="code" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">offscreen</a>;
+<a name="l00046"></a><a class="code" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">00046</a> Bool <a class="code" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">mapped</a>;
+<a name="l00047"></a><a class="code" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">00047</a> Bool <a class="code" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">restacked</a>;
+<a name="l00048"></a><a class="code" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">00048</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">attribMask</a>;
+<a name="l00049"></a><a class="code" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">00049</a> Colormap <a class="code" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">cmap</a>;
+<a name="l00050"></a><a class="code" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">00050</a> Visual *<a class="code" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">visual</a>;
+<a name="l00051"></a><a class="code" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">00051</a> Bool <a class="code" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">isShaped</a>;
+<a name="l00052"></a><a class="code" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">00052</a> Bool <a class="code" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">hasPict</a>;
+<a name="l00053"></a>00053 <span class="preprocessor">#ifdef GLXEXT</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span> <span class="keywordtype">void</span> *swapGroup;
+<a name="l00055"></a>00055 <span class="keywordtype">int</span> barrier;
+<a name="l00056"></a>00056 void (*windowDestroyed)(WindowPtr);
+<a name="l00057"></a>00057 void (*windowUnmapped)(WindowPtr);
+<a name="l00058"></a>00058 <span class="preprocessor">#endif</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>} <a class="code" href="dmxwindow_8h.html#a5f9a6e44e1c8fbd89cf1d50b50fee122">dmxWinPrivRec</a>, *<a class="code" href="dmxwindow_8h.html#a3024ab3c0220000ce6ed1e93fd4880cc">dmxWinPrivPtr</a>;
+<a name="l00060"></a>00060
+<a name="l00061"></a>00061
+<a name="l00062"></a>00062 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxInitWindow</a>(ScreenPtr pScreen);
+<a name="l00063"></a>00063
+<a name="l00064"></a>00064 <span class="keyword">extern</span> Window <a class="code" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow</a>(WindowPtr pWindow);
+<a name="l00065"></a>00065
+<a name="l00066"></a>00066 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes</a>(WindowPtr pWindow,
+<a name="l00067"></a>00067 Colormap *cmap,
+<a name="l00068"></a>00068 Visual **visual);
+<a name="l00069"></a>00069 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow</a>(WindowPtr pWindow, Bool doSync);
+<a name="l00070"></a>00070
+<a name="l00071"></a>00071 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow</a>(WindowPtr pWindow);
+<a name="l00072"></a>00072 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxDestroyWindow</a>(WindowPtr pWindow);
+<a name="l00073"></a>00073 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow</a>(WindowPtr pWindow, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00074"></a>00074 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes</a>(WindowPtr pWindow, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);
+<a name="l00075"></a>00075 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow</a>(WindowPtr pWindow);
+<a name="l00076"></a>00076 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow</a>(WindowPtr pWindow);
+<a name="l00077"></a>00077 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow</a>(WindowPtr pWindow, WindowPtr pOldNextSib);
+<a name="l00078"></a>00078 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures</a>(WindowPtr pWindow, RegionPtr prgn,
+<a name="l00079"></a>00079 RegionPtr other_exposed);
+<a name="l00080"></a>00080 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow</a>(WindowPtr pWindow, DDXPointRec ptOldOrg,
+<a name="l00081"></a>00081 RegionPtr prgnSrc);
+<a name="l00082"></a>00082
+<a name="l00083"></a>00083 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow</a>(WindowPtr pWindow, <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y,
+<a name="l00084"></a>00084 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> w, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> h, WindowPtr pSib);
+<a name="l00085"></a>00085 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow</a>(WindowPtr pWindow, WindowPtr pPriorParent);
+<a name="l00086"></a>00086
+<a name="l00087"></a>00087 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth</a>(WindowPtr pWindow, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width);
+<a name="l00088"></a>00088
+<a name="l00089"></a>00089 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow</a>(ScreenPtr pScreen,
+<a name="l00090"></a>00090 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h);
+<a name="l00091"></a>00091 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow</a>(WindowPtr pRoot,
+<a name="l00092"></a>00092 <span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y, <span class="keywordtype">int</span> w, <span class="keywordtype">int</span> h);
+<a name="l00093"></a>00093
+<a name="l00094"></a>00094 <span class="keyword">extern</span> Bool <a class="code" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow</a>(WindowPtr pWindow);
+<a name="l00095"></a>00095
+<a name="l00096"></a>00096 <span class="comment">/* Support for shape extension */</span>
+<a name="l00097"></a>00097 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape</a>(WindowPtr pWindow, <span class="keywordtype">int</span> kind);
+<a name="l00098"></a>00098
+<a name="l00100"></a><a class="code" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">00100</a> <span class="preprocessor">#define DMX_GET_WINDOW_PRIV(_pWin) ((dmxWinPrivPtr) \</span>
+<a name="l00101"></a>00101 <span class="preprocessor"> dixLookupPrivate(&amp;(_pWin)-&gt;devPrivates, dmxWinPrivateKey))</span>
+<a name="l00102"></a>00102 <span class="preprocessor"></span>
+<a name="l00103"></a>00103 <span class="comment">/* All of these macros are only used in dmxwindow.c */</span>
+<a name="l00104"></a><a class="code" href="dmxwindow_8h.html#a35b887c43ad7855996b9aab8151fc479">00104</a> <span class="preprocessor">#define DMX_WINDOW_FUNC_PROLOGUE(_pGC) \</span>
+<a name="l00105"></a>00105 <span class="preprocessor">do { \</span>
+<a name="l00106"></a>00106 <span class="preprocessor"> dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \</span>
+<a name="l00107"></a>00107 <span class="preprocessor"> DMX_UNWRAP(funcs, pGCPriv, (_pGC)); \</span>
+<a name="l00108"></a>00108 <span class="preprocessor"> if (pGCPriv-&gt;ops) \</span>
+<a name="l00109"></a>00109 <span class="preprocessor"> DMX_UNWRAP(ops, pGCPriv, (_pGC)); \</span>
+<a name="l00110"></a>00110 <span class="preprocessor">} while (0)</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span>
+<a name="l00112"></a><a class="code" href="dmxwindow_8h.html#a9144b8f0cbe6f869da8a9ddcfbaa5f1b">00112</a> <span class="preprocessor">#define DMX_WINDOW_FUNC_EPILOGUE(_pGC) \</span>
+<a name="l00113"></a>00113 <span class="preprocessor">do { \</span>
+<a name="l00114"></a>00114 <span class="preprocessor"> dmxGCPrivPtr pGCPriv = DMX_GET_GC_PRIV(_pGC); \</span>
+<a name="l00115"></a>00115 <span class="preprocessor"> DMX_WRAP(funcs, &amp;dmxGCFuncs, pGCPriv, (_pGC)); \</span>
+<a name="l00116"></a>00116 <span class="preprocessor"> if (pGCPriv-&gt;ops) \</span>
+<a name="l00117"></a>00117 <span class="preprocessor"> DMX_WRAP(ops, &amp;dmxGCOps, pGCPriv, (_pGC)); \</span>
+<a name="l00118"></a>00118 <span class="preprocessor">} while (0)</span>
+<a name="l00119"></a>00119 <span class="preprocessor"></span>
+<a name="l00120"></a><a class="code" href="dmxwindow_8h.html#a7eb75e49cc319067cfd50841378f8808">00120</a> <span class="preprocessor">#define DMX_WINDOW_X1(_pWin) \</span>
+<a name="l00121"></a>00121 <span class="preprocessor"> ((_pWin)-&gt;drawable.x - wBorderWidth(_pWin))</span>
+<a name="l00122"></a><a class="code" href="dmxwindow_8h.html#a744e6f0a3bd069a37c77b8bff83bf491">00122</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_WINDOW_Y1(_pWin) \</span>
+<a name="l00123"></a>00123 <span class="preprocessor"> ((_pWin)-&gt;drawable.y - wBorderWidth(_pWin))</span>
+<a name="l00124"></a><a class="code" href="dmxwindow_8h.html#ad52fe7cfe660be4536aabed92c0108d1">00124</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_WINDOW_X2(_pWin) \</span>
+<a name="l00125"></a>00125 <span class="preprocessor"> ((_pWin)-&gt;drawable.x + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.width) </span>
+<a name="l00126"></a><a class="code" href="dmxwindow_8h.html#a2d0ce76b2c1b06889444d93d5368c0ba">00126</a> <span class="preprocessor"></span><span class="preprocessor">#define DMX_WINDOW_Y2(_pWin) \</span>
+<a name="l00127"></a>00127 <span class="preprocessor"> ((_pWin)-&gt;drawable.y + wBorderWidth(_pWin) + (_pWin)-&gt;drawable.height) </span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00129"></a><a class="code" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">00129</a> <span class="preprocessor">#define DMX_WINDOW_OFFSCREEN(_pWin) \</span>
+<a name="l00130"></a>00130 <span class="preprocessor"> (DMX_WINDOW_X1(_pWin) &gt;= (_pWin)-&gt;drawable.pScreen-&gt;width || \</span>
+<a name="l00131"></a>00131 <span class="preprocessor"> DMX_WINDOW_Y1(_pWin) &gt;= (_pWin)-&gt;drawable.pScreen-&gt;height || \</span>
+<a name="l00132"></a>00132 <span class="preprocessor"> DMX_WINDOW_X2(_pWin) &lt;= 0 || \</span>
+<a name="l00133"></a>00133 <span class="preprocessor"> DMX_WINDOW_Y2(_pWin) &lt;= 0)</span>
+<a name="l00134"></a>00134 <span class="preprocessor"></span>
+<a name="l00135"></a>00135 <span class="preprocessor">#endif </span><span class="comment">/* DMXWINDOW_H */</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxwindow_8h.html">dmxwindow.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/dmxxinput_8c.html b/hw/dmx/doc/html/dmxxinput_8c.html
new file mode 100644
index 0000000..ea20b54
--- /dev/null
+++ b/hw/dmx/doc/html/dmxxinput_8c.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('dmxxinput_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>dmxxinput.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;X11/X.h&gt;</code><br/>
+<code>#include &lt;X11/Xproto.h&gt;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &lt;X11/extensions/XI.h&gt;</code><br/>
+<code>#include &lt;X11/extensions/XIproto.h&gt;</code><br/>
+<code>#include &quot;XIstubs.h&quot;</code><br/>
+<code>#include &quot;mipointer.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;exevents.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxxinput_8c.html#aa4b20aa4795f3a94339e1748d5a4d1fb">SetDeviceMode</a> (ClientPtr client, DeviceIntPtr dev, int mode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxxinput_8c.html#a1175b57fa9f8cba2b233ffb9e81ed066">SetDeviceValuators</a> (ClientPtr client, DeviceIntPtr dev, int *valuators, int first_valuator, int num_valuators)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dmxxinput_8c.html#ae8839ac736a195a19dd4b60653b5507b">ChangeDeviceControl</a> (ClientPtr client, DeviceIntPtr dev, xDeviceCtl *control)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This file implements support required by the XINPUT extension. </p>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ae8839ac736a195a19dd4b60653b5507b"></a><!-- doxytag: member="dmxxinput.c::ChangeDeviceControl" ref="ae8839ac736a195a19dd4b60653b5507b" args="(ClientPtr client, DeviceIntPtr dev, xDeviceCtl *control)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ChangeDeviceControl </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>dev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">xDeviceCtl *&#160;</td>
+ <td class="paramname"><em>control</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Change device control. This is not implemented. </p>
+
+</div>
+</div>
+<a class="anchor" id="aa4b20aa4795f3a94339e1748d5a4d1fb"></a><!-- doxytag: member="dmxxinput.c::SetDeviceMode" ref="aa4b20aa4795f3a94339e1748d5a4d1fb" args="(ClientPtr client, DeviceIntPtr dev, int mode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int SetDeviceMode </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>dev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>mode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set device mode to <em>mode</em>. This is not implemented. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1175b57fa9f8cba2b233ffb9e81ed066"></a><!-- doxytag: member="dmxxinput.c::SetDeviceValuators" ref="a1175b57fa9f8cba2b233ffb9e81ed066" args="(ClientPtr client, DeviceIntPtr dev, int *valuators, int first_valuator, int num_valuators)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int SetDeviceValuators </td>
+ <td>(</td>
+ <td class="paramtype">ClientPtr&#160;</td>
+ <td class="paramname"><em>client</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>dev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>valuators</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>first_valuator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>num_valuators</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set device valuators. This is not implemented. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="dmxxinput_8c.html">dmxxinput.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/doxygen.css b/hw/dmx/doc/html/doxygen.css
new file mode 100644
index 0000000..841f709
--- /dev/null
+++ b/hw/dmx/doc/html/doxygen.css
@@ -0,0 +1,49 @@
+H1 { text-align: center; }
+CAPTION { font-weight: bold }
+A.qindex {}
+A.qindexRef {}
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #4444ee }
+A.codeRef { font-weight: normal; color: #4444ee }
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+DIV.fragment { width: 100%; border: none; background-color: #eeeeee }
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #f2f2ff; font-weight: bold; }
+TD.mdname1 { background-color: #f2f2ff; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }
+BODY { background: white }
+TD.indexkey {
+ background-color: #eeeeff;
+ font-weight: bold;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+TD.indexvalue {
+ background-color: #eeeeff;
+ font-style: italic;
+ padding-right : 10px;
+ padding-top : 2px;
+ padding-left : 10px;
+ padding-bottom : 2px;
+ margin-left : 0px;
+ margin-right : 0px;
+ margin-top : 2px;
+ margin-bottom : 2px
+}
+FONT.keyword { color: #008000 }
+FONT.keywordtype { color: #604020 }
+FONT.keywordflow { color: #e08000 }
+FONT.comment { color: #800000 }
+FONT.preprocessor { color: #806020 }
+FONT.stringliteral { color: #002080 }
+FONT.charliteral { color: #008080 }
diff --git a/hw/dmx/doc/html/doxygen.png b/hw/dmx/doc/html/doxygen.png
new file mode 100644
index 0000000..635ed52
--- /dev/null
+++ b/hw/dmx/doc/html/doxygen.png
Binary files differ
diff --git a/hw/dmx/doc/html/files.html b/hw/dmx/doc/html/files.html
new file mode 100644
index 0000000..a222bab
--- /dev/null
+++ b/hw/dmx/doc/html/files.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('files.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>File List</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><table>
+ <tr><td class="indexkey"><a class="el" href="ChkNotMaskEv_8c.html">ChkNotMaskEv.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="ChkNotMaskEv_8h.html">ChkNotMaskEv.h</a> <a href="ChkNotMaskEv_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmx-config_8h.html">dmx-config.h</a> <a href="dmx-config_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmx_8c.html">dmx.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmx_8h.html">dmx.h</a> <a href="dmx_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmx__glxvisuals_8c.html">dmx_glxvisuals.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmx__glxvisuals_8h.html">dmx_glxvisuals.h</a> <a href="dmx__glxvisuals_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxarg_8c.html">dmxarg.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxarg_8h.html">dmxarg.h</a> <a href="dmxarg_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxbackend_8h.html">dmxbackend.h</a> <a href="dmxbackend_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcb_8c.html">dmxcb.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcb_8h.html">dmxcb.h</a> <a href="dmxcb_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxclient_8h.html">dmxclient.h</a> <a href="dmxclient_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcmap_8c.html">dmxcmap.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcmap_8h.html">dmxcmap.h</a> <a href="dmxcmap_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcommon_8h.html">dmxcommon.h</a> <a href="dmxcommon_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcompat_8c.html">dmxcompat.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcompat_8h.html">dmxcompat.h</a> <a href="dmxcompat_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxconfig_8h.html">dmxconfig.h</a> <a href="dmxconfig_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxconsole_8h.html">dmxconsole.h</a> <a href="dmxconsole_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcursor_8c.html">dmxcursor.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxcursor_8h.html">dmxcursor.h</a> <a href="dmxcursor_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxdetach_8c.html">dmxdetach.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxdpms_8c.html">dmxdpms.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxdpms_8h.html">dmxdpms.h</a> <a href="dmxdpms_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxdummy_8c.html">dmxdummy.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxdummy_8h.html">dmxdummy.h</a> <a href="dmxdummy_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxevents_8c.html">dmxevents.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxevents_8h.html">dmxevents.h</a> <a href="dmxevents_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxextension_8c.html">dmxextension.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxextension_8h.html">dmxextension.h</a> <a href="dmxextension_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxfont_8c.html">dmxfont.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxfont_8h.html">dmxfont.h</a> <a href="dmxfont_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxgc_8c.html">dmxgc.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxgc_8h.html">dmxgc.h</a> <a href="dmxgc_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxgcops_8c.html">dmxgcops.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxgcops_8h.html">dmxgcops.h</a> <a href="dmxgcops_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxinit_8c.html">dmxinit.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxinit_8h.html">dmxinit.h</a> <a href="dmxinit_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxinput_8c.html">dmxinput.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxinput_8h.html">dmxinput.h</a> <a href="dmxinput_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxinputinit_8c.html">dmxinputinit.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxinputinit_8h.html">dmxinputinit.h</a> <a href="dmxinputinit_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxlog_8c.html">dmxlog.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxlog_8h.html">dmxlog.h</a> <a href="dmxlog_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxmap_8c.html">dmxmap.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxmap_8h.html">dmxmap.h</a> <a href="dmxmap_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxmotion_8c.html">dmxmotion.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxmotion_8h.html">dmxmotion.h</a> <a href="dmxmotion_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxparse_8c.html">dmxparse.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxparse_8h.html">dmxparse.h</a> <a href="dmxparse_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxpict_8c.html">dmxpict.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxpict_8h.html">dmxpict.h</a> <a href="dmxpict_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxpixmap_8c.html">dmxpixmap.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxpixmap_8h.html">dmxpixmap.h</a> <a href="dmxpixmap_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxprint_8c.html">dmxprint.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxprint_8h.html">dmxprint.h</a> <a href="dmxprint_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxprop_8c.html">dmxprop.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxprop_8h.html">dmxprop.h</a> <a href="dmxprop_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxscrinit_8c.html">dmxscrinit.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxscrinit_8h.html">dmxscrinit.h</a> <a href="dmxscrinit_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxshadow_8c.html">dmxshadow.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxshadow_8h.html">dmxshadow.h</a> <a href="dmxshadow_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxsigio_8c.html">dmxsigio.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxsigio_8h.html">dmxsigio.h</a> <a href="dmxsigio_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxstat_8c.html">dmxstat.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxstat_8h.html">dmxstat.h</a> <a href="dmxstat_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxsync_8c.html">dmxsync.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxsync_8h.html">dmxsync.h</a> <a href="dmxsync_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxtodmx_8c.html">dmxtodmx.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxvisual_8c.html">dmxvisual.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxvisual_8h.html">dmxvisual.h</a> <a href="dmxvisual_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxwindow_8c.html">dmxwindow.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxwindow_8h.html">dmxwindow.h</a> <a href="dmxwindow_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="dmxxinput_8c.html">dmxxinput.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="lnx-keyboard_8c.html">lnx-keyboard.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="lnx-keyboard_8h.html">lnx-keyboard.h</a> <a href="lnx-keyboard_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="lnx-ms_8c.html">lnx-ms.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="lnx-ms_8h.html">lnx-ms.h</a> <a href="lnx-ms_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="lnx-ps2_8c.html">lnx-ps2.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="lnx-ps2_8h.html">lnx-ps2.h</a> <a href="lnx-ps2_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-common_8c.html">usb-common.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-common_8h.html">usb-common.h</a> <a href="usb-common_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-keyboard_8h.html">usb-keyboard.h</a> <a href="usb-keyboard_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-mouse_8c.html">usb-mouse.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-mouse_8h.html">usb-mouse.h</a> <a href="usb-mouse_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-other_8c.html">usb-other.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-other_8h.html">usb-other.h</a> <a href="usb-other_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="usb-private_8h.html">usb-private.h</a> <a href="usb-private_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="vdltodmx_8c.html">vdltodmx.c</a></td><td class="indexvalue"></td></tr>
+ <tr><td class="indexkey"><a class="el" href="xdmxconfig_8c.html">xdmxconfig.c</a></td><td class="indexvalue"></td></tr>
+</table>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/ftv2blank.png b/hw/dmx/doc/html/ftv2blank.png
new file mode 100644
index 0000000..3b7a29c
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2blank.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2doc.png b/hw/dmx/doc/html/ftv2doc.png
new file mode 100644
index 0000000..310e441
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2doc.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2folderclosed.png b/hw/dmx/doc/html/ftv2folderclosed.png
new file mode 100644
index 0000000..79aeaf7
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2folderclosed.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2folderopen.png b/hw/dmx/doc/html/ftv2folderopen.png
new file mode 100644
index 0000000..1b703dd
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2folderopen.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2lastnode.png b/hw/dmx/doc/html/ftv2lastnode.png
new file mode 100644
index 0000000..3b7a29c
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2lastnode.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2link.png b/hw/dmx/doc/html/ftv2link.png
new file mode 100644
index 0000000..310e441
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2link.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2mlastnode.png b/hw/dmx/doc/html/ftv2mlastnode.png
new file mode 100644
index 0000000..ec51f17
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2mlastnode.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2mnode.png b/hw/dmx/doc/html/ftv2mnode.png
new file mode 100644
index 0000000..ec51f17
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2mnode.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2node.png b/hw/dmx/doc/html/ftv2node.png
new file mode 100644
index 0000000..3b7a29c
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2node.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2plastnode.png b/hw/dmx/doc/html/ftv2plastnode.png
new file mode 100644
index 0000000..270a965
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2plastnode.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2pnode.png b/hw/dmx/doc/html/ftv2pnode.png
new file mode 100644
index 0000000..270a965
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2pnode.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2splitbar.png b/hw/dmx/doc/html/ftv2splitbar.png
new file mode 100644
index 0000000..f60a527
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2splitbar.png
Binary files differ
diff --git a/hw/dmx/doc/html/ftv2vertline.png b/hw/dmx/doc/html/ftv2vertline.png
new file mode 100644
index 0000000..3b7a29c
--- /dev/null
+++ b/hw/dmx/doc/html/ftv2vertline.png
Binary files differ
diff --git a/hw/dmx/doc/html/functions.html b/hw/dmx/doc/html/functions.html
new file mode 100644
index 0000000..6583a87
--- /dev/null
+++ b/hw/dmx/doc/html/functions.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>absmap
+: <a class="el" href="struct__myPrivate.html#afc48f38bcefc200e681475c06fdacad6">_myPrivate</a>
+</li>
+<li>argc
+: <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg</a>
+, <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam</a>
+</li>
+<li>argm
+: <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg</a>
+</li>
+<li>argv
+: <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg</a>
+, <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam</a>
+</li>
+<li>attribMask
+: <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x62.html b/hw/dmx/doc/html/functions_0x62.html
new file mode 100644
index 0000000..c4f6c64
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x62.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>base
+: <a class="el" href="structstack.html#ae523dc895d308415be2aa9a6b6bdd40e">stack</a>
+</li>
+<li>beBlackPixel
+: <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo</a>
+</li>
+<li>beBPP
+: <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo</a>
+</li>
+<li>beDefColormaps
+: <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo</a>
+</li>
+<li>beDefVisualIndex
+: <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo</a>
+</li>
+<li>beDepth
+: <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo</a>
+</li>
+<li>beDepths
+: <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo</a>
+</li>
+<li>beDisplay
+: <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo</a>
+</li>
+<li>beHeight
+: <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo</a>
+</li>
+<li>belFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">_DMXLocalInitInfo</a>
+</li>
+<li>beNumDefColormaps
+: <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo</a>
+</li>
+<li>beNumDepths
+: <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo</a>
+</li>
+<li>beNumPixmapFormats
+: <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo</a>
+</li>
+<li>beNumVisuals
+: <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo</a>
+</li>
+<li>bePixmapFormats
+: <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo</a>
+</li>
+<li>beVisuals
+: <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo</a>
+</li>
+<li>beWhitePixel
+: <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo</a>
+</li>
+<li>beWidth
+: <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo</a>
+</li>
+<li>beXDPI
+: <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo</a>
+</li>
+<li>beYDPI
+: <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo</a>
+</li>
+<li>binding
+: <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo</a>
+</li>
+<li>bins
+: <a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">_DMXStatInfo</a>
+</li>
+<li>BitmapToRegion
+: <a class="el" href="struct__DMXScreenInfo.html#a1d29c3ada0aab8fbcd88c5ceaa48cf2d">_DMXScreenInfo</a>
+</li>
+<li>button1
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a">_myPrivate</a>
+</li>
+<li>button2
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0">_myPrivate</a>
+</li>
+<li>button3
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395">_myPrivate</a>
+</li>
+<li>button4
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0">_myPrivate</a>
+</li>
+<li>button5
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469">_myPrivate</a>
+</li>
+<li>buttonClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo</a>
+</li>
+<li>buttons
+: <a class="el" href="struct__myPrivate.html#a8e004313d6a4cb5e86c02c2b32576af5">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x63.html b/hw/dmx/doc/html/functions_0x63.html
new file mode 100644
index 0000000..f43808c
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x63.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>captured
+: <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate</a>
+</li>
+<li>centerX
+: <a class="el" href="struct__myPrivate.html#a6e729bd1a19bb488a215d22e8cdc5bdc">_myPrivate</a>
+</li>
+<li>centerY
+: <a class="el" href="struct__myPrivate.html#ae9759d71e19697ba4ab27cf944deab9c">_myPrivate</a>
+</li>
+<li>ChangeBorderWidth
+: <a class="el" href="struct__DMXScreenInfo.html#a134b8b97ce93ef4601c972d0fb760e93">_DMXScreenInfo</a>
+</li>
+<li>ChangePicture
+: <a class="el" href="struct__DMXScreenInfo.html#a933b5c32ef1671dae5acc1e96b7f34e3">_DMXScreenInfo</a>
+</li>
+<li>ChangePictureClip
+: <a class="el" href="struct__DMXScreenInfo.html#a62a21ad708a96cb1653e8d572895b1de">_DMXScreenInfo</a>
+</li>
+<li>ChangeWindowAttributes
+: <a class="el" href="struct__DMXScreenInfo.html#a35d0114e24f9eeff1f5649bcb0b00d71">_DMXScreenInfo</a>
+</li>
+<li>close
+: <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">_DMXConfigVirtual</a>
+</li>
+<li>CloseIndexed
+: <a class="el" href="struct__DMXScreenInfo.html#a99c75513907782d2679bd9e2ed327621">_DMXScreenInfo</a>
+</li>
+<li>CloseScreen
+: <a class="el" href="struct__DMXScreenInfo.html#a94a4815bc20535c8946876d2113b109e">_DMXScreenInfo</a>
+, <a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">_myPrivate</a>
+</li>
+<li>cmap
+: <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv</a>
+, <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv</a>
+</li>
+<li>collect_events
+: <a class="el" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">_DMXLocalInputInfo</a>
+</li>
+<li>comment
+: <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken</a>
+, <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber</a>
+, <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair</a>
+, <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment</a>
+, <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry</a>
+, <a class="el" href="structstack.html#aab48b0e87fe50c07ec5a9ca59c8fb671">stack</a>
+</li>
+<li>Composite
+: <a class="el" href="struct__DMXScreenInfo.html#a5e70f79e08b658092d83d266686c9a67">_DMXScreenInfo</a>
+</li>
+<li>CompositeRects
+: <a class="el" href="struct__DMXScreenInfo.html#a2b5509668e39153253b7d7d945dddecb">_DMXScreenInfo</a>
+</li>
+<li>config
+: <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct</a>
+</li>
+<li>consHeight
+: <a class="el" href="struct__myPrivate.html#ab0fb948041c7994127e526d6904a1c93">_myPrivate</a>
+</li>
+<li>console
+: <a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">_DMXInputInfo</a>
+</li>
+<li>consWidth
+: <a class="el" href="struct__myPrivate.html#acedad74bc71aef05c22a25b63a435f02">_myPrivate</a>
+</li>
+<li>CopyWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a8f1472064bae45d6b59bee2580a185aa">_DMXScreenInfo</a>
+</li>
+<li>core
+: <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo</a>
+</li>
+<li>count
+: <a class="el" href="struct__DMXStatAvg.html#a361c10829231fd6805e59232321de2fe">_DMXStatAvg</a>
+</li>
+<li>create_private
+: <a class="el" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">_DMXLocalInputInfo</a>
+</li>
+<li>CreateColormap
+: <a class="el" href="struct__DMXScreenInfo.html#a082a4bae927eb9bbbd87cebdfd4d9dfc">_DMXScreenInfo</a>
+</li>
+<li>CreateGC
+: <a class="el" href="struct__DMXScreenInfo.html#a0608031d93f0f78df41e66fc8e8107cf">_DMXScreenInfo</a>
+</li>
+<li>CreatePicture
+: <a class="el" href="struct__DMXScreenInfo.html#adf17f1a03e6a5a127b02aaa9005d8089">_DMXScreenInfo</a>
+</li>
+<li>CreatePixmap
+: <a class="el" href="struct__DMXScreenInfo.html#a88d8c787b8e05b4d69fa3d91f6456542">_DMXScreenInfo</a>
+</li>
+<li>CreateWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a19123a8915a37e821ef46bc63f646d8d">_DMXScreenInfo</a>
+</li>
+<li>curCursor
+: <a class="el" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">_DMXScreenInfo</a>
+</li>
+<li>cursor
+: <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv</a>
+, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo</a>
+</li>
+<li>cursorEmpty
+: <a class="el" href="struct__myPrivate.html#a78c2f55261e44ab6a5f7fd7a3c03a887">_myPrivate</a>
+</li>
+<li>cursorGrabbed
+: <a class="el" href="struct__myPrivate.html#a82b111d9769d9ca67449808c86effd49">_myPrivate</a>
+</li>
+<li>cursorNormal
+: <a class="el" href="struct__myPrivate.html#a5e949540b57f13f311f6e32847bc9ad1">_myPrivate</a>
+</li>
+<li>cursorNotShared
+: <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo</a>
+</li>
+<li>cursorVisible
+: <a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">_DMXScreenInfo</a>
+</li>
+<li>curX
+: <a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">_myPrivate</a>
+</li>
+<li>curY
+: <a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x64.html b/hw/dmx/doc/html/functions_0x64.html
new file mode 100644
index 0000000..2077659
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x64.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>destroy_private
+: <a class="el" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">_DMXLocalInputInfo</a>
+</li>
+<li>DestroyColormap
+: <a class="el" href="struct__DMXScreenInfo.html#a0a407c422f268db1da74672d572102bb">_DMXScreenInfo</a>
+</li>
+<li>DestroyPicture
+: <a class="el" href="struct__DMXScreenInfo.html#a31909a1072cd78345457bd6b0c81ac1c">_DMXScreenInfo</a>
+</li>
+<li>DestroyPictureClip
+: <a class="el" href="struct__DMXScreenInfo.html#ab643ec0c295421859733b8f654ff8ce7">_DMXScreenInfo</a>
+</li>
+<li>DestroyPixmap
+: <a class="el" href="struct__DMXScreenInfo.html#adafeb1337d14d4f650098f3bd06214db">_DMXScreenInfo</a>
+</li>
+<li>DestroyWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a0d204177b5df7dab4a89741439728a56">_DMXScreenInfo</a>
+</li>
+<li>detached
+: <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo</a>
+, <a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">DMXInputAttributesRec</a>
+</li>
+<li>detachedImage
+: <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv</a>
+</li>
+<li>deviceId
+: <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo</a>
+</li>
+<li>deviceName
+: <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo</a>
+</li>
+<li>devs
+: <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo</a>
+</li>
+<li>dim
+: <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual</a>
+</li>
+<li>display
+: <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub</a>
+</li>
+<li>displayDim
+: <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall</a>
+</li>
+<li>displayName
+: <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec</a>
+</li>
+<li>displays
+: <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct</a>
+</li>
+<li>DMX_COMMON_PRIVATE
+: <a class="el" href="struct__myPrivate.html#a83c7e1a18938a3186ff337ed3a1a6b92">_myPrivate</a>
+</li>
+<li>dmxInput
+: <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate</a>
+</li>
+<li>dname
+: <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay</a>
+</li>
+<li>dpmsCapable
+: <a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">_DMXScreenInfo</a>
+</li>
+<li>dpmsEnabled
+: <a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">_DMXScreenInfo</a>
+</li>
+<li>dpmsOff
+: <a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">_DMXScreenInfo</a>
+</li>
+<li>dpmsStandby
+: <a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">_DMXScreenInfo</a>
+</li>
+<li>dpmsSuspend
+: <a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">_DMXScreenInfo</a>
+</li>
+<li>duration
+: <a class="el" href="struct__myPrivate.html#a6a27aa80849de66952d95ab65914d6da">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x65.html b/hw/dmx/doc/html/functions_0x65.html
new file mode 100644
index 0000000..d37d703
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x65.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>end
+: <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall</a>
+, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption</a>
+</li>
+<li>entered
+: <a class="el" href="struct__myPrivate.html#ab7925907f71458986fba416d8c9b36e1">_myPrivate</a>
+</li>
+<li>extType
+: <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x66.html b/hw/dmx/doc/html/functions_0x66.html
new file mode 100644
index 0000000..c67107a
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x66.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fd
+: <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate</a>
+</li>
+<li>filename
+: <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct</a>
+</li>
+<li>fine
+: <a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">_myPrivate</a>
+</li>
+<li>focusClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo</a>
+</li>
+<li>font
+: <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv</a>
+</li>
+<li>force
+: <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo</a>
+</li>
+<li>freemap
+: <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo</a>
+</li>
+<li>freename
+: <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo</a>
+</li>
+<li>freenames
+: <a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">_DMXLocalInitInfo</a>
+</li>
+<li>funcs
+: <a class="el" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">_dmxGCPriv</a>
+</li>
+<li>functions
+: <a class="el" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x67.html b/hw/dmx/doc/html/functions_0x67.html
new file mode 100644
index 0000000..ce78d8a
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x67.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>gc
+: <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv</a>
+, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate</a>
+</li>
+<li>gcCur
+: <a class="el" href="struct__myPrivate.html#ac926e46006665b40b4189f3a62172fa2">_myPrivate</a>
+</li>
+<li>gcDet
+: <a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">_myPrivate</a>
+</li>
+<li>gcRev
+: <a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">_myPrivate</a>
+</li>
+<li>geometry
+: <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo</a>
+</li>
+<li>get_info
+: <a class="el" href="struct__DMXLocalInputInfo.html#a4d215378947d50a9abc74adcec917313">_DMXLocalInputInfo</a>
+</li>
+<li>GetImage
+: <a class="el" href="struct__DMXScreenInfo.html#ad622affb2a1524a15f9bad149fa88f30">_DMXScreenInfo</a>
+</li>
+<li>GetSpans
+: <a class="el" href="struct__DMXScreenInfo.html#ad399c770af1784544ede0253593b3700">_DMXScreenInfo</a>
+</li>
+<li>globalX
+: <a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">_myPrivate</a>
+</li>
+<li>globalY
+: <a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">_myPrivate</a>
+</li>
+<li>Glyphs
+: <a class="el" href="struct__DMXScreenInfo.html#ab2bf09e1d055cad3ecfb1b00ddadc89e">_DMXScreenInfo</a>
+</li>
+<li>glyphSets
+: <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv</a>
+</li>
+<li>grabbed
+: <a class="el" href="struct__myPrivate.html#a9d7f5ad2b2066a328c982a2ed051cd94">_myPrivate</a>
+</li>
+<li>grabbedScreen
+: <a class="el" href="struct__myPrivate.html#a0018b915c37ea1c6f329efebbb03f297">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x68.html b/hw/dmx/doc/html/functions_0x68.html
new file mode 100644
index 0000000..a9c0dee
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x68.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hasPict
+: <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv</a>
+</li>
+<li>head
+: <a class="el" href="struct__DMXLocalInputInfo.html#a41f2eeca657b0ed5e3000a97a965cb44">_DMXLocalInputInfo</a>
+</li>
+<li>height
+: <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual</a>
+, <a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">_DMXConfigWall</a>
+, <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate</a>
+, <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec</a>
+</li>
+<li>history
+: <a class="el" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x69.html b/hw/dmx/doc/html/functions_0x69.html
new file mode 100644
index 0000000..ee4d6e1
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x69.html
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li class="current"><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>index
+: <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo</a>
+</li>
+<li>init
+: <a class="el" href="struct__DMXLocalInputInfo.html#ac7d8e55012dcd7fd721802069a4cda7c">_DMXLocalInputInfo</a>
+</li>
+<li>initialized
+: <a class="el" href="struct__myPrivate.html#a7a3f2b74b35ff19e8f00857d34e892f3">_myPrivate</a>
+</li>
+<li>InitIndexed
+: <a class="el" href="struct__DMXScreenInfo.html#adaae790d6f5dd1dec98e57e2e669e3fd">_DMXScreenInfo</a>
+</li>
+<li>inputIdx
+: <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo</a>
+</li>
+<li>inputs
+: <a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">DMXConfigCmdStruct</a>
+</li>
+<li>inputType
+: <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec</a>
+</li>
+<li>InstallColormap
+: <a class="el" href="struct__DMXScreenInfo.html#ab5a18ace3bb18cbcc9e127f51c494006">_DMXScreenInfo</a>
+</li>
+<li>intFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">_DMXLocalInitInfo</a>
+</li>
+<li>isCore
+: <a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">DMXInputAttributesRec</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo</a>
+</li>
+<li>isShaped
+: <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x6b.html b/hw/dmx/doc/html/functions_0x6b.html
new file mode 100644
index 0000000..3aa8943
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x6b.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kbd
+: <a class="el" href="struct__myPrivate.html#a8247a272435f00e939e150d7dd7db1e0">_myPrivate</a>
+</li>
+<li>kbdFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo</a>
+</li>
+<li>kbdState
+: <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate</a>
+</li>
+<li>kbdtrans
+: <a class="el" href="struct__myPrivate.html#ade5d3520bc20cf979894ab2e2faf4903">_myPrivate</a>
+</li>
+<li>kbdtty
+: <a class="el" href="struct__myPrivate.html#a3151cfbe868cf35d0e070d554ac21ee0">_myPrivate</a>
+</li>
+<li>kbdType
+: <a class="el" href="struct__myPrivate.html#ae0dbb095f346fd577827af796f70cfe8">_myPrivate</a>
+</li>
+<li>kBell
+: <a class="el" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">_DMXLocalInputInfo</a>
+</li>
+<li>kCtrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">_DMXLocalInputInfo</a>
+</li>
+<li>kctrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">_DMXLocalInputInfo</a>
+</li>
+<li>keyboard
+: <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo</a>
+</li>
+<li>keyClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo</a>
+</li>
+<li>keycodes
+: <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo</a>
+</li>
+<li>keySyms
+: <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x6c.html b/hw/dmx/doc/html/functions_0x6c.html
new file mode 100644
index 0000000..f1ab812
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x6c.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lastX
+: <a class="el" href="struct__myPrivate.html#aeb80240bdd4d585ecf2ab890a2e74369">_myPrivate</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a65e0e7a4d6928067ba63183c7ddbd03c">_DMXLocalInputInfo</a>
+</li>
+<li>lastY
+: <a class="el" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">_DMXLocalInputInfo</a>
+, <a class="el" href="struct__myPrivate.html#a25344ec18eba85efb5017bf848f152f4">_myPrivate</a>
+</li>
+<li>latereinit
+: <a class="el" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">_DMXLocalInputInfo</a>
+</li>
+<li>ledFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">_DMXLocalInitInfo</a>
+</li>
+<li>line
+: <a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">_DMXConfigToken</a>
+, <a class="el" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">_DMXConfigNumber</a>
+, <a class="el" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">_DMXConfigComment</a>
+, <a class="el" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">_DMXConfigPair</a>
+</li>
+<li>logicalScreen
+: <a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">DMXScreenAttributesRec</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x6d.html b/hw/dmx/doc/html/functions_0x6d.html
new file mode 100644
index 0000000..fb0f11d
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x6d.html
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>map
+: <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo</a>
+</li>
+<li>mapOptimize
+: <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo</a>
+</li>
+<li>mapped
+: <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv</a>
+</li>
+<li>mask
+: <a class="el" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">_myPrivate</a>
+</li>
+<li>maxres
+: <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo</a>
+</li>
+<li>maxSymbols
+: <a class="el" href="struct__DMXLocalInitInfo.html#ae5dc18536a191e46bfe6682f82afd583">_DMXLocalInitInfo</a>
+</li>
+<li>maxSymbolsSupported
+: <a class="el" href="struct__DMXLocalInitInfo.html#a8a8933752768b613acbda0743bbcfbe6">_DMXLocalInitInfo</a>
+</li>
+<li>maxval
+: <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo</a>
+</li>
+<li>mCtrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">_DMXLocalInputInfo</a>
+</li>
+<li>mctrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">_DMXLocalInputInfo</a>
+</li>
+<li>minres
+: <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo</a>
+</li>
+<li>minval
+: <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo</a>
+</li>
+<li>modMap
+: <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo</a>
+</li>
+<li>mou
+: <a class="el" href="struct__myPrivate.html#ab5f8fb12758800c1fbcd95b731ebbee8">_myPrivate</a>
+</li>
+<li>msc
+: <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv</a>
+</li>
+<li>myScreen
+: <a class="el" href="struct__myPrivate.html#a2097f51728e0db5f4fdc91e7d0613bf7">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x6e.html b/hw/dmx/doc/html/functions_0x6e.html
new file mode 100644
index 0000000..223737e
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x6e.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>name
+: <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo</a>
+, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">_DMXLocalInputInfo</a>
+, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct</a>
+, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual</a>
+</li>
+<li>nameList
+: <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall</a>
+</li>
+<li>names
+: <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo</a>
+</li>
+<li>needsSync
+: <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo</a>
+</li>
+<li>newscreen
+: <a class="el" href="struct__myPrivate.html#ad3ad48a8cbc0038ae091dbd8bd9e55a1">_myPrivate</a>
+</li>
+<li>next
+: <a class="el" href="structstack.html#a6f0c4fc768c3baa72d3ac9466defd42c">stack</a>
+, <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry</a>
+, <a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">_DMXScreenInfo</a>
+, <a class="el" href="struct__myPrivate.html#a6e7a5e6234e0718d5f0d8ba03d902fcd">_myPrivate</a>
+, <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct</a>
+</li>
+<li>noCursor
+: <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo</a>
+</li>
+<li>numAbs
+: <a class="el" href="struct__myPrivate.html#a2ef864f533851d1c4a2a9f6c44400692">_myPrivate</a>
+</li>
+<li>numAbsAxes
+: <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo</a>
+</li>
+<li>number
+: <a class="el" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">_DMXConfigNumber</a>
+</li>
+<li>numButtons
+: <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo</a>
+</li>
+<li>numDevs
+: <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo</a>
+</li>
+<li>numLeds
+: <a class="el" href="struct__myPrivate.html#a06ca4d02bb8f2a1795251f496ffd3cb2">_myPrivate</a>
+</li>
+<li>numRel
+: <a class="el" href="struct__myPrivate.html#af4532a0338cfa7325e8e3b2e3deb770f">_myPrivate</a>
+</li>
+<li>numRelAxes
+: <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x6f.html b/hw/dmx/doc/html/functions_0x6f.html
new file mode 100644
index 0000000..2f12526
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x6f.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>off
+: <a class="el" href="struct__DMXLocalInputInfo.html#abbc252251f0694ad7754f021c9b0fdd4">_DMXLocalInputInfo</a>
+</li>
+<li>offscreen
+: <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv</a>
+</li>
+<li>offset
+: <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim</a>
+</li>
+<li>offX
+: <a class="el" href="struct__myPrivate.html#ac1dfcacdf4e49a146bb96f5e6ad0e5ab">_myPrivate</a>
+</li>
+<li>offY
+: <a class="el" href="struct__myPrivate.html#a3969310e24e8d98d0456e41d7b10bd6d">_myPrivate</a>
+</li>
+<li>oldSyncCount
+: <a class="el" href="struct__DMXStatInfo.html#a06c2832f03e95a2139099bbec7bd4794">_DMXStatInfo</a>
+</li>
+<li>on
+: <a class="el" href="struct__DMXLocalInputInfo.html#a52fc64a76d0954ed17a1d6ec8abbcce2">_DMXLocalInputInfo</a>
+</li>
+<li>open
+: <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">_DMXConfigVirtual</a>
+</li>
+<li>ops
+: <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv</a>
+</li>
+<li>option
+: <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption</a>
+</li>
+<li>origin
+: <a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">_DMXConfigDisplay</a>
+</li>
+<li>over
+: <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x70.html b/hw/dmx/doc/html/functions_0x70.html
new file mode 100644
index 0000000..8b45a9e
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x70.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li class="current"><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>param
+: <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub</a>
+</li>
+<li>pDevice
+: <a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">_myPrivate</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo</a>
+</li>
+<li>pending
+: <a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">_DMXStatInfo</a>
+</li>
+<li>physicalId
+: <a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">DMXInputAttributesRec</a>
+</li>
+<li>physicalScreen
+: <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec</a>
+</li>
+<li>pict
+: <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv</a>
+</li>
+<li>pitch
+: <a class="el" href="struct__myPrivate.html#ac184b2b8c6283dc678512c5f5990c0f2">_myPrivate</a>
+</li>
+<li>pixmap
+: <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv</a>
+, <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate</a>
+</li>
+<li>pKeyboard
+: <a class="el" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">_myPrivate</a>
+</li>
+<li>pMouse
+: <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate</a>
+</li>
+<li>pos
+: <a class="el" href="struct__DMXStatAvg.html#a4ee50be7c55ef55ea0e8ca9edaf2ac52">_DMXStatAvg</a>
+, <a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">DMXWindowAttributesRec</a>
+</li>
+<li>PositionWindow
+: <a class="el" href="struct__DMXScreenInfo.html#afad6bda7c2505a7fedabdf055f7838c5">_DMXScreenInfo</a>
+</li>
+<li>prefix
+: <a class="el" href="struct__myPrivate.html#a35c7eda9702b723812312689bf412424">_myPrivate</a>
+</li>
+<li>private
+: <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo</a>
+</li>
+<li>process_input
+: <a class="el" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">_DMXLocalInputInfo</a>
+</li>
+<li>processInputEvents
+: <a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">_DMXInputInfo</a>
+</li>
+<li>proximityClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">_DMXLocalInitInfo</a>
+</li>
+<li>ptrFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x72.html b/hw/dmx/doc/html/functions_0x72.html
new file mode 100644
index 0000000..23a5fc4
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x72.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>RealizeFont
+: <a class="el" href="struct__DMXScreenInfo.html#a22e93c0020eab3f889c54093ad32348e">_DMXScreenInfo</a>
+</li>
+<li>RealizeWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a2b3ed1977ce205b1bb518393e1b434f6">_DMXScreenInfo</a>
+</li>
+<li>refcnt
+: <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv</a>
+</li>
+<li>reinit
+: <a class="el" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">_DMXLocalInputInfo</a>
+</li>
+<li>relative
+: <a class="el" href="struct__myPrivate.html#a8e9a33e0e90a65241cf26f3c03e8b629">_myPrivate</a>
+</li>
+<li>relmap
+: <a class="el" href="struct__myPrivate.html#ad2d732244cdd84a0cc50bec620d50846">_myPrivate</a>
+</li>
+<li>remote
+: <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap</a>
+</li>
+<li>ReparentWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a71362d4473da8793f624eaa6a9ac61af">_DMXScreenInfo</a>
+</li>
+<li>res
+: <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo</a>
+</li>
+<li>ResizeWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a949c2799e41ad4f4384cc862df4022fd">_DMXScreenInfo</a>
+</li>
+<li>restacked
+: <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv</a>
+</li>
+<li>RestackWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a8c16eedf083215c4076fcd8851cf6bc2">_DMXScreenInfo</a>
+</li>
+<li>root
+: <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim</a>
+</li>
+<li>rootHeight
+: <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay</a>
+</li>
+<li>rootWidth
+: <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay</a>
+</li>
+<li>rootWin
+: <a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">_DMXScreenInfo</a>
+</li>
+<li>rootWindowHeight
+: <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowWidth
+: <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowXoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowXorigin
+: <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowYoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowYorigin
+: <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec</a>
+</li>
+<li>rootX
+: <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay</a>
+</li>
+<li>rootXOrigin
+: <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay</a>
+</li>
+<li>rootXSign
+: <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay</a>
+</li>
+<li>rootY
+: <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo</a>
+</li>
+<li>rootYOrigin
+: <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo</a>
+</li>
+<li>rootYSign
+: <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x73.html b/hw/dmx/doc/html/functions_0x73.html
new file mode 100644
index 0000000..8c415f4
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x73.html
@@ -0,0 +1,243 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>savedMask
+: <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv</a>
+</li>
+<li>savedMotionEvents
+: <a class="el" href="struct__DMXLocalInputInfo.html#af6c6062b7601a71a4dc0b97ef918f150">_DMXLocalInputInfo</a>
+</li>
+<li>savedMotionProc
+: <a class="el" href="struct__DMXLocalInputInfo.html#a27f8606aec1028f80bd9b21c421e78fe">_DMXLocalInputInfo</a>
+</li>
+<li>savedSendsCore
+: <a class="el" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">_DMXLocalInputInfo</a>
+</li>
+<li>savedTimeout
+: <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo</a>
+</li>
+<li>SaveScreen
+: <a class="el" href="struct__DMXScreenInfo.html#a357f02026fd7a4d50e682c87554b15a7">_DMXScreenInfo</a>
+</li>
+<li>screen
+: <a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">DMXWindowAttributesRec</a>
+</li>
+<li>screenWindowHeight
+: <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec</a>
+</li>
+<li>screenWindowWidth
+: <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec</a>
+</li>
+<li>screenWindowXoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec</a>
+</li>
+<li>screenWindowYoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec</a>
+</li>
+<li>scrn
+: <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim</a>
+</li>
+<li>scrnDefDrawables
+: <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo</a>
+</li>
+<li>scrnHeight
+: <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay</a>
+</li>
+<li>scrnIdx
+: <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo</a>
+</li>
+<li>scrnWidth
+: <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay</a>
+</li>
+<li>scrnWin
+: <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo</a>
+</li>
+<li>scrnX
+: <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay</a>
+</li>
+<li>scrnXSign
+: <a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay</a>
+</li>
+<li>scrnY
+: <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay</a>
+</li>
+<li>scrnYSign
+: <a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay</a>
+</li>
+<li>sendsCore
+: <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo</a>
+</li>
+<li>server
+: <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap</a>
+</li>
+<li>SetShape
+: <a class="el" href="struct__DMXScreenInfo.html#ad4273ba541b4d7e50c967c42d80733bb">_DMXScreenInfo</a>
+</li>
+<li>shadow
+: <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo</a>
+</li>
+<li>shadowFBImage
+: <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo</a>
+</li>
+<li>shadowGC
+: <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo</a>
+</li>
+<li>shared
+: <a class="el" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">_DMXScreenInfo</a>
+</li>
+<li>shiftX
+: <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec</a>
+</li>
+<li>shiftY
+: <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec</a>
+</li>
+<li>sigioAdded
+: <a class="el" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">_DMXInputInfo</a>
+</li>
+<li>sigioFd
+: <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo</a>
+</li>
+<li>sigioFdCount
+: <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo</a>
+</li>
+<li>sigioState
+: <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo</a>
+</li>
+<li>start
+: <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption</a>
+, <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">_DMXConfigVirtual</a>
+</li>
+<li>stat
+: <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo</a>
+</li>
+<li>step
+: <a class="el" href="structstack.html#ae67df02e6190f43909f5e055425d237e">stack</a>
+</li>
+<li>StoreColors
+: <a class="el" href="struct__DMXScreenInfo.html#addce695c56fcc40e89b5c5add6a09205">_DMXScreenInfo</a>
+</li>
+<li>strFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">_DMXLocalInitInfo</a>
+</li>
+<li>string
+: <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption</a>
+</li>
+<li>subentry
+: <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual</a>
+</li>
+<li>switch_return
+: <a class="el" href="struct__myPrivate.html#ab4797772b07f0fc6aca12ca15bf58b26">_myPrivate</a>
+</li>
+<li>switch_return_data
+: <a class="el" href="struct__myPrivate.html#a263e4371987e44a409cae181d97ce60b">_myPrivate</a>
+</li>
+<li>switched
+: <a class="el" href="struct__myPrivate.html#a7b46718db81521ae01ffbbe8f32a0203">_myPrivate</a>
+</li>
+<li>symbols
+: <a class="el" href="struct__DMXLocalInitInfo.html#a6b496d0ba54c63d406ef46ddcf714790">_DMXLocalInitInfo</a>
+, <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo</a>
+</li>
+<li>syncCount
+: <a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">_DMXStatInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x74.html b/hw/dmx/doc/html/functions_0x74.html
new file mode 100644
index 0000000..31d7e0e
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x74.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>tail
+: <a class="el" href="struct__DMXLocalInputInfo.html#aff792bdb6105dd4b58f57107e8e10ddd">_DMXLocalInputInfo</a>
+</li>
+<li>token
+: <a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">_DMXConfigToken</a>
+, <a class="el" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">_DMXConfigNumber</a>
+, <a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">_DMXConfigPair</a>
+, <a class="el" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">_DMXConfigComment</a>
+</li>
+<li>Trapezoids
+: <a class="el" href="struct__DMXScreenInfo.html#a4008b17ac4eb89816a8c2d3ce2e14421">_DMXScreenInfo</a>
+</li>
+<li>Triangles
+: <a class="el" href="struct__DMXScreenInfo.html#af37150652184c4865700576504ec9df9">_DMXScreenInfo</a>
+</li>
+<li>TriFan
+: <a class="el" href="struct__DMXScreenInfo.html#a0829ea4299b5afcb1d2f2894334fed69">_DMXScreenInfo</a>
+</li>
+<li>TriStrip
+: <a class="el" href="struct__DMXScreenInfo.html#a5918dec3813c47c24f52f076f1b05dc4">_DMXScreenInfo</a>
+</li>
+<li>tty
+: <a class="el" href="struct__myPrivate.html#a94623d180c53cc9a3902ce2c1f75529b">_myPrivate</a>
+</li>
+<li>type
+: <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry</a>
+, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x75.html b/hw/dmx/doc/html/functions_0x75.html
new file mode 100644
index 0000000..2d7e0b4
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x75.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>UnrealizeFont
+: <a class="el" href="struct__DMXScreenInfo.html#af46646c951db10afab56244b5345a6d8">_DMXScreenInfo</a>
+</li>
+<li>UnrealizeWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a7b72d30e072b0f1a5f1e89ae9c1155f0">_DMXScreenInfo</a>
+</li>
+<li>update_info
+: <a class="el" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">_DMXLocalInputInfo</a>
+</li>
+<li>update_position
+: <a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">_DMXLocalInputInfo</a>
+</li>
+<li>UpdateIndexed
+: <a class="el" href="struct__DMXScreenInfo.html#afa11a2993fe14ec90db2de382cdeb25c">_DMXScreenInfo</a>
+</li>
+<li>updateWindowInfo
+: <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo</a>
+</li>
+<li>usec
+: <a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">_DMXStatInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x76.html b/hw/dmx/doc/html/functions_0x76.html
new file mode 100644
index 0000000..eb257db
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x76.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li class="current"><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>ValidatePicture
+: <a class="el" href="struct__DMXScreenInfo.html#a627ae18aeaa92da0923ab49803470c71">_DMXScreenInfo</a>
+</li>
+<li>valuatorClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo</a>
+</li>
+<li>valuators
+: <a class="el" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">_DMXLocalInputInfo</a>
+</li>
+<li>value
+: <a class="el" href="struct__DMXStatAvg.html#a621cad02496227c50cc76aca84037b47">_DMXStatAvg</a>
+</li>
+<li>virtual
+: <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry</a>
+</li>
+<li>vis
+: <a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">DMXWindowAttributesRec</a>
+</li>
+<li>visual
+: <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv</a>
+</li>
+<li>vname
+: <a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">_DMXConfigVirtual</a>
+</li>
+<li>vt_post_switch
+: <a class="el" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">_DMXLocalInputInfo</a>
+</li>
+<li>vt_pre_switch
+: <a class="el" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">_DMXLocalInputInfo</a>
+</li>
+<li>vt_switch
+: <a class="el" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">_DMXLocalInputInfo</a>
+</li>
+<li>vt_switch_pending
+: <a class="el" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">_DMXInputInfo</a>
+</li>
+<li>vt_switched
+: <a class="el" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">_DMXInputInfo</a>
+</li>
+<li>vtcurrent
+: <a class="el" href="struct__myPrivate.html#abac94345370dae8caaf80f882ef14c8c">_myPrivate</a>
+</li>
+<li>vtno
+: <a class="el" href="struct__myPrivate.html#a463f3cda6fa6032ea0d976d35cd11c30">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x77.html b/hw/dmx/doc/html/functions_0x77.html
new file mode 100644
index 0000000..6f73df4
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x77.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li class="current"><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>wall
+: <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub</a>
+</li>
+<li>wallDim
+: <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall</a>
+</li>
+<li>where
+: <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo</a>
+</li>
+<li>whereRefScreen
+: <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo</a>
+</li>
+<li>whereX
+: <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo</a>
+</li>
+<li>whereY
+: <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo</a>
+</li>
+<li>width
+: <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate</a>
+, <a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">_DMXConfigWall</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual</a>
+, <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec</a>
+</li>
+<li>window
+: <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv</a>
+, <a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">DMXWindowAttributesRec</a>
+</li>
+<li>WindowExposures
+: <a class="el" href="struct__DMXScreenInfo.html#a526c7fea5a2a39d325eab3fd4efb503d">_DMXScreenInfo</a>
+</li>
+<li>windows
+: <a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">_DMXInputInfo</a>
+</li>
+<li>WMRunningOnBE
+: <a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">_DMXScreenInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x78.html b/hw/dmx/doc/html/functions_0x78.html
new file mode 100644
index 0000000..8ab5921
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x78.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li class="current"><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair</a>
+</li>
+<li>x_visual_class
+: <a class="el" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">dmxGlxVisualPrivate</a>
+</li>
+<li>x_visual_depth
+: <a class="el" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">dmxGlxVisualPrivate</a>
+</li>
+<li>xinputs
+: <a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">DMXConfigCmdStruct</a>
+</li>
+<li>xkb
+: <a class="el" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">_DMXLocalInitInfo</a>
+</li>
+<li>xScale
+: <a class="el" href="struct__myPrivate.html#a9f848bc9be43096be0590740a9531c4c">_myPrivate</a>
+</li>
+<li>xsign
+: <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair</a>
+</li>
+<li>xwall
+: <a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">_DMXConfigWall</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_0x79.html b/hw/dmx/doc/html/functions_0x79.html
new file mode 100644
index 0000000..e9c7da3
--- /dev/null
+++ b/hw/dmx/doc/html/functions_0x79.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_0x78.html#index_x"><span>x</span></a></li>
+ <li class="current"><a href="functions_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair</a>
+</li>
+<li>yScale
+: <a class="el" href="struct__myPrivate.html#a9d41da04ff8e8b84f9ee138edffb16c7">_myPrivate</a>
+</li>
+<li>ysign
+: <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair</a>
+</li>
+<li>ywall
+: <a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">_DMXConfigWall</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_eval.html b/hw/dmx/doc/html/functions_eval.html
new file mode 100644
index 0000000..be35dee
--- /dev/null
+++ b/hw/dmx/doc/html/functions_eval.html
@@ -0,0 +1,78 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li class="current"><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;<ul>
+<li>button1
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a">_myPrivate</a>
+</li>
+<li>button2
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0">_myPrivate</a>
+</li>
+<li>button3
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395">_myPrivate</a>
+</li>
+<li>button4
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0">_myPrivate</a>
+</li>
+<li>button5
+: <a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars.html b/hw/dmx/doc/html/functions_vars.html
new file mode 100644
index 0000000..0568426
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>absmap
+: <a class="el" href="struct__myPrivate.html#afc48f38bcefc200e681475c06fdacad6">_myPrivate</a>
+</li>
+<li>argc
+: <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg</a>
+, <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam</a>
+</li>
+<li>argm
+: <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg</a>
+</li>
+<li>argv
+: <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg</a>
+, <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam</a>
+</li>
+<li>attribMask
+: <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x62.html b/hw/dmx/doc/html/functions_vars_0x62.html
new file mode 100644
index 0000000..7bb1cdb
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x62.html
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>base
+: <a class="el" href="structstack.html#ae523dc895d308415be2aa9a6b6bdd40e">stack</a>
+</li>
+<li>beBlackPixel
+: <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo</a>
+</li>
+<li>beBPP
+: <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo</a>
+</li>
+<li>beDefColormaps
+: <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo</a>
+</li>
+<li>beDefVisualIndex
+: <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo</a>
+</li>
+<li>beDepth
+: <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo</a>
+</li>
+<li>beDepths
+: <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo</a>
+</li>
+<li>beDisplay
+: <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo</a>
+</li>
+<li>beHeight
+: <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo</a>
+</li>
+<li>belFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">_DMXLocalInitInfo</a>
+</li>
+<li>beNumDefColormaps
+: <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo</a>
+</li>
+<li>beNumDepths
+: <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo</a>
+</li>
+<li>beNumPixmapFormats
+: <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo</a>
+</li>
+<li>beNumVisuals
+: <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo</a>
+</li>
+<li>bePixmapFormats
+: <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo</a>
+</li>
+<li>beVisuals
+: <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo</a>
+</li>
+<li>beWhitePixel
+: <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo</a>
+</li>
+<li>beWidth
+: <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo</a>
+</li>
+<li>beXDPI
+: <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo</a>
+</li>
+<li>beYDPI
+: <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo</a>
+</li>
+<li>binding
+: <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo</a>
+</li>
+<li>bins
+: <a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">_DMXStatInfo</a>
+</li>
+<li>BitmapToRegion
+: <a class="el" href="struct__DMXScreenInfo.html#a1d29c3ada0aab8fbcd88c5ceaa48cf2d">_DMXScreenInfo</a>
+</li>
+<li>buttonClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo</a>
+</li>
+<li>buttons
+: <a class="el" href="struct__myPrivate.html#a8e004313d6a4cb5e86c02c2b32576af5">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x63.html b/hw/dmx/doc/html/functions_vars_0x63.html
new file mode 100644
index 0000000..b908df9
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x63.html
@@ -0,0 +1,214 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>captured
+: <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate</a>
+</li>
+<li>centerX
+: <a class="el" href="struct__myPrivate.html#a6e729bd1a19bb488a215d22e8cdc5bdc">_myPrivate</a>
+</li>
+<li>centerY
+: <a class="el" href="struct__myPrivate.html#ae9759d71e19697ba4ab27cf944deab9c">_myPrivate</a>
+</li>
+<li>ChangeBorderWidth
+: <a class="el" href="struct__DMXScreenInfo.html#a134b8b97ce93ef4601c972d0fb760e93">_DMXScreenInfo</a>
+</li>
+<li>ChangePicture
+: <a class="el" href="struct__DMXScreenInfo.html#a933b5c32ef1671dae5acc1e96b7f34e3">_DMXScreenInfo</a>
+</li>
+<li>ChangePictureClip
+: <a class="el" href="struct__DMXScreenInfo.html#a62a21ad708a96cb1653e8d572895b1de">_DMXScreenInfo</a>
+</li>
+<li>ChangeWindowAttributes
+: <a class="el" href="struct__DMXScreenInfo.html#a35d0114e24f9eeff1f5649bcb0b00d71">_DMXScreenInfo</a>
+</li>
+<li>close
+: <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">_DMXConfigVirtual</a>
+</li>
+<li>CloseIndexed
+: <a class="el" href="struct__DMXScreenInfo.html#a99c75513907782d2679bd9e2ed327621">_DMXScreenInfo</a>
+</li>
+<li>CloseScreen
+: <a class="el" href="struct__DMXScreenInfo.html#a94a4815bc20535c8946876d2113b109e">_DMXScreenInfo</a>
+, <a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">_myPrivate</a>
+</li>
+<li>cmap
+: <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv</a>
+, <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv</a>
+</li>
+<li>collect_events
+: <a class="el" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">_DMXLocalInputInfo</a>
+</li>
+<li>comment
+: <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken</a>
+, <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber</a>
+, <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair</a>
+, <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment</a>
+, <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry</a>
+, <a class="el" href="structstack.html#aab48b0e87fe50c07ec5a9ca59c8fb671">stack</a>
+</li>
+<li>Composite
+: <a class="el" href="struct__DMXScreenInfo.html#a5e70f79e08b658092d83d266686c9a67">_DMXScreenInfo</a>
+</li>
+<li>CompositeRects
+: <a class="el" href="struct__DMXScreenInfo.html#a2b5509668e39153253b7d7d945dddecb">_DMXScreenInfo</a>
+</li>
+<li>config
+: <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct</a>
+</li>
+<li>consHeight
+: <a class="el" href="struct__myPrivate.html#ab0fb948041c7994127e526d6904a1c93">_myPrivate</a>
+</li>
+<li>console
+: <a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">_DMXInputInfo</a>
+</li>
+<li>consWidth
+: <a class="el" href="struct__myPrivate.html#acedad74bc71aef05c22a25b63a435f02">_myPrivate</a>
+</li>
+<li>CopyWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a8f1472064bae45d6b59bee2580a185aa">_DMXScreenInfo</a>
+</li>
+<li>core
+: <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo</a>
+</li>
+<li>count
+: <a class="el" href="struct__DMXStatAvg.html#a361c10829231fd6805e59232321de2fe">_DMXStatAvg</a>
+</li>
+<li>create_private
+: <a class="el" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">_DMXLocalInputInfo</a>
+</li>
+<li>CreateColormap
+: <a class="el" href="struct__DMXScreenInfo.html#a082a4bae927eb9bbbd87cebdfd4d9dfc">_DMXScreenInfo</a>
+</li>
+<li>CreateGC
+: <a class="el" href="struct__DMXScreenInfo.html#a0608031d93f0f78df41e66fc8e8107cf">_DMXScreenInfo</a>
+</li>
+<li>CreatePicture
+: <a class="el" href="struct__DMXScreenInfo.html#adf17f1a03e6a5a127b02aaa9005d8089">_DMXScreenInfo</a>
+</li>
+<li>CreatePixmap
+: <a class="el" href="struct__DMXScreenInfo.html#a88d8c787b8e05b4d69fa3d91f6456542">_DMXScreenInfo</a>
+</li>
+<li>CreateWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a19123a8915a37e821ef46bc63f646d8d">_DMXScreenInfo</a>
+</li>
+<li>curCursor
+: <a class="el" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">_DMXScreenInfo</a>
+</li>
+<li>cursor
+: <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv</a>
+, <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo</a>
+</li>
+<li>cursorEmpty
+: <a class="el" href="struct__myPrivate.html#a78c2f55261e44ab6a5f7fd7a3c03a887">_myPrivate</a>
+</li>
+<li>cursorGrabbed
+: <a class="el" href="struct__myPrivate.html#a82b111d9769d9ca67449808c86effd49">_myPrivate</a>
+</li>
+<li>cursorNormal
+: <a class="el" href="struct__myPrivate.html#a5e949540b57f13f311f6e32847bc9ad1">_myPrivate</a>
+</li>
+<li>cursorNotShared
+: <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo</a>
+</li>
+<li>cursorVisible
+: <a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">_DMXScreenInfo</a>
+</li>
+<li>curX
+: <a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">_myPrivate</a>
+</li>
+<li>curY
+: <a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x64.html b/hw/dmx/doc/html/functions_vars_0x64.html
new file mode 100644
index 0000000..97a66b4
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x64.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>destroy_private
+: <a class="el" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">_DMXLocalInputInfo</a>
+</li>
+<li>DestroyColormap
+: <a class="el" href="struct__DMXScreenInfo.html#a0a407c422f268db1da74672d572102bb">_DMXScreenInfo</a>
+</li>
+<li>DestroyPicture
+: <a class="el" href="struct__DMXScreenInfo.html#a31909a1072cd78345457bd6b0c81ac1c">_DMXScreenInfo</a>
+</li>
+<li>DestroyPictureClip
+: <a class="el" href="struct__DMXScreenInfo.html#ab643ec0c295421859733b8f654ff8ce7">_DMXScreenInfo</a>
+</li>
+<li>DestroyPixmap
+: <a class="el" href="struct__DMXScreenInfo.html#adafeb1337d14d4f650098f3bd06214db">_DMXScreenInfo</a>
+</li>
+<li>DestroyWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a0d204177b5df7dab4a89741439728a56">_DMXScreenInfo</a>
+</li>
+<li>detached
+: <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo</a>
+, <a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">DMXInputAttributesRec</a>
+</li>
+<li>detachedImage
+: <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv</a>
+</li>
+<li>deviceId
+: <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo</a>
+</li>
+<li>deviceName
+: <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo</a>
+</li>
+<li>devs
+: <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo</a>
+</li>
+<li>dim
+: <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual</a>
+</li>
+<li>display
+: <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub</a>
+</li>
+<li>displayDim
+: <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall</a>
+</li>
+<li>displayName
+: <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec</a>
+</li>
+<li>displays
+: <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct</a>
+</li>
+<li>DMX_COMMON_PRIVATE
+: <a class="el" href="struct__myPrivate.html#a83c7e1a18938a3186ff337ed3a1a6b92">_myPrivate</a>
+</li>
+<li>dmxInput
+: <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate</a>
+</li>
+<li>dname
+: <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay</a>
+</li>
+<li>dpmsCapable
+: <a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">_DMXScreenInfo</a>
+</li>
+<li>dpmsEnabled
+: <a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">_DMXScreenInfo</a>
+</li>
+<li>dpmsOff
+: <a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">_DMXScreenInfo</a>
+</li>
+<li>dpmsStandby
+: <a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">_DMXScreenInfo</a>
+</li>
+<li>dpmsSuspend
+: <a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">_DMXScreenInfo</a>
+</li>
+<li>duration
+: <a class="el" href="struct__myPrivate.html#a6a27aa80849de66952d95ab65914d6da">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x65.html b/hw/dmx/doc/html/functions_vars_0x65.html
new file mode 100644
index 0000000..1d1c254
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x65.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>end
+: <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall</a>
+, <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption</a>
+</li>
+<li>entered
+: <a class="el" href="struct__myPrivate.html#ab7925907f71458986fba416d8c9b36e1">_myPrivate</a>
+</li>
+<li>extType
+: <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x66.html b/hw/dmx/doc/html/functions_vars_0x66.html
new file mode 100644
index 0000000..0206172
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x66.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>fd
+: <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate</a>
+</li>
+<li>filename
+: <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct</a>
+</li>
+<li>fine
+: <a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">_myPrivate</a>
+</li>
+<li>focusClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo</a>
+</li>
+<li>font
+: <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv</a>
+</li>
+<li>force
+: <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo</a>
+</li>
+<li>freemap
+: <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo</a>
+</li>
+<li>freename
+: <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo</a>
+</li>
+<li>freenames
+: <a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">_DMXLocalInitInfo</a>
+</li>
+<li>funcs
+: <a class="el" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">_dmxGCPriv</a>
+</li>
+<li>functions
+: <a class="el" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x67.html b/hw/dmx/doc/html/functions_vars_0x67.html
new file mode 100644
index 0000000..da1830d
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x67.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>gc
+: <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv</a>
+, <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate</a>
+</li>
+<li>gcCur
+: <a class="el" href="struct__myPrivate.html#ac926e46006665b40b4189f3a62172fa2">_myPrivate</a>
+</li>
+<li>gcDet
+: <a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">_myPrivate</a>
+</li>
+<li>gcRev
+: <a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">_myPrivate</a>
+</li>
+<li>geometry
+: <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo</a>
+</li>
+<li>get_info
+: <a class="el" href="struct__DMXLocalInputInfo.html#a4d215378947d50a9abc74adcec917313">_DMXLocalInputInfo</a>
+</li>
+<li>GetImage
+: <a class="el" href="struct__DMXScreenInfo.html#ad622affb2a1524a15f9bad149fa88f30">_DMXScreenInfo</a>
+</li>
+<li>GetSpans
+: <a class="el" href="struct__DMXScreenInfo.html#ad399c770af1784544ede0253593b3700">_DMXScreenInfo</a>
+</li>
+<li>globalX
+: <a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">_myPrivate</a>
+</li>
+<li>globalY
+: <a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">_myPrivate</a>
+</li>
+<li>Glyphs
+: <a class="el" href="struct__DMXScreenInfo.html#ab2bf09e1d055cad3ecfb1b00ddadc89e">_DMXScreenInfo</a>
+</li>
+<li>glyphSets
+: <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv</a>
+</li>
+<li>grabbed
+: <a class="el" href="struct__myPrivate.html#a9d7f5ad2b2066a328c982a2ed051cd94">_myPrivate</a>
+</li>
+<li>grabbedScreen
+: <a class="el" href="struct__myPrivate.html#a0018b915c37ea1c6f329efebbb03f297">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x68.html b/hw/dmx/doc/html/functions_vars_0x68.html
new file mode 100644
index 0000000..b5afd2d
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x68.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>hasPict
+: <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv</a>
+</li>
+<li>head
+: <a class="el" href="struct__DMXLocalInputInfo.html#a41f2eeca657b0ed5e3000a97a965cb44">_DMXLocalInputInfo</a>
+</li>
+<li>height
+: <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual</a>
+, <a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">_DMXConfigWall</a>
+, <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate</a>
+, <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec</a>
+</li>
+<li>history
+: <a class="el" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x69.html b/hw/dmx/doc/html/functions_vars_0x69.html
new file mode 100644
index 0000000..a72cf0d
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x69.html
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li class="current"><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>index
+: <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo</a>
+</li>
+<li>init
+: <a class="el" href="struct__DMXLocalInputInfo.html#ac7d8e55012dcd7fd721802069a4cda7c">_DMXLocalInputInfo</a>
+</li>
+<li>initialized
+: <a class="el" href="struct__myPrivate.html#a7a3f2b74b35ff19e8f00857d34e892f3">_myPrivate</a>
+</li>
+<li>InitIndexed
+: <a class="el" href="struct__DMXScreenInfo.html#adaae790d6f5dd1dec98e57e2e669e3fd">_DMXScreenInfo</a>
+</li>
+<li>inputIdx
+: <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo</a>
+</li>
+<li>inputs
+: <a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">DMXConfigCmdStruct</a>
+</li>
+<li>inputType
+: <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec</a>
+</li>
+<li>InstallColormap
+: <a class="el" href="struct__DMXScreenInfo.html#ab5a18ace3bb18cbcc9e127f51c494006">_DMXScreenInfo</a>
+</li>
+<li>intFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">_DMXLocalInitInfo</a>
+</li>
+<li>isCore
+: <a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">DMXInputAttributesRec</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo</a>
+</li>
+<li>isShaped
+: <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x6b.html b/hw/dmx/doc/html/functions_vars_0x6b.html
new file mode 100644
index 0000000..93a98a0
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x6b.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kbd
+: <a class="el" href="struct__myPrivate.html#a8247a272435f00e939e150d7dd7db1e0">_myPrivate</a>
+</li>
+<li>kbdFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo</a>
+</li>
+<li>kbdState
+: <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate</a>
+</li>
+<li>kbdtrans
+: <a class="el" href="struct__myPrivate.html#ade5d3520bc20cf979894ab2e2faf4903">_myPrivate</a>
+</li>
+<li>kbdtty
+: <a class="el" href="struct__myPrivate.html#a3151cfbe868cf35d0e070d554ac21ee0">_myPrivate</a>
+</li>
+<li>kbdType
+: <a class="el" href="struct__myPrivate.html#ae0dbb095f346fd577827af796f70cfe8">_myPrivate</a>
+</li>
+<li>kBell
+: <a class="el" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">_DMXLocalInputInfo</a>
+</li>
+<li>kCtrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">_DMXLocalInputInfo</a>
+</li>
+<li>kctrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">_DMXLocalInputInfo</a>
+</li>
+<li>keyboard
+: <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo</a>
+</li>
+<li>keyClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo</a>
+</li>
+<li>keycodes
+: <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo</a>
+</li>
+<li>keySyms
+: <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x6c.html b/hw/dmx/doc/html/functions_vars_0x6c.html
new file mode 100644
index 0000000..4e8531a
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x6c.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>lastX
+: <a class="el" href="struct__myPrivate.html#aeb80240bdd4d585ecf2ab890a2e74369">_myPrivate</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a65e0e7a4d6928067ba63183c7ddbd03c">_DMXLocalInputInfo</a>
+</li>
+<li>lastY
+: <a class="el" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">_DMXLocalInputInfo</a>
+, <a class="el" href="struct__myPrivate.html#a25344ec18eba85efb5017bf848f152f4">_myPrivate</a>
+</li>
+<li>latereinit
+: <a class="el" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">_DMXLocalInputInfo</a>
+</li>
+<li>ledFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">_DMXLocalInitInfo</a>
+</li>
+<li>line
+: <a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">_DMXConfigToken</a>
+, <a class="el" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">_DMXConfigNumber</a>
+, <a class="el" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">_DMXConfigComment</a>
+, <a class="el" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">_DMXConfigPair</a>
+</li>
+<li>logicalScreen
+: <a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">DMXScreenAttributesRec</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x6d.html b/hw/dmx/doc/html/functions_vars_0x6d.html
new file mode 100644
index 0000000..d4b701f
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x6d.html
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>map
+: <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo</a>
+</li>
+<li>mapOptimize
+: <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo</a>
+</li>
+<li>mapped
+: <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv</a>
+</li>
+<li>mask
+: <a class="el" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">_myPrivate</a>
+</li>
+<li>maxres
+: <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo</a>
+</li>
+<li>maxSymbols
+: <a class="el" href="struct__DMXLocalInitInfo.html#ae5dc18536a191e46bfe6682f82afd583">_DMXLocalInitInfo</a>
+</li>
+<li>maxSymbolsSupported
+: <a class="el" href="struct__DMXLocalInitInfo.html#a8a8933752768b613acbda0743bbcfbe6">_DMXLocalInitInfo</a>
+</li>
+<li>maxval
+: <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo</a>
+</li>
+<li>mCtrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">_DMXLocalInputInfo</a>
+</li>
+<li>mctrl
+: <a class="el" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">_DMXLocalInputInfo</a>
+</li>
+<li>minres
+: <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo</a>
+</li>
+<li>minval
+: <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo</a>
+</li>
+<li>modMap
+: <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo</a>
+</li>
+<li>mou
+: <a class="el" href="struct__myPrivate.html#ab5f8fb12758800c1fbcd95b731ebbee8">_myPrivate</a>
+</li>
+<li>msc
+: <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv</a>
+</li>
+<li>myScreen
+: <a class="el" href="struct__myPrivate.html#a2097f51728e0db5f4fdc91e7d0613bf7">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x6e.html b/hw/dmx/doc/html/functions_vars_0x6e.html
new file mode 100644
index 0000000..7e13e9f
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x6e.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>name
+: <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo</a>
+, <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">_DMXLocalInputInfo</a>
+, <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct</a>
+, <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual</a>
+</li>
+<li>nameList
+: <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall</a>
+</li>
+<li>names
+: <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo</a>
+</li>
+<li>needsSync
+: <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo</a>
+</li>
+<li>newscreen
+: <a class="el" href="struct__myPrivate.html#ad3ad48a8cbc0038ae091dbd8bd9e55a1">_myPrivate</a>
+</li>
+<li>next
+: <a class="el" href="structstack.html#a6f0c4fc768c3baa72d3ac9466defd42c">stack</a>
+, <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry</a>
+, <a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">_DMXScreenInfo</a>
+, <a class="el" href="struct__myPrivate.html#a6e7a5e6234e0718d5f0d8ba03d902fcd">_myPrivate</a>
+, <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct</a>
+</li>
+<li>noCursor
+: <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo</a>
+</li>
+<li>numAbs
+: <a class="el" href="struct__myPrivate.html#a2ef864f533851d1c4a2a9f6c44400692">_myPrivate</a>
+</li>
+<li>numAbsAxes
+: <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo</a>
+</li>
+<li>number
+: <a class="el" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">_DMXConfigNumber</a>
+</li>
+<li>numButtons
+: <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo</a>
+</li>
+<li>numDevs
+: <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo</a>
+</li>
+<li>numLeds
+: <a class="el" href="struct__myPrivate.html#a06ca4d02bb8f2a1795251f496ffd3cb2">_myPrivate</a>
+</li>
+<li>numRel
+: <a class="el" href="struct__myPrivate.html#af4532a0338cfa7325e8e3b2e3deb770f">_myPrivate</a>
+</li>
+<li>numRelAxes
+: <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x6f.html b/hw/dmx/doc/html/functions_vars_0x6f.html
new file mode 100644
index 0000000..d518d36
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x6f.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>off
+: <a class="el" href="struct__DMXLocalInputInfo.html#abbc252251f0694ad7754f021c9b0fdd4">_DMXLocalInputInfo</a>
+</li>
+<li>offscreen
+: <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv</a>
+</li>
+<li>offset
+: <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim</a>
+</li>
+<li>offX
+: <a class="el" href="struct__myPrivate.html#ac1dfcacdf4e49a146bb96f5e6ad0e5ab">_myPrivate</a>
+</li>
+<li>offY
+: <a class="el" href="struct__myPrivate.html#a3969310e24e8d98d0456e41d7b10bd6d">_myPrivate</a>
+</li>
+<li>oldSyncCount
+: <a class="el" href="struct__DMXStatInfo.html#a06c2832f03e95a2139099bbec7bd4794">_DMXStatInfo</a>
+</li>
+<li>on
+: <a class="el" href="struct__DMXLocalInputInfo.html#a52fc64a76d0954ed17a1d6ec8abbcce2">_DMXLocalInputInfo</a>
+</li>
+<li>open
+: <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">_DMXConfigVirtual</a>
+</li>
+<li>ops
+: <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv</a>
+</li>
+<li>option
+: <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption</a>
+</li>
+<li>origin
+: <a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">_DMXConfigDisplay</a>
+</li>
+<li>over
+: <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x70.html b/hw/dmx/doc/html/functions_vars_0x70.html
new file mode 100644
index 0000000..5325de9
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x70.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li class="current"><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>param
+: <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub</a>
+</li>
+<li>pDevice
+: <a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">_myPrivate</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo</a>
+</li>
+<li>pending
+: <a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">_DMXStatInfo</a>
+</li>
+<li>physicalId
+: <a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">DMXInputAttributesRec</a>
+</li>
+<li>physicalScreen
+: <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec</a>
+</li>
+<li>pict
+: <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv</a>
+</li>
+<li>pitch
+: <a class="el" href="struct__myPrivate.html#ac184b2b8c6283dc678512c5f5990c0f2">_myPrivate</a>
+</li>
+<li>pixmap
+: <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv</a>
+, <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate</a>
+</li>
+<li>pKeyboard
+: <a class="el" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">_myPrivate</a>
+</li>
+<li>pMouse
+: <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate</a>
+</li>
+<li>pos
+: <a class="el" href="struct__DMXStatAvg.html#a4ee50be7c55ef55ea0e8ca9edaf2ac52">_DMXStatAvg</a>
+, <a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">DMXWindowAttributesRec</a>
+</li>
+<li>PositionWindow
+: <a class="el" href="struct__DMXScreenInfo.html#afad6bda7c2505a7fedabdf055f7838c5">_DMXScreenInfo</a>
+</li>
+<li>prefix
+: <a class="el" href="struct__myPrivate.html#a35c7eda9702b723812312689bf412424">_myPrivate</a>
+</li>
+<li>private
+: <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo</a>
+</li>
+<li>process_input
+: <a class="el" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">_DMXLocalInputInfo</a>
+</li>
+<li>processInputEvents
+: <a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">_DMXInputInfo</a>
+</li>
+<li>proximityClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">_DMXLocalInitInfo</a>
+</li>
+<li>ptrFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x72.html b/hw/dmx/doc/html/functions_vars_0x72.html
new file mode 100644
index 0000000..ea2f1c4
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x72.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>RealizeFont
+: <a class="el" href="struct__DMXScreenInfo.html#a22e93c0020eab3f889c54093ad32348e">_DMXScreenInfo</a>
+</li>
+<li>RealizeWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a2b3ed1977ce205b1bb518393e1b434f6">_DMXScreenInfo</a>
+</li>
+<li>refcnt
+: <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv</a>
+</li>
+<li>reinit
+: <a class="el" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">_DMXLocalInputInfo</a>
+</li>
+<li>relative
+: <a class="el" href="struct__myPrivate.html#a8e9a33e0e90a65241cf26f3c03e8b629">_myPrivate</a>
+</li>
+<li>relmap
+: <a class="el" href="struct__myPrivate.html#ad2d732244cdd84a0cc50bec620d50846">_myPrivate</a>
+</li>
+<li>remote
+: <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap</a>
+</li>
+<li>ReparentWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a71362d4473da8793f624eaa6a9ac61af">_DMXScreenInfo</a>
+</li>
+<li>res
+: <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo</a>
+</li>
+<li>ResizeWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a949c2799e41ad4f4384cc862df4022fd">_DMXScreenInfo</a>
+</li>
+<li>restacked
+: <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv</a>
+</li>
+<li>RestackWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a8c16eedf083215c4076fcd8851cf6bc2">_DMXScreenInfo</a>
+</li>
+<li>root
+: <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim</a>
+</li>
+<li>rootHeight
+: <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay</a>
+</li>
+<li>rootWidth
+: <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay</a>
+</li>
+<li>rootWin
+: <a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">_DMXScreenInfo</a>
+</li>
+<li>rootWindowHeight
+: <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowWidth
+: <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowXoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowXorigin
+: <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowYoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec</a>
+</li>
+<li>rootWindowYorigin
+: <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec</a>
+</li>
+<li>rootX
+: <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay</a>
+</li>
+<li>rootXOrigin
+: <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay</a>
+</li>
+<li>rootXSign
+: <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay</a>
+</li>
+<li>rootY
+: <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo</a>
+</li>
+<li>rootYOrigin
+: <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo</a>
+</li>
+<li>rootYSign
+: <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x73.html b/hw/dmx/doc/html/functions_vars_0x73.html
new file mode 100644
index 0000000..68f5f7b
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x73.html
@@ -0,0 +1,243 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>savedMask
+: <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv</a>
+</li>
+<li>savedMotionEvents
+: <a class="el" href="struct__DMXLocalInputInfo.html#af6c6062b7601a71a4dc0b97ef918f150">_DMXLocalInputInfo</a>
+</li>
+<li>savedMotionProc
+: <a class="el" href="struct__DMXLocalInputInfo.html#a27f8606aec1028f80bd9b21c421e78fe">_DMXLocalInputInfo</a>
+</li>
+<li>savedSendsCore
+: <a class="el" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">_DMXLocalInputInfo</a>
+</li>
+<li>savedTimeout
+: <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo</a>
+</li>
+<li>SaveScreen
+: <a class="el" href="struct__DMXScreenInfo.html#a357f02026fd7a4d50e682c87554b15a7">_DMXScreenInfo</a>
+</li>
+<li>screen
+: <a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">DMXWindowAttributesRec</a>
+</li>
+<li>screenWindowHeight
+: <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec</a>
+</li>
+<li>screenWindowWidth
+: <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec</a>
+</li>
+<li>screenWindowXoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec</a>
+</li>
+<li>screenWindowYoffset
+: <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec</a>
+</li>
+<li>scrn
+: <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim</a>
+</li>
+<li>scrnDefDrawables
+: <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo</a>
+</li>
+<li>scrnHeight
+: <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay</a>
+</li>
+<li>scrnIdx
+: <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo</a>
+</li>
+<li>scrnWidth
+: <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay</a>
+</li>
+<li>scrnWin
+: <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo</a>
+</li>
+<li>scrnX
+: <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay</a>
+</li>
+<li>scrnXSign
+: <a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay</a>
+</li>
+<li>scrnY
+: <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay</a>
+</li>
+<li>scrnYSign
+: <a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">_DMXScreenInfo</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay</a>
+</li>
+<li>sendsCore
+: <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo</a>
+</li>
+<li>server
+: <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap</a>
+</li>
+<li>SetShape
+: <a class="el" href="struct__DMXScreenInfo.html#ad4273ba541b4d7e50c967c42d80733bb">_DMXScreenInfo</a>
+</li>
+<li>shadow
+: <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo</a>
+</li>
+<li>shadowFBImage
+: <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo</a>
+</li>
+<li>shadowGC
+: <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo</a>
+</li>
+<li>shared
+: <a class="el" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">_DMXScreenInfo</a>
+</li>
+<li>shiftX
+: <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec</a>
+</li>
+<li>shiftY
+: <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec</a>
+</li>
+<li>sigioAdded
+: <a class="el" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">_DMXInputInfo</a>
+</li>
+<li>sigioFd
+: <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo</a>
+</li>
+<li>sigioFdCount
+: <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo</a>
+</li>
+<li>sigioState
+: <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo</a>
+</li>
+<li>start
+: <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall</a>
+, <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay</a>
+, <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption</a>
+, <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">_DMXConfigVirtual</a>
+</li>
+<li>stat
+: <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo</a>
+</li>
+<li>step
+: <a class="el" href="structstack.html#ae67df02e6190f43909f5e055425d237e">stack</a>
+</li>
+<li>StoreColors
+: <a class="el" href="struct__DMXScreenInfo.html#addce695c56fcc40e89b5c5add6a09205">_DMXScreenInfo</a>
+</li>
+<li>strFeedbackClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">_DMXLocalInitInfo</a>
+</li>
+<li>string
+: <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption</a>
+</li>
+<li>subentry
+: <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual</a>
+</li>
+<li>switch_return
+: <a class="el" href="struct__myPrivate.html#ab4797772b07f0fc6aca12ca15bf58b26">_myPrivate</a>
+</li>
+<li>switch_return_data
+: <a class="el" href="struct__myPrivate.html#a263e4371987e44a409cae181d97ce60b">_myPrivate</a>
+</li>
+<li>switched
+: <a class="el" href="struct__myPrivate.html#a7b46718db81521ae01ffbbe8f32a0203">_myPrivate</a>
+</li>
+<li>symbols
+: <a class="el" href="struct__DMXLocalInitInfo.html#a6b496d0ba54c63d406ef46ddcf714790">_DMXLocalInitInfo</a>
+, <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo</a>
+</li>
+<li>syncCount
+: <a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">_DMXStatInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x74.html b/hw/dmx/doc/html/functions_vars_0x74.html
new file mode 100644
index 0000000..9a40b4d
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x74.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>tail
+: <a class="el" href="struct__DMXLocalInputInfo.html#aff792bdb6105dd4b58f57107e8e10ddd">_DMXLocalInputInfo</a>
+</li>
+<li>token
+: <a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">_DMXConfigToken</a>
+, <a class="el" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">_DMXConfigNumber</a>
+, <a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">_DMXConfigPair</a>
+, <a class="el" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">_DMXConfigString</a>
+, <a class="el" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">_DMXConfigComment</a>
+</li>
+<li>Trapezoids
+: <a class="el" href="struct__DMXScreenInfo.html#a4008b17ac4eb89816a8c2d3ce2e14421">_DMXScreenInfo</a>
+</li>
+<li>Triangles
+: <a class="el" href="struct__DMXScreenInfo.html#af37150652184c4865700576504ec9df9">_DMXScreenInfo</a>
+</li>
+<li>TriFan
+: <a class="el" href="struct__DMXScreenInfo.html#a0829ea4299b5afcb1d2f2894334fed69">_DMXScreenInfo</a>
+</li>
+<li>TriStrip
+: <a class="el" href="struct__DMXScreenInfo.html#a5918dec3813c47c24f52f076f1b05dc4">_DMXScreenInfo</a>
+</li>
+<li>tty
+: <a class="el" href="struct__myPrivate.html#a94623d180c53cc9a3902ce2c1f75529b">_myPrivate</a>
+</li>
+<li>type
+: <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry</a>
+, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub</a>
+, <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x75.html b/hw/dmx/doc/html/functions_vars_0x75.html
new file mode 100644
index 0000000..a27e102
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x75.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>UnrealizeFont
+: <a class="el" href="struct__DMXScreenInfo.html#af46646c951db10afab56244b5345a6d8">_DMXScreenInfo</a>
+</li>
+<li>UnrealizeWindow
+: <a class="el" href="struct__DMXScreenInfo.html#a7b72d30e072b0f1a5f1e89ae9c1155f0">_DMXScreenInfo</a>
+</li>
+<li>update_info
+: <a class="el" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">_DMXLocalInputInfo</a>
+</li>
+<li>update_position
+: <a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">_DMXLocalInputInfo</a>
+</li>
+<li>UpdateIndexed
+: <a class="el" href="struct__DMXScreenInfo.html#afa11a2993fe14ec90db2de382cdeb25c">_DMXScreenInfo</a>
+</li>
+<li>updateWindowInfo
+: <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo</a>
+</li>
+<li>usec
+: <a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">_DMXStatInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x76.html b/hw/dmx/doc/html/functions_vars_0x76.html
new file mode 100644
index 0000000..f9197c0
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x76.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li class="current"><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>ValidatePicture
+: <a class="el" href="struct__DMXScreenInfo.html#a627ae18aeaa92da0923ab49803470c71">_DMXScreenInfo</a>
+</li>
+<li>valuatorClass
+: <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo</a>
+</li>
+<li>valuators
+: <a class="el" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">_DMXLocalInputInfo</a>
+</li>
+<li>value
+: <a class="el" href="struct__DMXStatAvg.html#a621cad02496227c50cc76aca84037b47">_DMXStatAvg</a>
+</li>
+<li>virtual
+: <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry</a>
+</li>
+<li>vis
+: <a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">DMXWindowAttributesRec</a>
+</li>
+<li>visual
+: <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv</a>
+</li>
+<li>vname
+: <a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">_DMXConfigVirtual</a>
+</li>
+<li>vt_post_switch
+: <a class="el" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">_DMXLocalInputInfo</a>
+</li>
+<li>vt_pre_switch
+: <a class="el" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">_DMXLocalInputInfo</a>
+</li>
+<li>vt_switch
+: <a class="el" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">_DMXLocalInputInfo</a>
+</li>
+<li>vt_switch_pending
+: <a class="el" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">_DMXInputInfo</a>
+</li>
+<li>vt_switched
+: <a class="el" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">_DMXInputInfo</a>
+</li>
+<li>vtcurrent
+: <a class="el" href="struct__myPrivate.html#abac94345370dae8caaf80f882ef14c8c">_myPrivate</a>
+</li>
+<li>vtno
+: <a class="el" href="struct__myPrivate.html#a463f3cda6fa6032ea0d976d35cd11c30">_myPrivate</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x77.html b/hw/dmx/doc/html/functions_vars_0x77.html
new file mode 100644
index 0000000..a816c08
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x77.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li class="current"><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>wall
+: <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub</a>
+</li>
+<li>wallDim
+: <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall</a>
+</li>
+<li>where
+: <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo</a>
+</li>
+<li>whereRefScreen
+: <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo</a>
+</li>
+<li>whereX
+: <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo</a>
+</li>
+<li>whereY
+: <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo</a>
+</li>
+<li>width
+: <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate</a>
+, <a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">_DMXConfigWall</a>
+, <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual</a>
+, <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec</a>
+</li>
+<li>window
+: <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv</a>
+, <a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">DMXWindowAttributesRec</a>
+</li>
+<li>WindowExposures
+: <a class="el" href="struct__DMXScreenInfo.html#a526c7fea5a2a39d325eab3fd4efb503d">_DMXScreenInfo</a>
+</li>
+<li>windows
+: <a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">_DMXInputInfo</a>
+</li>
+<li>WMRunningOnBE
+: <a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">_DMXScreenInfo</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x78.html b/hw/dmx/doc/html/functions_vars_0x78.html
new file mode 100644
index 0000000..635a2a8
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x78.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li class="current"><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair</a>
+</li>
+<li>x_visual_class
+: <a class="el" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">dmxGlxVisualPrivate</a>
+</li>
+<li>x_visual_depth
+: <a class="el" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">dmxGlxVisualPrivate</a>
+</li>
+<li>xinputs
+: <a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">DMXConfigCmdStruct</a>
+</li>
+<li>xkb
+: <a class="el" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">_DMXLocalInitInfo</a>
+</li>
+<li>xScale
+: <a class="el" href="struct__myPrivate.html#a9f848bc9be43096be0590740a9531c4c">_myPrivate</a>
+</li>
+<li>xsign
+: <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair</a>
+</li>
+<li>xwall
+: <a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">_DMXConfigWall</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/functions_vars_0x79.html b/hw/dmx/doc/html/functions_vars_0x79.html
new file mode 100644
index 0000000..908b133
--- /dev/null
+++ b/hw/dmx/doc/html/functions_vars_0x79.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li class="current"><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="functions.html"><span>All</span></a></li>
+ <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+ <li><a href="functions_eval.html"><span>Enumerator</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="functions_vars.html#index_a"><span>a</span></a></li>
+ <li><a href="functions_vars_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="functions_vars_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="functions_vars_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="functions_vars_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="functions_vars_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="functions_vars_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="functions_vars_0x68.html#index_h"><span>h</span></a></li>
+ <li><a href="functions_vars_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="functions_vars_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="functions_vars_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="functions_vars_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="functions_vars_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="functions_vars_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="functions_vars_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="functions_vars_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="functions_vars_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="functions_vars_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="functions_vars_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="functions_vars_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="functions_vars_0x77.html#index_w"><span>w</span></a></li>
+ <li><a href="functions_vars_0x78.html#index_x"><span>x</span></a></li>
+ <li class="current"><a href="functions_vars_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('functions.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair</a>
+</li>
+<li>yScale
+: <a class="el" href="struct__myPrivate.html#a9d41da04ff8e8b84f9ee138edffb16c7">_myPrivate</a>
+</li>
+<li>ysign
+: <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair</a>
+</li>
+<li>ywall
+: <a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">_DMXConfigWall</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals.html b/hw/dmx/doc/html/globals.html
new file mode 100644
index 0000000..95e1064
--- /dev/null
+++ b/hw/dmx/doc/html/globals.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_dmxChangePointerControl()
+: <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">dmxinputinit.c</a>
+</li>
+<li>_dmxDPMSInit()
+: <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">dmxdpms.c</a>
+</li>
+<li>_dmxKeyboardBellProc()
+: <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">dmxinputinit.c</a>
+</li>
+<li>_dmxKeyboardKbdCtrlProc()
+: <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">dmxinputinit.c</a>
+</li>
+<li>_dmxMoveCursor()
+: <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">dmxcursor.c</a>
+</li>
+<li>_dmxRealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">dmxcursor.c</a>
+</li>
+<li>_dmxSetCursor()
+: <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">dmxcursor.c</a>
+</li>
+<li>_dmxUnrealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">dmxcursor.c</a>
+</li>
+<li>_DMXXineramaActive()
+: <a class="el" href="dmx_8c.html#a9760de3bc5bce0c3fcb7eda8afdafcb7">dmx.c</a>
+</li>
+<li>_Xevent_to_mask
+: <a class="el" href="ChkNotMaskEv_8c.html#a653c12c824c0297b32b16e69fdc6b1a5">ChkNotMaskEv.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x61.html b/hw/dmx/doc/html/globals_0x61.html
new file mode 100644
index 0000000..c67993b
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x61.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li class="current"><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>AbortDDX()
+: <a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">dmxinit.c</a>
+</li>
+<li>AbortServer()
+: <a class="el" href="dmxlog_8c.html#a50d079f944b71e881c0c58562f96c6ad">dmxlog.c</a>
+</li>
+<li>aboutpopup
+: <a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">xdmxconfig.c</a>
+</li>
+<li>ABS_BRAKE
+: <a class="el" href="usb-private_8h.html#a28f782ce9e5d1e3cff987901a7bf6823">usb-private.h</a>
+</li>
+<li>ABS_GAS
+: <a class="el" href="usb-private_8h.html#acf2960996b3a73cfa447e18a655690c5">usb-private.h</a>
+</li>
+<li>ABS_WHEEL
+: <a class="el" href="usb-private_8h.html#abc57d88f908f35bd3c82ba7dff0d97e7">usb-private.h</a>
+</li>
+<li>ADD
+: <a class="el" href="dmxcommon_8c.html#ad9bd99dabcb14e9efe85df040d63c4b3">dmxcommon.c</a>
+</li>
+<li>at2lnx
+: <a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">lnx-keyboard.c</a>
+</li>
+<li>avg()
+: <a class="el" href="dmxstat_8c.html#aeccae65bbc33f6b7717b2dc1a536d3cd">dmxstat.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x62.html b/hw/dmx/doc/html/globals_0x62.html
new file mode 100644
index 0000000..12bfaac
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x62.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BLOCK
+: <a class="el" href="lnx-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a52220397ecea855b3a99746e451426e1">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a52220397ecea855b3a99746e451426e1">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">usb-keyboard.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a52220397ecea855b3a99746e451426e1">lnx-ps2.c</a>
+, <a class="el" href="usb-other_8c.html#a52220397ecea855b3a99746e451426e1">usb-other.c</a>
+, <a class="el" href="usb-mouse_8c.html#a52220397ecea855b3a99746e451426e1">usb-mouse.c</a>
+</li>
+<li>BTN_DEAD
+: <a class="el" href="usb-private_8h.html#a0774f9bbd6ba5b888d42a088b906deaf">usb-private.h</a>
+</li>
+<li>BTN_THUMBL
+: <a class="el" href="usb-private_8h.html#ad7efb66d8b7e7e5ef815d869534a769e">usb-private.h</a>
+</li>
+<li>BTN_THUMBR
+: <a class="el" href="usb-private_8h.html#ab637d656fd23697017c9b50be714119d">usb-private.h</a>
+</li>
+<li>buttonpopup
+: <a class="el" href="xdmxconfig_8c.html#acad0e44da558823cb3c1d09d76652bb0">xdmxconfig.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x63.html b/hw/dmx/doc/html/globals_0x63.html
new file mode 100644
index 0000000..70edb91
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x63.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>canvas
+: <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">xdmxconfig.c</a>
+</li>
+<li>cdimbox
+: <a class="el" href="xdmxconfig_8c.html#ade389d0f04ea208e93527bb1d8bd8a1c">xdmxconfig.c</a>
+</li>
+<li>ChangeDeviceControl()
+: <a class="el" href="dmxxinput_8c.html#ae8839ac736a195a19dd4b60653b5507b">dmxxinput.c</a>
+</li>
+<li>ChangeDeviceNotify
+: <a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">dmxclient.h</a>
+</li>
+<li>CHECKPROC
+: <a class="el" href="usb-common_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">lnx-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-other.c</a>
+, <a class="el" href="lnx-ms_8c.html#aa35a985e998ad5e2187e13434dca118a">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#aa35a985e998ad5e2187e13434dca118a">lnx-ps2.c</a>
+</li>
+<li>CloseInput()
+: <a class="el" href="dmxinput_8c.html#a4f9d470e1f20101d9951d1dfcdca7d4e">dmxinput.c</a>
+</li>
+<li>cnamebox
+: <a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">xdmxconfig.c</a>
+</li>
+<li>connBlockScreenStart
+: <a class="el" href="dmxcb_8c.html#a21fd58c4d3a6b5bba84476c314a6d657">dmxcb.c</a>
+</li>
+<li>CONSOLE_BG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a6fe0e39a803f195f4b98f0a771b7770a">dmxconsole.c</a>
+</li>
+<li>CONSOLE_DEN
+: <a class="el" href="dmxconsole_8c.html#a9966cd444cfac23d54a82230ea4d1abb">dmxconsole.c</a>
+</li>
+<li>CONSOLE_FG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a28d20c43c4cde047ef8db075a3c92ead">dmxconsole.c</a>
+</li>
+<li>CONSOLE_NUM
+: <a class="el" href="dmxconsole_8c.html#af1044436ff6b782c51553425ab4886a9">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_BG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a8a86151c856b02dd2d832ab6420358a0">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_CUR_COLOR
+: <a class="el" href="dmxconsole_8c.html#a3493122f5e207552fb641de41c77df82">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_DET_COLOR
+: <a class="el" href="dmxconsole_8c.html#a34059c2f2d177a788cef1f14697c4dc4">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_FG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a9b686d2ada1bab9f9a84a5985baab548">dmxconsole.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x64.html b/hw/dmx/doc/html/globals_0x64.html
new file mode 100644
index 0000000..c067586
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x64.html
@@ -0,0 +1,3045 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dcbutton
+: <a class="el" href="xdmxconfig_8c.html#aa702bb96d419e4b93256107f61f54b96">xdmxconfig.c</a>
+</li>
+<li>ddbutton
+: <a class="el" href="xdmxconfig_8c.html#a43d831fb3dc9d33f8f6732e9407a3fa6">xdmxconfig.c</a>
+</li>
+<li>ddxGiveUp()
+: <a class="el" href="dmxinit_8c.html#a37656cea0c901129a2feb6564a6dbfea">dmxinit.c</a>
+</li>
+<li>ddxProcessArgument()
+: <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">dmxinit.c</a>
+</li>
+<li>DDXRingBell()
+: <a class="el" href="dmxinputinit_8c.html#ae708022d89f6e39813b8db1389bf64fe">dmxinputinit.c</a>
+</li>
+<li>ddxUseMsg()
+: <a class="el" href="dmxinit_8c.html#add8bf8bb09cff9a75fb84594b08baa5a">dmxinit.c</a>
+</li>
+<li>defaultFont
+: <a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">dmxextension.c</a>
+</li>
+<li>DeleteInputDeviceRequest()
+: <a class="el" href="dmxinput_8c.html#aad5437e77e383efb20d0720f2afe863a">dmxinput.c</a>
+</li>
+<li>DeviceFocusIn
+: <a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">dmxclient.h</a>
+</li>
+<li>DeviceFocusOut
+: <a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">dmxclient.h</a>
+</li>
+<li>DeviceMappingNotify
+: <a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">dmxclient.h</a>
+</li>
+<li>DeviceMotionNotify
+: <a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">dmxclient.h</a>
+</li>
+<li>DeviceStateNotify
+: <a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">dmxclient.h</a>
+</li>
+<li>DeviceValuator
+: <a class="el" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">dmxclient.h</a>
+</li>
+<li>dimbox
+: <a class="el" href="xdmxconfig_8c.html#ad5d5209613aeed1c3d40068bd107bf56">xdmxconfig.c</a>
+</li>
+<li>display
+: <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">dmxprop.c</a>
+</li>
+<li>DMX_ABSOLUTE
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">dmxinputinit.h</a>
+</li>
+<li>DMX_ABSOLUTE_CONFINED
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">dmxinputinit.h</a>
+</li>
+<li>DMX_ACTIVESIGIO
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">dmxinput.h</a>
+</li>
+<li>DMX_ARG_TEST
+: <a class="el" href="dmxarg_8c.html#a6da7af093c10727644c84f2c0de19dae">dmxarg.c</a>
+</li>
+<li>DMX_ATOMNAME
+: <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">dmxprop.c</a>
+</li>
+<li>DMX_BACKEND_DEBUG
+: <a class="el" href="dmxbackend_8c.html#a93e9da9032ea981dd2543ec373eb964f">dmxbackend.c</a>
+</li>
+<li>DMX_BLOCK
+: <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f">dmxinput.h</a>
+</li>
+<li>DMX_CANVAS_HEIGHT
+: <a class="el" href="xdmxconfig_8c.html#aeef510f1ba3b95b6c6bccdf44c368a9b">xdmxconfig.c</a>
+</li>
+<li>DMX_CANVAS_WIDTH
+: <a class="el" href="xdmxconfig_8c.html#a4a00c4b6ff866ade978aed2dc1e7869c">xdmxconfig.c</a>
+</li>
+<li>DMX_COMMON_OTHER
+: <a class="el" href="dmxcommon_8h.html#ac501f773a244037a88da37c0dc48ac66">dmxcommon.h</a>
+</li>
+<li>DMX_COMMON_PRIVATE
+: <a class="el" href="dmxcommon_8h.html#a6f802c6dc60aba1cbf8c1246cb5a4be4">dmxcommon.h</a>
+</li>
+<li>DMX_COMMON_XKB
+: <a class="el" href="dmxcommon_8h.html#ac4c9fac008144d96c6bd6313b5e158d2">dmxcommon.h</a>
+</li>
+<li>DMX_CONSOLE_DEBUG
+: <a class="el" href="dmxconsole_8c.html#ae6c4c4e74cae671c41da9251ce9f1fc1">dmxconsole.c</a>
+</li>
+<li>DMX_CONSOLE_NAME
+: <a class="el" href="dmxconsole_8c.html#a8ac83cbd82d4f8ec05a6d83a0b8b447f">dmxconsole.c</a>
+</li>
+<li>DMX_CURSOR_DEBUG
+: <a class="el" href="dmxcursor_8c.html#a757d7359cf12591268a62c0974178079">dmxcursor.c</a>
+</li>
+<li>DMX_DATA_HEIGHT
+: <a class="el" href="xdmxconfig_8c.html#a9bdedff1c4e130521fc21098486373f5">xdmxconfig.c</a>
+</li>
+<li>DMX_DATA_WIDTH
+: <a class="el" href="xdmxconfig_8c.html#ac3ced6b90c92cd30147cab91dd5cb3ac">xdmxconfig.c</a>
+</li>
+<li>DMX_ERROR_BUF_SIZE
+: <a class="el" href="dmxinit_8c.html#a9ddbdcc93fbd282591a6658afc26faac">dmxinit.c</a>
+</li>
+<li>DMX_EVENTS_DEBUG
+: <a class="el" href="dmxevents_8c.html#a21de6bc79e2465ef06f9bc1c3fb8071f">dmxevents.c</a>
+</li>
+<li>DMX_FONTPATH_DEBUG
+: <a class="el" href="dmxfont_8c.html#af802427439f07d76ba970ca41f6dd7c1">dmxfont.c</a>
+</li>
+<li>DMX_FUNCTION_FINE
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">dmxinputinit.h</a>
+</li>
+<li>DMX_FUNCTION_GRAB
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">dmxinputinit.h</a>
+</li>
+<li>DMX_FUNCTION_TERMINATE
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">dmxinputinit.h</a>
+</li>
+<li>DMX_GC_FUNC_EPILOGUE
+: <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">dmxgc.h</a>
+</li>
+<li>DMX_GC_FUNC_PROLOGUE
+: <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">dmxgc.h</a>
+</li>
+<li>DMX_GCOPS_OFFSCREEN
+: <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">dmxgcops.c</a>
+</li>
+<li>DMX_GCOPS_SET_DRAWABLE
+: <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">dmxgcops.c</a>
+</li>
+<li>DMX_GET_COLORMAP_PRIV
+: <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">dmxcmap.h</a>
+</li>
+<li>DMX_GET_CURSOR_PRIV
+: <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">dmxcursor.h</a>
+</li>
+<li>DMX_GET_GC_PRIV
+: <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">dmxgc.h</a>
+</li>
+<li>DMX_GET_GLYPH_PRIV
+: <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">dmxpict.h</a>
+</li>
+<li>DMX_GET_PICT_PRIV
+: <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">dmxpict.h</a>
+</li>
+<li>DMX_GET_PIXMAP_PRIV
+: <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">dmxpixmap.h</a>
+</li>
+<li>DMX_GET_WINDOW_PRIV
+: <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">dmxwindow.h</a>
+</li>
+<li>DMX_IDENT
+: <a class="el" href="dmxprop_8c.html#a15bb16a878f80c6c8a7aec68aadf3444">dmxprop.c</a>
+</li>
+<li>DMX_INFO
+: <a class="el" href="xdmxconfig_8c.html#a434eeb6abc7e5d18d14dd477befa412a">xdmxconfig.c</a>
+</li>
+<li>DMX_KEYBOARD_EVENT_MASK
+: <a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">dmxcommon.h</a>
+</li>
+<li>DMX_LOCAL_DEFAULT_KEYBOARD
+: <a class="el" href="dmxinputinit_8h.html#aa1870074757b46ee3d10dec90cdf2b64">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_DEFAULT_POINTER
+: <a class="el" href="dmxinputinit_8h.html#a71db83edc922dbedc5f8b9d7bed08be8">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_HIGHLEVEL
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_KEYBOARD
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_MOUSE
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_OTHER
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_BACKEND
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_COMMON
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_CONSOLE
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_LOCAL
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">dmxinputinit.h</a>
+</li>
+<li>DMX_MAIN_HEIGHT
+: <a class="el" href="xdmxconfig_8c.html#a6ed01845a734215a4ebe763b980e371b">xdmxconfig.c</a>
+</li>
+<li>DMX_MAIN_WIDTH
+: <a class="el" href="xdmxconfig_8c.html#acb087e20636d2017ac49f3cbb4129083">xdmxconfig.c</a>
+</li>
+<li>DMX_MAP_ENTRIES
+: <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">dmxinputinit.h</a>
+</li>
+<li>DMX_MAP_MASK
+: <a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_AXES
+: <a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">dmxevents.c</a>
+, <a class="el" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_BUTTONS
+: <a class="el" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_SIGIO_FDS
+: <a class="el" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">dmxinput.h</a>
+</li>
+<li>DMX_MAX_VALUATORS
+: <a class="el" href="dmxinputinit_8h.html#aa3be211c7a2902aa6358627c1a2fe697">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_XINPUT_EVENT_TYPES
+: <a class="el" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">dmxinputinit.h</a>
+</li>
+<li>DMX_MOTION_SIZE
+: <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">dmxinputinit.h</a>
+</li>
+<li>DMX_NO_BLOCK
+: <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">dmxinput.h</a>
+</li>
+<li>DMX_NO_RECOMPUTE_BOUNDING_BOX
+: <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">dmxcb.h</a>
+</li>
+<li>DMX_NOSIGIO
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">dmxinput.h</a>
+</li>
+<li>DMX_POINTER_EVENT_MASK
+: <a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">dmxcommon.h</a>
+</li>
+<li>DMX_RECOMPUTE_BOUNDING_BOX
+: <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">dmxcb.h</a>
+</li>
+<li>DMX_RELATIVE
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">dmxinputinit.h</a>
+</li>
+<li>DMX_RES_CLASS
+: <a class="el" href="dmxconsole_8c.html#a678a6a04bb4db0eb59755b010773ed08">dmxconsole.c</a>
+</li>
+<li>DMX_RES_NAME
+: <a class="el" href="dmxconsole_8c.html#a3dcea52f8f4efb214af127167c51447f">dmxconsole.c</a>
+</li>
+<li>DMX_SET_COLORMAP_PRIV
+: <a class="el" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">dmxcmap.h</a>
+</li>
+<li>DMX_SET_CURSOR_PRIV
+: <a class="el" href="dmxcursor_8h.html#a7ec081934a095ba159d03229e714cfd5">dmxcursor.h</a>
+</li>
+<li>DMX_SET_GLYPH_PRIV
+: <a class="el" href="dmxpict_8h.html#a326b29fc2f94bec3a92a7d2c801df449">dmxpict.h</a>
+</li>
+<li>DMX_STAT_BIN0
+: <a class="el" href="dmxstat_8h.html#a8757af3ae82fef58d05e31523454065f">dmxstat.h</a>
+</li>
+<li>DMX_STAT_BINMULT
+: <a class="el" href="dmxstat_8h.html#a9c3e64f7fc0b5305bb6798b298ae6283">dmxstat.h</a>
+</li>
+<li>DMX_STAT_BINS
+: <a class="el" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">dmxstat.h</a>
+</li>
+<li>DMX_STAT_INTERVAL
+: <a class="el" href="dmxstat_8h.html#a4cb43c9c7db58a10d8834a6b95a5c180">dmxstat.h</a>
+</li>
+<li>DMX_STAT_LENGTH
+: <a class="el" href="dmxstat_8h.html#ad38ec0be743fab83c032d231034d4d49">dmxstat.h</a>
+</li>
+<li>DMX_STATE_DEBUG
+: <a class="el" href="dmxcommon_8c.html#ac478cb19dda771f00d3b753001a51e09">dmxcommon.c</a>
+</li>
+<li>DMX_UNWRAP
+: <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">dmx.h</a>
+</li>
+<li>DMX_UPDATE_COPY
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_REALIZE
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_REPARENT
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_RESIZE
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_RESTACK
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_UNREALIZE
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">dmxinput.h</a>
+</li>
+<li>DMX_USESIGIO
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">dmxinput.h</a>
+</li>
+<li>DMX_VENDOR_RELEASE
+: <a class="el" href="dmx-config_8h.html#ad1ec3b5086644b176e48fbdb72b39adc">dmx-config.h</a>
+</li>
+<li>DMX_WINDOW_DEBUG
+: <a class="el" href="dmxconsole_8c.html#ae119931aa626ba4edf85defe5bebe2e7">dmxconsole.c</a>
+, <a class="el" href="dmxinputinit_8c.html#ae119931aa626ba4edf85defe5bebe2e7">dmxinputinit.c</a>
+</li>
+<li>DMX_WINDOW_FUNC_EPILOGUE
+: <a class="el" href="dmxwindow_8h.html#a9144b8f0cbe6f869da8a9ddcfbaa5f1b">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_FUNC_PROLOGUE
+: <a class="el" href="dmxwindow_8h.html#a35b887c43ad7855996b9aab8151fc479">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_OFFSCREEN
+: <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_X1
+: <a class="el" href="dmxwindow_8h.html#a7eb75e49cc319067cfd50841378f8808">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_X2
+: <a class="el" href="dmxwindow_8h.html#ad52fe7cfe660be4536aabed92c0108d1">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_Y1
+: <a class="el" href="dmxwindow_8h.html#a744e6f0a3bd069a37c77b8bff83bf491">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_Y2
+: <a class="el" href="dmxwindow_8h.html#a2d0ce76b2c1b06889444d93d5368c0ba">dmxwindow.h</a>
+</li>
+<li>DMX_WRAP
+: <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">dmx.h</a>
+</li>
+<li>dmxAddDevice()
+: <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxinputinit.c</a>
+</li>
+<li>dmxAddInput()
+: <a class="el" href="dmxextension_8c.html#a6b0b38eb49c6be097a59dbcdd6dacb51">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxextension.h</a>
+</li>
+<li>dmxAddRemoveScreens
+: <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a8d53c22ed93cbef2684016d3c7638671">dmxinit.c</a>
+</li>
+<li>dmxAdjustCursorBoundaries()
+: <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxextension.c</a>
+</li>
+<li>dmxAllocateColormapPrivates()
+: <a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxcmap.c</a>
+</li>
+<li>dmxApplyFunctions()
+: <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxevents.c</a>
+</li>
+<li>dmxArg
+: <a class="el" href="dmxarg_8h.html#a7f310ec1f9d20311533a2a142a0b92b8">dmxarg.h</a>
+</li>
+<li>dmxArgAdd()
+: <a class="el" href="dmxarg_8c.html#a6d41e61a00975e123ed72a269d653d23">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a6d41e61a00975e123ed72a269d653d23">dmxarg.h</a>
+</li>
+<li>dmxArgC()
+: <a class="el" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxarg.h</a>
+</li>
+<li>dmxArgCreate()
+: <a class="el" href="dmxarg_8c.html#af4ecb9595303a7fcac5eae840766b6fb">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#af4ecb9595303a7fcac5eae840766b6fb">dmxarg.h</a>
+</li>
+<li>dmxArgFree()
+: <a class="el" href="dmxarg_8c.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxarg.h</a>
+</li>
+<li>dmxArgParse()
+: <a class="el" href="dmxarg_8c.html#a7d872851e86ae8063cd13e85ed203d09">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxarg.h</a>
+</li>
+<li>dmxArgV()
+: <a class="el" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a7de14f607c61ecac05f9c45d002e36ab">dmxarg.h</a>
+</li>
+<li>dmxAttachScreen()
+: <a class="el" href="dmxextension_8c.html#a3962840388f9bcf96fb17294a413d8cb">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxextension.h</a>
+</li>
+<li>dmxBackendCollectEvents()
+: <a class="el" href="dmxbackend_8c.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxbackend.h</a>
+</li>
+<li>dmxBackendComputeCenter()
+: <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxbackend.c</a>
+</li>
+<li>dmxBackendCreatePrivate()
+: <a class="el" href="dmxbackend_8c.html#a2a875125c1316c123e45c7e7a9251c2e">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a2a875125c1316c123e45c7e7a9251c2e">dmxbackend.h</a>
+</li>
+<li>dmxBackendDestroyPrivate()
+: <a class="el" href="dmxbackend_8c.html#acd47377dd517a5494edae5920e3ae946">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#acd47377dd517a5494edae5920e3ae946">dmxbackend.h</a>
+</li>
+<li>dmxBackendFindOverlapping()
+: <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxbackend.c</a>
+</li>
+<li>dmxBackendFindWindow()
+: <a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxbackend.c</a>
+</li>
+<li>dmxBackendFunctions()
+: <a class="el" href="dmxbackend_8c.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxbackend.h</a>
+</li>
+<li>dmxBackendGetEvent()
+: <a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxbackend.c</a>
+</li>
+<li>dmxBackendInit()
+: <a class="el" href="dmxbackend_8c.html#a941213c5a98d26e0f30391ee312e1436">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxbackend.h</a>
+</li>
+<li>dmxBackendInitPrivate()
+: <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxbackend.c</a>
+</li>
+<li>DMXBackendKbd
+: <a class="el" href="dmxinputinit_8c.html#a4ad947489cdc8cae1835dbd5604e0cde">dmxinputinit.c</a>
+</li>
+<li>dmxBackendKbdGetInfo()
+: <a class="el" href="dmxbackend_8c.html#a1c628b807f62aeeeb2093ad63941eff1">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxbackend.h</a>
+</li>
+<li>dmxBackendLateReInit()
+: <a class="el" href="dmxbackend_8c.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxbackend.h</a>
+</li>
+<li>DMXBackendMou
+: <a class="el" href="dmxinputinit_8c.html#a420b4847b9c9f9992e042754c9a5d9c9">dmxinputinit.c</a>
+</li>
+<li>dmxBackendMouGetInfo()
+: <a class="el" href="dmxbackend_8c.html#a1afb0902ffb9019c943b0c4db6315209">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxbackend.h</a>
+</li>
+<li>dmxBackendOffscreen()
+: <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxbackend.c</a>
+</li>
+<li>dmxBackendPendingMotionEvent()
+: <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxbackend.c</a>
+</li>
+<li>dmxBackendProcessInput()
+: <a class="el" href="dmxbackend_8c.html#a4ee65e2f1b86616b7898c273d78a5853">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxbackend.h</a>
+</li>
+<li>dmxBackendSameDisplay()
+: <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestEvents()
+: <a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestMotionEvent()
+: <a class="el" href="dmxbackend_8c.html#a772eea70f63c028de57f6d9e5bb48fbe">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestScreen()
+: <a class="el" href="dmxbackend_8c.html#a86a56e6c6d23ef0f13d1d4ee8f84a162">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestWindow()
+: <a class="el" href="dmxbackend_8c.html#a25cd9424824427d35f7e1cdb6ae0ad61">dmxbackend.c</a>
+</li>
+<li>dmxBackendUpdatePosition()
+: <a class="el" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxbackend.h</a>
+</li>
+<li>dmxBECloseScreen()
+: <a class="el" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxscrinit.c</a>
+, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxscrinit.h</a>
+</li>
+<li>dmxBECreateColormap()
+: <a class="el" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxcmap.h</a>
+</li>
+<li>dmxBECreateCursor()
+: <a class="el" href="dmxcursor_8c.html#a84c92b801c5802879047e74401f62e94">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxcursor.h</a>
+</li>
+<li>dmxBECreateGC()
+: <a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxgc.h</a>
+</li>
+<li>dmxBECreateGlyphSet()
+: <a class="el" href="dmxpict_8c.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxpict.h</a>
+</li>
+<li>dmxBECreatePicture()
+: <a class="el" href="dmxpict_8c.html#ac1b1e577a8993b4c76eba1bfad485396">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxpict.h</a>
+</li>
+<li>dmxBECreatePixmap()
+: <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxpixmap.h</a>
+</li>
+<li>dmxBECreateResources()
+: <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxextension.c</a>
+</li>
+<li>dmxBECreateScratchGCs()
+: <a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxextension.c</a>
+</li>
+<li>dmxBECreateWindowTree()
+: <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxextension.c</a>
+</li>
+<li>dmxBEDestroyResources()
+: <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxextension.c</a>
+</li>
+<li>dmxBEDestroyScratchGCs()
+: <a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxextension.c</a>
+</li>
+<li>dmxBEDestroyWindow()
+: <a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxwindow.h</a>
+</li>
+<li>dmxBEDestroyWindowTree()
+: <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxextension.c</a>
+</li>
+<li>dmxBEFreeColormap()
+: <a class="el" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxcmap.h</a>
+</li>
+<li>dmxBEFreeCursor()
+: <a class="el" href="dmxcursor_8c.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxcursor.h</a>
+</li>
+<li>dmxBEFreeFont()
+: <a class="el" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxfont.h</a>
+</li>
+<li>dmxBEFreeGC()
+: <a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxgc.h</a>
+</li>
+<li>dmxBEFreeGlyphSet()
+: <a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxpict.h</a>
+</li>
+<li>dmxBEFreePicture()
+: <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxpict.h</a>
+</li>
+<li>dmxBEFreePixmap()
+: <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxpixmap.h</a>
+</li>
+<li>dmxBell()
+: <a class="el" href="dmxinputinit_8c.html#ace8ffeb961580bf16d7c3ec044a00491">dmxinputinit.c</a>
+</li>
+<li>dmxBELoadFont()
+: <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxfont.h</a>
+</li>
+<li>dmxBERestorePixmap()
+: <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxextension.c</a>
+</li>
+<li>dmxBERestoreRenderGlyph()
+: <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxextension.c</a>
+</li>
+<li>dmxBERestoreRenderPict()
+: <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxextension.c</a>
+</li>
+<li>dmxBESavePixmap()
+: <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxextension.c</a>
+</li>
+<li>dmxBEScreenInit()
+: <a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxscrinit.c</a>
+, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxscrinit.h</a>
+</li>
+<li>dmxBitmapToRegion()
+: <a class="el" href="dmxpixmap_8c.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxpixmap.h</a>
+</li>
+<li>dmxBlockHandler()
+: <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxinputinit.c</a>
+</li>
+<li>DMXBlockType
+: <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">dmxinput.h</a>
+</li>
+<li>dmxBuildCompiler()
+: <a class="el" href="dmxinit_8c.html#ac1f3e1fa60f11e75fe94b7629ec8c0f0">dmxinit.c</a>
+</li>
+<li>dmxChangeBorderWidth()
+: <a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxwindow.h</a>
+</li>
+<li>dmxChangeClip()
+: <a class="el" href="dmxgc_8c.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxgc.h</a>
+</li>
+<li>dmxChangeGC()
+: <a class="el" href="dmxgc_8c.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxgc.h</a>
+</li>
+<li>dmxChangePicture()
+: <a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxpict.h</a>
+</li>
+<li>dmxChangePictureClip()
+: <a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxpict.h</a>
+</li>
+<li>dmxChangePointerControl()
+: <a class="el" href="dmxinputinit_8c.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxinputinit.h</a>
+</li>
+<li>dmxChangeWindowAttributes()
+: <a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxwindow.h</a>
+</li>
+<li>dmxCheckCursor()
+: <a class="el" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxcursor.h</a>
+</li>
+<li>dmxCheckFontPath()
+: <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxfont.c</a>
+</li>
+<li>dmxCheckFontPathElement()
+: <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxfont.c</a>
+</li>
+<li>dmxCheckForWM()
+: <a class="el" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#a339a0fdeb357fee53a56ba268c66b68d">dmxinit.h</a>
+</li>
+<li>dmxCheckFunctionKeys()
+: <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxevents.c</a>
+</li>
+<li>dmxCheckSpecialKeys()
+: <a class="el" href="dmxevents_8c.html#a082f21151ec3d66b75d4613a3612c755">dmxevents.c</a>
+, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxevents.h</a>
+</li>
+<li>dmxCheckSpecialProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxinputinit.h</a>
+</li>
+<li>dmxCloseConsole()
+: <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxconsole.c</a>
+</li>
+<li>dmxCloseConsoleScreen()
+: <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxconsole.c</a>
+</li>
+<li>dmxCloseIndexed()
+: <a class="el" href="dmxpict_8c.html#aa63b1daaacc56332c04832198a9e30b7">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#aa63b1daaacc56332c04832198a9e30b7">dmxpict.h</a>
+</li>
+<li>dmxCloseScreen()
+: <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxscrinit.c</a>
+</li>
+<li>DMXCode
+: <a class="el" href="dmx_8c.html#a358d781b37da0527044c0cc8213097d2">dmx.c</a>
+</li>
+<li>dmxCollectAll()
+: <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxinputinit.c</a>
+</li>
+<li>dmxCollectEventsProcPtr
+: <a class="el" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxinputinit.h</a>
+</li>
+<li>dmxColormapFromDefaultVisual()
+: <a class="el" href="dmxvisual_8c.html#aca13684e9357c96035388a924d8af570">dmxvisual.c</a>
+, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxvisual.h</a>
+</li>
+<li>dmxColormapPrivateKey
+: <a class="el" href="dmx_8h.html#a47c216bb108efa441d7009a7da18d759">dmx.h</a>
+</li>
+<li>dmxColormapPrivateKeyRec
+: <a class="el" href="dmx_8h.html#af033a68c176abdaf96f094922d15d359">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxscrinit.c</a>
+</li>
+<li>dmxColormapPrivPtr
+: <a class="el" href="dmxcmap_8h.html#aec71fbb492f3a3ce7e6b2b083a8b0978">dmxcmap.h</a>
+</li>
+<li>dmxColormapPrivRec
+: <a class="el" href="dmxcmap_8h.html#a9b220494b52f982d4dcfa437d34d628b">dmxcmap.h</a>
+</li>
+<li>dmxCommonAddEnabledDevice()
+: <a class="el" href="dmxcommon_8c.html#a82d9ce21ede8d533adde28ce8dbabdf7">dmxcommon.c</a>
+</li>
+<li>dmxCommonCopyPrivate()
+: <a class="el" href="dmxcommon_8c.html#a0e7301a2783357ff391172acab00d48a">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdBell()
+: <a class="el" href="dmxcommon_8c.html#aa069076ebf89f8b89668cffafb731cfe">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#aa069076ebf89f8b89668cffafb731cfe">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdCtrl()
+: <a class="el" href="dmxcommon_8c.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdGetInfo()
+: <a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdGetMap()
+: <a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a83410e3987567bd35fd146b193a21ed9">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdOff()
+: <a class="el" href="dmxcommon_8c.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdOn()
+: <a class="el" href="dmxcommon_8c.html#a60cd36c3430ead2858986fe5f93165c1">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdSetAR()
+: <a class="el" href="dmxcommon_8c.html#a5fe4b4fef83f0ca1aba8cabf76ebccf2">dmxcommon.c</a>
+</li>
+<li>dmxCommonKbdSetCtrl()
+: <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxcommon.c</a>
+</li>
+<li>dmxCommonKbdSetLeds()
+: <a class="el" href="dmxcommon_8c.html#a77cfda7cbd3e83a0869b26b782d2b6d4">dmxcommon.c</a>
+</li>
+<li>dmxCommonMouCtrl()
+: <a class="el" href="dmxcommon_8c.html#a11aa027975061ee6f3e684ee66f0f18c">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a11aa027975061ee6f3e684ee66f0f18c">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouGetMap()
+: <a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a9ce209ad340f84644115a165eadfa540">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouOff()
+: <a class="el" href="dmxcommon_8c.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouOn()
+: <a class="el" href="dmxcommon_8c.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouSetCtrl()
+: <a class="el" href="dmxcommon_8c.html#a71374978838ea5232f72055f152a894e">dmxcommon.c</a>
+</li>
+<li>dmxCommonOthGetInfo()
+: <a class="el" href="dmxcommon_8c.html#a67f944a345e0ba88ac996056914d191c">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxcommon.h</a>
+</li>
+<li>dmxCommonOthOff()
+: <a class="el" href="dmxcommon_8c.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxcommon.h</a>
+</li>
+<li>dmxCommonOthOn()
+: <a class="el" href="dmxcommon_8c.html#a4b8e72433e206d48e6fb471e933800ad">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxcommon.h</a>
+</li>
+<li>dmxCommonRemoveEnabledDevice()
+: <a class="el" href="dmxcommon_8c.html#adb5e0faaefc43851e4ebcd01bd9c10ec">dmxcommon.c</a>
+</li>
+<li>dmxCommonRestoreState()
+: <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxcommon.h</a>
+</li>
+<li>dmxCommonSaveState()
+: <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxcommon.h</a>
+</li>
+<li>dmxCommonXSelect()
+: <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxcommon.c</a>
+</li>
+<li>dmxCompareScreens()
+: <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxextension.c</a>
+</li>
+<li>dmxComposite()
+: <a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxpict.h</a>
+</li>
+<li>dmxCompositeRects()
+: <a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxpict.h</a>
+</li>
+<li>dmxComputeScreenOrigins()
+: <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxcursor.c</a>
+</li>
+<li>dmxComputeWidthHeight()
+: <a class="el" href="dmxcb_8c.html#a077a54c8577746426371b996c9aacefb">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxcb.h</a>
+</li>
+<li>dmxConfigAboutCallback()
+: <a class="el" href="xdmxconfig_8c.html#a51a4a8ca6b21891e2fa70c466faee77c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigAboutOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a8bbd18621db9d5b385f4904e5acd0af1">xdmxconfig.c</a>
+</li>
+<li>dmxConfigAddDisplay()
+: <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxconfig.c</a>
+</li>
+<li>dmxConfigAddEntry()
+: <a class="el" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#acec532235fc1d75b24779b3ed50aa037">dmxparse.h</a>
+</li>
+<li>dmxConfigAddInput()
+: <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxinput.h</a>
+, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxconfig.c</a>
+</li>
+<li>dmxConfigAddSub()
+: <a class="el" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxparse.h</a>
+</li>
+<li>dmxConfigAlloc()
+: <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a1794b2e8571596d46f01ff8cf692410f">dmxparse.h</a>
+</li>
+<li>dmxConfigCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#a63d22122002cecb690732604266cb1e6">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasDraw()
+: <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasExpose()
+: <a class="el" href="xdmxconfig_8c.html#aadfc47cfd989e655d03dda6ccd2ba3bf">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasGCs()
+: <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasInput()
+: <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasResize()
+: <a class="el" href="xdmxconfig_8c.html#ae65368a94fe9f60eb2fbfa083db4ea9b">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasUpdate()
+: <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCmd
+: <a class="el" href="dmxconfig_8c.html#a9d2aa7477b1176f8ee206f47e03c29da">dmxconfig.c</a>
+</li>
+<li>DMXConfigCmd
+: <a class="el" href="dmxconfig_8c.html#ab9c66f76ee551600df2b3fc9ce6f4d33">dmxconfig.c</a>
+</li>
+<li>DMXConfigCmdPtr
+: <a class="el" href="dmxconfig_8c.html#a5a96d2434004ba9bddaf2b62b5ca9f39">dmxconfig.c</a>
+</li>
+<li>dmxConfigComment
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxparse.h</a>
+</li>
+<li>DMXConfigComment
+: <a class="el" href="dmxparse_8h.html#ac53f3a487c56877ce84e621b93c75e63">dmxparse.h</a>
+</li>
+<li>DMXConfigCommentPtr
+: <a class="el" href="dmxparse_8h.html#a3eaf8193499e4474fa2f2c8363ff9558">dmxparse.h</a>
+</li>
+<li>dmxConfigConfigInputs()
+: <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxconfig.c</a>
+</li>
+<li>dmxConfigConfigure()
+: <a class="el" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxconfig.h</a>
+</li>
+<li>dmxConfigCopyData()
+: <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromDisplay()
+: <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromOption()
+: <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromParam()
+: <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromWall()
+: <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyString()
+: <a class="el" href="dmxparse_8c.html#a0d1c3d922b777254300e346b0111943c">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a0d1c3d922b777254300e346b0111943c">dmxparse.h</a>
+</li>
+<li>dmxConfigCopystrings()
+: <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCreateComment()
+: <a class="el" href="dmxparse_8c.html#ae0619f5f0850b65fefe4df5112aaac05">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateDisplay()
+: <a class="el" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateEntry()
+: <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateFullDim()
+: <a class="el" href="dmxparse_8c.html#ac75eb1b376fb8a510d123ca119ef215e">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateNumber()
+: <a class="el" href="dmxparse_8c.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateOption()
+: <a class="el" href="dmxparse_8c.html#ad183386657a3549f60760a156fad4fb8">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxparse.h</a>
+</li>
+<li>dmxConfigCreatePair()
+: <a class="el" href="dmxparse_8c.html#a488a03d25bc380f1bdf786693c644957">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateParam()
+: <a class="el" href="dmxparse_8c.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxparse.h</a>
+</li>
+<li>dmxConfigCreatePartDim()
+: <a class="el" href="dmxparse_8c.html#a1740a9f650d43464836c9b0ec44f9659">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateString()
+: <a class="el" href="dmxparse_8c.html#ae285ab0da6d63770365886d413f58432">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateSub()
+: <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateToken()
+: <a class="el" href="dmxparse_8c.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateVirtual()
+: <a class="el" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateWall()
+: <a class="el" href="dmxparse_8c.html#a6078c6ad23fc49e4992cade35f7351b2">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxparse.h</a>
+</li>
+<li>dmxConfigCurrent
+: <a class="el" href="xdmxconfig_8c.html#a7d0525177e2bcd01130c2d88219eaea7">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCurrentDisplay
+: <a class="el" href="xdmxconfig_8c.html#ae7d68549ff5ad989a28258671bf1a007">xdmxconfig.c</a>
+</li>
+<li>dmxConfigDataUpdate()
+: <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">xdmxconfig.c</a>
+</li>
+<li>dmxConfigDCCallback()
+: <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">xdmxconfig.c</a>
+</li>
+<li>dmxConfigDDCallback()
+: <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">xdmxconfig.c</a>
+</li>
+<li>dmxConfigDisplay
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxparse.h</a>
+</li>
+<li>DMXConfigDisplay
+: <a class="el" href="dmxparse_8h.html#a31b5941021484d5b5ae6c905dca6f35a">dmxparse.h</a>
+</li>
+<li>DMXConfigDisplayPtr
+: <a class="el" href="dmxparse_8h.html#a77569967e2f40e3e3f05d8e49a4e81f7">dmxparse.h</a>
+</li>
+<li>dmxConfigECCallback()
+: <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">xdmxconfig.c</a>
+</li>
+<li>dmxConfigECCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#aee0b69600ad12890c06000770f1c655f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigECOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEDCallback()
+: <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEDCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#a8d3ad76031d45149189806723870a81c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEDOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">xdmxconfig.c</a>
+</li>
+<li>DMXConfigEntry
+: <a class="el" href="dmxparse_8h.html#a8cb4fa1fa814f09a1cad1712894a8207">dmxparse.h</a>
+</li>
+<li>dmxConfigEntry
+: <a class="el" href="dmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxconfig.c</a>
+, <a class="el" href="dmxparse_8h.html#af1733e9f6f810a355a158f16f8bc7899">dmxparse.h</a>
+, <a class="el" href="xdmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEntryComment()
+: <a class="el" href="dmxparse_8c.html#acee635a4deedd0f4b488d951346f4622">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#acee635a4deedd0f4b488d951346f4622">dmxparse.h</a>
+</li>
+<li>DMXConfigEntryPtr
+: <a class="el" href="dmxparse_8h.html#ab46cf3c98a49f9dbf90120e8afd65e81">dmxparse.h</a>
+</li>
+<li>dmxConfigEntryVirtual()
+: <a class="el" href="dmxparse_8c.html#a643b2c9c57d3009965318d20aad1ca0d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a643b2c9c57d3009965318d20aad1ca0d">dmxparse.h</a>
+</li>
+<li>dmxConfigFilename
+: <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">xdmxconfig.c</a>
+</li>
+<li>dmxConfigFindDisplay()
+: <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigFree()
+: <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a890429fea43e1039967b94fadc1f4e29">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeComment()
+: <a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeDisplay()
+: <a class="el" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeEntry()
+: <a class="el" href="dmxparse_8c.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeFullDim()
+: <a class="el" href="dmxparse_8c.html#ad09f9037b194ad32029047499003a60a">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeNumber()
+: <a class="el" href="dmxparse_8c.html#a2b8a343fe122733af82e802a01a5f30b">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a2b8a343fe122733af82e802a01a5f30b">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeOption()
+: <a class="el" href="dmxparse_8c.html#a87d839927d1775c43e099e87f6e2ca8d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxparse.h</a>
+</li>
+<li>dmxConfigFreePair()
+: <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a382b3c46caeb7e134e381d732f8d185e">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeParam()
+: <a class="el" href="dmxparse_8c.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxparse.h</a>
+</li>
+<li>dmxConfigFreePartDim()
+: <a class="el" href="dmxparse_8c.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeString()
+: <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeSub()
+: <a class="el" href="dmxparse_8c.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeToken()
+: <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeVirtual()
+: <a class="el" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeWall()
+: <a class="el" href="dmxparse_8c.html#aac254e191bb664ec87d44f70f52ce897">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxparse.h</a>
+</li>
+<li>dmxConfigFromCommandLine()
+: <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxconfig.c</a>
+</li>
+<li>dmxConfigFromConfigFile()
+: <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxconfig.c</a>
+</li>
+<li>DMXConfigFullDim
+: <a class="el" href="dmxparse_8h.html#a8ad44f7990920ef85b4bdb51c98be380">dmxparse.h</a>
+</li>
+<li>DMXConfigFullDimPtr
+: <a class="el" href="dmxparse_8h.html#af1018551e3cc9ec6836d0d605216e611">dmxparse.h</a>
+</li>
+<li>dmxConfigGC
+: <a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGCHL
+: <a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGCInit
+: <a class="el" href="xdmxconfig_8c.html#a759c2efde7d196076ce7af7e02c720d3">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGCRev
+: <a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGetDims()
+: <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGetValueString()
+: <a class="el" href="xdmxconfig_8c.html#a861864048083f1d533e5e51f96d74284">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGetXkbLayout()
+: <a class="el" href="dmxconfig_8h.html#a5d7b9c934bac97af375cfc1425e4d71c">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbModel()
+: <a class="el" href="dmxconfig_8h.html#a9789c9f2428105bd9e896ddd25ea9a76">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbOptions()
+: <a class="el" href="dmxconfig_8h.html#ae5986f5f5ba901313f950db2b4d8b340">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbRules()
+: <a class="el" href="dmxconfig_8h.html#a144614ca8f250e559b030eef79189aac">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbVariant()
+: <a class="el" href="dmxconfig_8h.html#a3206dcb48297854a1d47e8aaa88d647e">dmxconfig.h</a>
+</li>
+<li>dmxConfigGrabbed
+: <a class="el" href="xdmxconfig_8c.html#a9d4629bf6b66304ec1dae9aefcb8e690">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbedFine
+: <a class="el" href="xdmxconfig_8c.html#a71a96fb97110e965bceec5e6a5e8c082">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbedX
+: <a class="el" href="xdmxconfig_8c.html#a68f7d459bce6cc9feb1f45d161080379">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbedY
+: <a class="el" href="xdmxconfig_8c.html#afd652683b9230abcc541aba117ec13fe">xdmxconfig.c</a>
+</li>
+<li>dmxConfigIndent()
+: <a class="el" href="dmxprint_8c.html#a28323a9b43eda57024b02a22c998b0e7">dmxprint.c</a>
+</li>
+<li>DMXConfigList
+: <a class="el" href="dmxconfig_8c.html#a3dfd693067cad9597343923410b0372e">dmxconfig.c</a>
+</li>
+<li>DMXConfigListPtr
+: <a class="el" href="dmxconfig_8c.html#a1e7e0db8e8b8c4ea8068d57243bb94b9">dmxconfig.c</a>
+</li>
+<li>dmxConfigLog()
+: <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxparse.h</a>
+</li>
+<li>dmxConfigLookupParam()
+: <a class="el" href="dmxparse_8c.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxparse.h</a>
+</li>
+<li>dmxConfigMatch()
+: <a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxconfig.c</a>
+</li>
+<li>dmxConfigMove()
+: <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNCCallback()
+: <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNDCallback()
+: <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNewDisplay
+: <a class="el" href="xdmxconfig_8c.html#a5b85ce4267bf51937e8f8873fcd0f898">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNewline()
+: <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxprint.c</a>
+</li>
+<li>dmxConfigNewVirtual
+: <a class="el" href="xdmxconfig_8c.html#ae231cf2b287cec0f4b9dce3f5bcb4870">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNotSaved
+: <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">xdmxconfig.c</a>
+</li>
+<li>DMXConfigNumber
+: <a class="el" href="dmxparse_8h.html#a09ee4bfd4fb105b8d12a3debde0bedd9">dmxparse.h</a>
+</li>
+<li>DMXConfigNumberPtr
+: <a class="el" href="dmxparse_8h.html#a0595f026bf3e261dda1479c3c3664ed7">dmxparse.h</a>
+</li>
+<li>dmxConfigOkAction()
+: <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">xdmxconfig.c</a>
+</li>
+<li>dmxConfigOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">xdmxconfig.c</a>
+</li>
+<li>dmxConfigOpenCallback()
+: <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">xdmxconfig.c</a>
+</li>
+<li>dmxConfigOption
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxparse.h</a>
+</li>
+<li>DMXConfigOption
+: <a class="el" href="dmxparse_8h.html#a9d47b44af4d217c2e6da2d4678611376">dmxparse.h</a>
+</li>
+<li>DMXConfigOptionPtr
+: <a class="el" href="dmxparse_8h.html#a8671db1fd961dbb11df3f83d1fab8227">dmxparse.h</a>
+</li>
+<li>dmxConfigOutput()
+: <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxprint.c</a>
+</li>
+<li>DMXConfigPair
+: <a class="el" href="dmxparse_8h.html#a67fb30fb9b3f930220aeea0e7258e5d1">dmxparse.h</a>
+</li>
+<li>DMXConfigPairPtr
+: <a class="el" href="dmxparse_8h.html#a311865c935a9669ca901705d5b28db02">dmxparse.h</a>
+</li>
+<li>dmxConfigParam
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxparse.h</a>
+</li>
+<li>DMXConfigParam
+: <a class="el" href="dmxparse_8h.html#a5f7052d0d09e5bd5415f5fb9924c799e">dmxparse.h</a>
+</li>
+<li>DMXConfigParamPtr
+: <a class="el" href="dmxparse_8h.html#a5af8bd2f2624df3b2fa6e36560f2b0a3">dmxparse.h</a>
+</li>
+<li>DMXConfigPartDim
+: <a class="el" href="dmxparse_8h.html#a0040a762f091a14803e78efa90c2b3aa">dmxparse.h</a>
+</li>
+<li>DMXConfigPartDimPtr
+: <a class="el" href="dmxparse_8h.html#a62dde6c86a1db2e243c3d5804770ac98">dmxparse.h</a>
+</li>
+<li>dmxConfigPlaceMenu()
+: <a class="el" href="xdmxconfig_8c.html#afa957a538d9f0f4ea74ff29f68f499e9">xdmxconfig.c</a>
+</li>
+<li>dmxConfigPopState()
+: <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxprint.c</a>
+</li>
+<li>dmxConfigPrint()
+: <a class="el" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxprint.c</a>
+, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxprint.h</a>
+</li>
+<li>dmxConfigPrintComment()
+: <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintDisplay()
+: <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintOption()
+: <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintPair()
+: <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintParam()
+: <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintQuotedString()
+: <a class="el" href="dmxprint_8c.html#ab7686b37f60596276e593fbc300e580a">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintString()
+: <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintSub()
+: <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintToken()
+: <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintTokenFlag()
+: <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintTokenNopop()
+: <a class="el" href="dmxprint_8c.html#a39008636d8a4d4212908a608d17e4ea0">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintVirtual()
+: <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintWall()
+: <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxprint.c</a>
+</li>
+<li>dmxConfigPushComment()
+: <a class="el" href="dmxprint_8c.html#ac839095403e872d1a2c5c5bf1fb84d34">dmxprint.c</a>
+</li>
+<li>dmxConfigPushState()
+: <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxprint.c</a>
+</li>
+<li>dmxConfigPushStep()
+: <a class="el" href="dmxprint_8c.html#a640bd88024bf58bbc7613804eadc23ef">dmxprint.c</a>
+</li>
+<li>dmxConfigQuitCallback()
+: <a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">xdmxconfig.c</a>
+</li>
+<li>dmxConfigQuitCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#a883bd47f35bdd31db9a612b8aa569f52">xdmxconfig.c</a>
+</li>
+<li>dmxConfigQuitOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a94afad40dc987f0eebe60b259f653972">xdmxconfig.c</a>
+</li>
+<li>dmxConfigReadFile()
+: <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxconfig.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">xdmxconfig.c</a>
+</li>
+<li>dmxConfigRealloc()
+: <a class="el" href="dmxparse_8c.html#af8e13444fded1f7707ab7dfc40655fd3">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#af8e13444fded1f7707ab7dfc40655fd3">dmxparse.h</a>
+</li>
+<li>dmxConfigSaveCallback()
+: <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">xdmxconfig.c</a>
+</li>
+<li>dmxConfigScaleX
+: <a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">xdmxconfig.c</a>
+</li>
+<li>dmxConfigScaleY
+: <a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSelectCallback()
+: <a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSetMaxScreens()
+: <a class="el" href="dmxconfig_8c.html#a41ff0900fb1b1056b02014bf39bee02f">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetPopupPosition()
+: <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSetupCnamemenu()
+: <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSetXkbLayout()
+: <a class="el" href="dmxconfig_8h.html#ad072d4dab0b5b0623c9b6d1b3b57e23a">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbModel()
+: <a class="el" href="dmxconfig_8h.html#ab9b9a8c70f9fd1b051187c47427f4999">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbOptions()
+: <a class="el" href="dmxconfig_8h.html#aef54e09cba9b65acbdcb6568de54b2b6">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbRules()
+: <a class="el" href="dmxconfig_8h.html#ae3270803aaa7990900d8c123f2181485">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbVariant()
+: <a class="el" href="dmxconfig_8h.html#af8922109f7462e6e246d8e06f1e21c5b">dmxconfig.h</a>
+</li>
+<li>dmxConfigState
+: <a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">xdmxconfig.c</a>
+</li>
+<li>dmxConfigStateOpen
+: <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716">xdmxconfig.c</a>
+</li>
+<li>dmxConfigStateSave
+: <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a387ae4d1cea5ba75911cb467d76d0996">xdmxconfig.c</a>
+</li>
+<li>dmxConfigStoreConfig()
+: <a class="el" href="dmxconfig_8c.html#a224cf25e04e43ce049574c10ce39b597">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a224cf25e04e43ce049574c10ce39b597">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreDisplay()
+: <a class="el" href="dmxconfig_8c.html#ac372c2ded30d6c82cc7973f7891d2363">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreFile()
+: <a class="el" href="dmxconfig_8c.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreInput()
+: <a class="el" href="dmxconfig_8c.html#aa591f4e1846bc6e6d78c68d77879c900">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreXInput()
+: <a class="el" href="dmxconfig_8c.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxconfig.h</a>
+</li>
+<li>DMXConfigString
+: <a class="el" href="dmxparse_8h.html#a997735bb2e5362d670bd0eaf006e1336">dmxparse.h</a>
+</li>
+<li>DMXConfigStringPtr
+: <a class="el" href="dmxparse_8h.html#a163965084bb791376852afc3c8e2a3cd">dmxparse.h</a>
+</li>
+<li>DMXConfigSub
+: <a class="el" href="dmxparse_8h.html#a2eeff7f31b82f02916abfddeac619406">dmxparse.h</a>
+</li>
+<li>dmxConfigSubComment()
+: <a class="el" href="dmxparse_8c.html#a825d125808e8992c740315d3b78e493d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a825d125808e8992c740315d3b78e493d">dmxparse.h</a>
+</li>
+<li>dmxConfigSubDisplay()
+: <a class="el" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a4f26909fb7f97007567e5514839c3a53">dmxparse.h</a>
+</li>
+<li>dmxConfigSubOption()
+: <a class="el" href="dmxparse_8c.html#a23a35d27aa7bf22d815d2a9cff809307">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a23a35d27aa7bf22d815d2a9cff809307">dmxparse.h</a>
+</li>
+<li>dmxConfigSubParam()
+: <a class="el" href="dmxparse_8c.html#a16047d4ba67462084a85156432c7cf05">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a16047d4ba67462084a85156432c7cf05">dmxparse.h</a>
+</li>
+<li>DMXConfigSubPtr
+: <a class="el" href="dmxparse_8h.html#aaeef2cb474e931950e496db8005654ff">dmxparse.h</a>
+</li>
+<li>dmxConfigSubWall()
+: <a class="el" href="dmxparse_8c.html#aac05245a327cc10096f1a049e675caef">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aac05245a327cc10096f1a049e675caef">dmxparse.h</a>
+</li>
+<li>DMXConfigToken
+: <a class="el" href="dmxparse_8h.html#aa553d8e6837818d31707e48941f2c755">dmxparse.h</a>
+</li>
+<li>DMXConfigTokenPtr
+: <a class="el" href="dmxparse_8h.html#aa54f2be8a82814626992b0e2c2fd76ab">dmxparse.h</a>
+</li>
+<li>DMXConfigType
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">dmxparse.h</a>
+</li>
+<li>dmxConfigureDesktop()
+: <a class="el" href="dmxextension_8h.html#a0aa0eb777a77d62cd3070c642ae0b0aa">dmxextension.h</a>
+</li>
+<li>dmxConfigureScreenWindows()
+: <a class="el" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxextension.h</a>
+</li>
+<li>dmxConfigVirtual
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxparse.h</a>
+</li>
+<li>DMXConfigVirtual
+: <a class="el" href="dmxparse_8h.html#ac88a2d841fca93f81e6412228570134d">dmxparse.h</a>
+</li>
+<li>dmxConfigVirtualPrint()
+: <a class="el" href="dmxprint_8c.html#ae0a45c7fe5f9f4afb7e68856253350be">dmxprint.c</a>
+, <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxprint.h</a>
+</li>
+<li>DMXConfigVirtualPtr
+: <a class="el" href="dmxparse_8h.html#a7df6222bb31e29b3b6d98cc9d765c70f">dmxparse.h</a>
+</li>
+<li>dmxConfigWall
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxparse.h</a>
+</li>
+<li>DMXConfigWall
+: <a class="el" href="dmxparse_8h.html#a09a530a073d8e23f78a3fdd3cdaa16c6">dmxparse.h</a>
+</li>
+<li>dmxConfigWallHeight
+: <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">xdmxconfig.c</a>
+</li>
+<li>DMXConfigWallPtr
+: <a class="el" href="dmxparse_8h.html#a176e5216b55fbc5ed7adb856501826a0">dmxparse.h</a>
+</li>
+<li>dmxConfigWallWidth
+: <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWidgetHeight
+: <a class="el" href="xdmxconfig_8c.html#ae8e507a8ffea650807baebab3b720027">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWidgetWidth
+: <a class="el" href="xdmxconfig_8c.html#ad159f52770b5cc4224709338a4fd3f8c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWriteFile()
+: <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">xdmxconfig.c</a>
+</li>
+<li>dmxConnectionBlockCallback()
+: <a class="el" href="dmxcb_8c.html#a39179d932cde34ab3c947fa017d2d78d">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxcb.h</a>
+</li>
+<li>dmxConsoleCapture()
+: <a class="el" href="dmxconsole_8c.html#ae70541f26e4a4ff6360090393d622b41">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxconsole.h</a>
+</li>
+<li>dmxConsoleClearCursor()
+: <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxconsole.c</a>
+</li>
+<li>dmxConsoleCollectEvents()
+: <a class="el" href="dmxconsole_8c.html#a9c2ec3c63c36955d2458283dbd62b605">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxconsole.h</a>
+</li>
+<li>dmxConsoleComputeWidthHeight()
+: <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxconsole.c</a>
+</li>
+<li>dmxConsoleCreateEmptyCursor()
+: <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxconsole.c</a>
+</li>
+<li>dmxConsoleCreatePrivate()
+: <a class="el" href="dmxconsole_8c.html#a44f5875f978cc85c2190eacef51debac">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a44f5875f978cc85c2190eacef51debac">dmxconsole.h</a>
+</li>
+<li>dmxConsoleDestroyPrivate()
+: <a class="el" href="dmxconsole_8c.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxconsole.h</a>
+</li>
+<li>dmxConsoleDraw()
+: <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxconsole.c</a>
+</li>
+<li>dmxConsoleDrawFineCursor()
+: <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxconsole.c</a>
+</li>
+<li>dmxConsoleDrawWindows()
+: <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxconsole.c</a>
+</li>
+<li>dmxConsoleFunctions()
+: <a class="el" href="dmxconsole_8c.html#a613139541bddab357c413b76238e489b">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxconsole.h</a>
+</li>
+<li>dmxConsoleInit()
+: <a class="el" href="dmxconsole_8c.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxconsole.h</a>
+</li>
+<li>DMXConsoleKbd
+: <a class="el" href="dmxinputinit_8c.html#a3c213f84d74e74751787f916f509581f">dmxinputinit.c</a>
+</li>
+<li>dmxConsoleKbdGetInfo()
+: <a class="el" href="dmxconsole_8c.html#a710d0bdd587deeb35b430ba48ac209f1">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxconsole.h</a>
+</li>
+<li>dmxConsoleKbdSetCtrl()
+: <a class="el" href="dmxconsole_8h.html#a85026fe07bc1cf4f5b740249655c1648">dmxconsole.h</a>
+</li>
+<li>DMXConsoleMou
+: <a class="el" href="dmxinputinit_8c.html#a3a58ba39e104b23698ca8ef19789caf3">dmxinputinit.c</a>
+</li>
+<li>dmxConsoleMouGetInfo()
+: <a class="el" href="dmxconsole_8c.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxconsole.h</a>
+</li>
+<li>dmxConsoleMoveAbsolute()
+: <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxconsole.c</a>
+</li>
+<li>dmxConsoleMoveRelative()
+: <a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxconsole.c</a>
+</li>
+<li>dmxConsoleReInit()
+: <a class="el" href="dmxconsole_8c.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxconsole.h</a>
+</li>
+<li>dmxConsoleUncapture()
+: <a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxconsole.h</a>
+</li>
+<li>dmxConsoleUpdateFineCursor()
+: <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxconsole.c</a>
+</li>
+<li>dmxConsoleUpdateInfo()
+: <a class="el" href="dmxconsole_8c.html#a180def32863f7bdddf3637181661c505">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#ac5fba2223efdab61863b6458a90c189a">dmxconsole.h</a>
+</li>
+<li>dmxConsoleUpdatePosition()
+: <a class="el" href="dmxconsole_8c.html#a596b1bd2ef51d5542393215ad810b227">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxconsole.h</a>
+</li>
+<li>dmxCopyArea()
+: <a class="el" href="dmxgcops_8c.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxgcops.h</a>
+</li>
+<li>dmxCopyClip()
+: <a class="el" href="dmxgc_8c.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxgc.h</a>
+</li>
+<li>dmxCopyGC()
+: <a class="el" href="dmxgc_8c.html#a5a4221a9f3552a0abfe0e968991120bf">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxgc.h</a>
+</li>
+<li>dmxCopyPlane()
+: <a class="el" href="dmxgcops_8c.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxgcops.h</a>
+</li>
+<li>dmxCopyWindow()
+: <a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxwindow.h</a>
+</li>
+<li>dmxCoreMotion()
+: <a class="el" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxinput.h</a>
+, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxevents.c</a>
+</li>
+<li>dmxCreateAndRealizeWindow()
+: <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxwindow.h</a>
+</li>
+<li>dmxCreateColormap()
+: <a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxcmap.h</a>
+</li>
+<li>dmxCreateDefColormap()
+: <a class="el" href="dmxcmap_8c.html#a5481a08a1030ecac42ff809a1c7d2139">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a5481a08a1030ecac42ff809a1c7d2139">dmxcmap.h</a>
+</li>
+<li>dmxCreateGC()
+: <a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxgc.h</a>
+</li>
+<li>dmxCreateNonRootWindow()
+: <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxwindow.c</a>
+</li>
+<li>dmxCreatePicture()
+: <a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxpict.h</a>
+</li>
+<li>dmxCreatePictureList()
+: <a class="el" href="dmxpict_8h.html#a8c52091268b0f77d74d3a097b396abcf">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxpict.c</a>
+</li>
+<li>dmxCreatePixmap()
+: <a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxpixmap.h</a>
+</li>
+<li>dmxCreatePrivateProcPtr
+: <a class="el" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxinputinit.h</a>
+</li>
+<li>dmxCreateRootWindow()
+: <a class="el" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxwindow.h</a>
+</li>
+<li>dmxCreateWindow()
+: <a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxwindow.h</a>
+</li>
+<li>dmxCrossScreen()
+: <a class="el" href="dmxcursor_8c.html#a2d0757fa7119492da7fe26901dab8571">dmxcursor.c</a>
+</li>
+<li>dmxCurrentLogLevel
+: <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxlog.c</a>
+</li>
+<li>dmxCursorDoMultiCursors
+: <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxcursor.c</a>
+</li>
+<li>dmxCursorGeneration
+: <a class="el" href="dmxscrinit_8c.html#a1bed5fde9231f820a1aa25228649575b">dmxscrinit.c</a>
+</li>
+<li>dmxCursorNoMulti()
+: <a class="el" href="dmxcursor_8c.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxcursor.h</a>
+</li>
+<li>dmxCursorOffScreen()
+: <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxcursor.c</a>
+</li>
+<li>dmxCursorPrivPtr
+: <a class="el" href="dmxcursor_8h.html#ae93d2b5a8714fcf2714f03b6cdeadc07">dmxcursor.h</a>
+</li>
+<li>dmxCursorPrivRec
+: <a class="el" href="dmxcursor_8h.html#a78a877b8bee68809063112fb5286e2db">dmxcursor.h</a>
+</li>
+<li>DMXDBG0
+: <a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxbackend.c</a>
+, <a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxcommon.c</a>
+, <a class="el" href="dmxevents_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxevents.c</a>
+</li>
+<li>DMXDBG1
+: <a class="el" href="dmxcursor_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxbackend.c</a>
+, <a class="el" href="dmxconsole_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxconsole.c</a>
+, <a class="el" href="dmxevents_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxevents.c</a>
+</li>
+<li>DMXDBG2
+: <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxbackend.c</a>
+, <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxevents.c</a>
+</li>
+<li>DMXDBG3
+: <a class="el" href="dmxconsole_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxbackend.c</a>
+, <a class="el" href="dmxevents_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxevents.c</a>
+</li>
+<li>DMXDBG4
+: <a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxbackend.c</a>
+, <a class="el" href="dmxevents_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxevents.c</a>
+</li>
+<li>DMXDBG5
+: <a class="el" href="dmxcursor_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxbackend.c</a>
+, <a class="el" href="dmxconsole_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxconsole.c</a>
+, <a class="el" href="dmxevents_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxevents.c</a>
+</li>
+<li>DMXDBG6
+: <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxbackend.c</a>
+, <a class="el" href="dmxevents_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxevents.c</a>
+</li>
+<li>DMXDBG7
+: <a class="el" href="dmxconsole_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxbackend.c</a>
+, <a class="el" href="dmxevents_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxevents.c</a>
+</li>
+<li>DMXDBG8
+: <a class="el" href="dmxbackend_8c.html#a57571aaa5d83f2f29a6bd0ad8379b4fa">dmxbackend.c</a>
+</li>
+<li>DMXDBG9
+: <a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">dmxbackend.c</a>
+</li>
+<li>dmxDebug
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxlog.h</a>
+</li>
+<li>dmxDepth
+: <a class="el" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxinit.c</a>
+</li>
+<li>DMXDesktopAttributesPtr
+: <a class="el" href="dmxextension_8h.html#a96ae1d459f8d65cbc2204f324cbe8b72">dmxextension.h</a>
+</li>
+<li>dmxDestroyClip()
+: <a class="el" href="dmxgc_8c.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxgc.h</a>
+</li>
+<li>dmxDestroyColormap()
+: <a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxcmap.h</a>
+</li>
+<li>dmxDestroyGC()
+: <a class="el" href="dmxgc_8c.html#a7f33d96c7308bec0eb74822316c7ff23">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxgc.h</a>
+</li>
+<li>dmxDestroyPicture()
+: <a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxpict.h</a>
+</li>
+<li>dmxDestroyPictureClip()
+: <a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxpict.h</a>
+</li>
+<li>dmxDestroyPictureList()
+: <a class="el" href="dmxpict_8c.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxpict.h</a>
+</li>
+<li>dmxDestroyPixmap()
+: <a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxpixmap.h</a>
+</li>
+<li>dmxDestroyPrivateProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxinputinit.h</a>
+</li>
+<li>dmxDestroyWindow()
+: <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxwindow.h</a>
+</li>
+<li>dmxDetachScreen()
+: <a class="el" href="dmxextension_8c.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxextension.h</a>
+</li>
+<li>dmxDeviceCursorCleanup()
+: <a class="el" href="dmxcursor_8c.html#af291298e4f52875e45d7097a223a8c0b">dmxcursor.c</a>
+</li>
+<li>dmxDeviceCursorInitialize()
+: <a class="el" href="dmxcursor_8c.html#a214b710621ed0279d6321375f3512a87">dmxcursor.c</a>
+</li>
+<li>dmxDeviceOnOff()
+: <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxinputinit.c</a>
+</li>
+<li>dmxDisplayInit()
+: <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxinit.c</a>
+</li>
+<li>dmxDisplaysFromCommandLine
+: <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxconfig.c</a>
+</li>
+<li>dmxDoChangeWindowAttributes()
+: <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxwindow.c</a>
+</li>
+<li>dmxDoCreatePicture()
+: <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxpict.c</a>
+</li>
+<li>dmxDoesOverlap()
+: <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxcursor.c</a>
+</li>
+<li>dmxDoRestackWindow()
+: <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxwindow.c</a>
+</li>
+<li>dmxDoSetShape()
+: <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxwindow.c</a>
+</li>
+<li>dmxDoSync()
+: <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxsync.c</a>
+</li>
+<li>dmxDPMSInit()
+: <a class="el" href="dmxdpms_8c.html#a6c93ecabb9ee83027c79f878e143a472">dmxdpms.c</a>
+, <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxdpms.h</a>
+</li>
+<li>dmxDPMSTerm()
+: <a class="el" href="dmxdpms_8c.html#a54288399c9ed5293b83d7d508ff2465c">dmxdpms.c</a>
+, <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxdpms.h</a>
+</li>
+<li>dmxDPMSWakeup()
+: <a class="el" href="dmxdpms_8c.html#aa996aaa17a07afb7fc613142599505c5">dmxdpms.c</a>
+, <a class="el" href="dmxdpms_8h.html#aa996aaa17a07afb7fc613142599505c5">dmxdpms.h</a>
+</li>
+<li>DMXDummyKbd
+: <a class="el" href="dmxinputinit_8c.html#af0b33ec9267eea9d58f6792e33e02295">dmxinputinit.c</a>
+</li>
+<li>dmxDummyKbdGetInfo()
+: <a class="el" href="dmxdummy_8c.html#a31bf72cac5b5327393423d49a437fc8b">dmxdummy.c</a>
+, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxdummy.h</a>
+</li>
+<li>DMXDummyMou
+: <a class="el" href="dmxinputinit_8c.html#a3041e526ae9e56b4a2d0a99f030af71f">dmxinputinit.c</a>
+</li>
+<li>dmxDummyMouGetInfo()
+: <a class="el" href="dmxdummy_8c.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxdummy.c</a>
+, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxdummy.h</a>
+</li>
+<li>dmxDump()
+: <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxconsole.c</a>
+</li>
+<li>dmxEnqueue()
+: <a class="el" href="dmxevents_8c.html#ac678be4d489b749fea88a8f0e9045499">dmxevents.c</a>
+, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxevents.h</a>
+</li>
+<li>dmxEnqueueProcPtr
+: <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxinputinit.h</a>
+</li>
+<li>dmxeqSwitchScreen()
+: <a class="el" href="dmxinput_8h.html#ac30ee4be3ed3f25b13caba5cf17cf41d">dmxinput.h</a>
+</li>
+<li>dmxError
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxlog.h</a>
+</li>
+<li>dmxErrorHandler()
+: <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxinit.c</a>
+</li>
+<li>dmxErrorOccurred
+: <a class="el" href="dmx_8h.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxinit.c</a>
+</li>
+<li>DMXEventMap
+: <a class="el" href="dmxinputinit_8h.html#a8143582d36de7cbdda4cca97cc4fb4f8">dmxinputinit.h</a>
+</li>
+<li>dmxEventName()
+: <a class="el" href="dmxlog_8h.html#ad06725902753399035cb0ebde9c45e9a">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxlog.c</a>
+</li>
+<li>dmxExecHost()
+: <a class="el" href="dmxinit_8c.html#a609d59c7622777da5af1930d07b06e20">dmxinit.c</a>
+</li>
+<li>dmxExecOS()
+: <a class="el" href="dmxinit_8c.html#a48c537b2dc0c7e3acf70c1b60c211bae">dmxinit.c</a>
+</li>
+<li>DMXEXT
+: <a class="el" href="dmx-config_8h.html#aa054c2ad75b0e796e5aca99f3cc58c04">dmx-config.h</a>
+</li>
+<li>DMXExtensionInit()
+: <a class="el" href="dmx_8c.html#adc46810045a2d02d8bbf9a0ae9a85dbb">dmx.c</a>
+</li>
+<li>dmxExtMotion()
+: <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxevents.c</a>
+</li>
+<li>dmxFatal
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxlog.h</a>
+</li>
+<li>dmxFdCount
+: <a class="el" href="dmxsigio_8c.html#ac926cb5aa8d124192f381a9e05d49cb8">dmxsigio.c</a>
+</li>
+<li>dmxFetchDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a7f4bc58ef9f987c6667b2aca63577252">dmx.c</a>
+</li>
+<li>dmxFetchInputAttributes()
+: <a class="el" href="dmx_8c.html#acf83414bba3036835bc2f489c3243f31">dmx.c</a>
+</li>
+<li>dmxFetchScreenAttributes()
+: <a class="el" href="dmx_8c.html#a632a882d7c7db081ae7a4c6b1a7578de">dmx.c</a>
+</li>
+<li>dmxFillPolygon()
+: <a class="el" href="dmxgcops_8c.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxgcops.h</a>
+</li>
+<li>dmxFillSpans()
+: <a class="el" href="dmxgcops_8c.html#aa70a52ce25b894154a610b0f3fc130cf">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#aa70a52ce25b894154a610b0f3fc130cf">dmxgcops.h</a>
+</li>
+<li>dmxFindAlternatePixmap()
+: <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxgcops.c</a>
+</li>
+<li>dmxFindCursor()
+: <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxcursor.c</a>
+</li>
+<li>dmxFindFirstScreen()
+: <a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxinput.h</a>
+, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxevents.c</a>
+</li>
+<li>dmxFindFormat()
+: <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxpict.c</a>
+</li>
+<li>dmxFindPointerScreen()
+: <a class="el" href="dmxcommon_8c.html#a907580b7be71d9be0b771d32210f3cad">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a907580b7be71d9be0b771d32210f3cad">dmxcommon.h</a>
+</li>
+<li>dmxFixup()
+: <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxevents.c</a>
+</li>
+<li>dmxFlushPendingSyncs()
+: <a class="el" href="dmxextension_8h.html#af7927d9de14425779c5de40312407203">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxextension.c</a>
+</li>
+<li>dmxFontErrorHandler()
+: <a class="el" href="dmxfont_8c.html#aba35600742d4d57b9dd9fb9dde973707">dmxfont.c</a>
+</li>
+<li>dmxFontLastError
+: <a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxfont.c</a>
+</li>
+<li>dmxFontPath
+: <a class="el" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a10581b0cb51e730e26cbc08913a76c5f">dmxinit.c</a>
+</li>
+<li>dmxFontPrivateIndex
+: <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmx.h</a>
+, <a class="el" href="dmxfont_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxfont.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a4e2a5b2ae34073156aef6b406552657f">dmxscrinit.c</a>
+</li>
+<li>dmxFontPrivPtr
+: <a class="el" href="dmxfont_8h.html#a79b4c89f92d4b1c88343b39bc681ef2a">dmxfont.h</a>
+</li>
+<li>dmxFontPrivRec
+: <a class="el" href="dmxfont_8h.html#a06305f429e61106b149a71e28db42541">dmxfont.h</a>
+</li>
+<li>dmxForceExposures()
+: <a class="el" href="dmxextension_8c.html#afa9f0ee11cd56a66fe5925a283c18188">dmxextension.c</a>
+</li>
+<li>dmxForceWindowCreation()
+: <a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxextension.c</a>
+</li>
+<li>dmxFreeFontPath()
+: <a class="el" href="dmxfont_8c.html#a287e0fab77b9351a96fbc08fb5ec7e25">dmxfont.c</a>
+</li>
+<li>dmxFunctionsProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxinputinit.h</a>
+</li>
+<li>DMXFunctionType
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">dmxinputinit.h</a>
+</li>
+<li>dmxGCFuncs
+: <a class="el" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxgc.c</a>
+</li>
+<li>dmxGCOps
+: <a class="el" href="dmxgc_8c.html#a4688e83670c13b303cba5309eaf23424">dmxgc.c</a>
+</li>
+<li>dmxGCPrivateKey
+: <a class="el" href="dmx_8h.html#aca566caa216b43a032891484384dfca8">dmx.h</a>
+</li>
+<li>dmxGCPrivateKeyRec
+: <a class="el" href="dmx_8h.html#a9aef85f2d27fb4a444c0a24ff953db57">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxscrinit.c</a>
+</li>
+<li>dmxGCPrivPtr
+: <a class="el" href="dmxgc_8h.html#a234db372824505de585d75173374f566">dmxgc.h</a>
+</li>
+<li>dmxGCPrivRec
+: <a class="el" href="dmxgc_8h.html#a2d7a664f045bba899390f66832c1ccf8">dmxgc.h</a>
+</li>
+<li>dmxGeneration
+: <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxscrinit.c</a>
+</li>
+<li>dmxGetButtonMapping()
+: <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxevents.c</a>
+</li>
+<li>dmxGetColormaps()
+: <a class="el" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxinit.h</a>
+</li>
+<li>dmxGetDefaultWindowAttributes()
+: <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxwindow.c</a>
+</li>
+<li>dmxGetDesktopAttributes()
+: <a class="el" href="dmxextension_8c.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxextension.h</a>
+</li>
+<li>dmxGetFontPath()
+: <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxfont.c</a>
+</li>
+<li>dmxGetGlobalPosition()
+: <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxinput.h</a>
+, <a class="el" href="dmxevents_8c.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxevents.c</a>
+</li>
+<li>dmxGetImage()
+: <a class="el" href="dmxgcops_8c.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxgcops.h</a>
+</li>
+<li>dmxGetInfoProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxinputinit.h</a>
+</li>
+<li>dmxGetInputAttributes()
+: <a class="el" href="dmxextension_8c.html#a3bde3bbb52470b5eb185805d861e6216">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxextension.h</a>
+</li>
+<li>dmxGetInputCount()
+: <a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxextension.c</a>
+</li>
+<li>dmxGetLogLevel()
+: <a class="el" href="dmxlog_8c.html#a917ecdf378ddb91bb2aece6583bd449d">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a917ecdf378ddb91bb2aece6583bd449d">dmxlog.h</a>
+</li>
+<li>dmxGetNumScreens()
+: <a class="el" href="dmxextension_8h.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxextension.c</a>
+</li>
+<li>dmxGetPixmapFormats()
+: <a class="el" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxinit.h</a>
+</li>
+<li>dmxGetScreenAttribs()
+: <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxinit.h</a>
+, <a class="el" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxinit.c</a>
+</li>
+<li>dmxGetScreenAttributes()
+: <a class="el" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxextension.h</a>
+</li>
+<li>dmxGetSpans()
+: <a class="el" href="dmxgcops_8c.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxgcops.h</a>
+</li>
+<li>dmxGetVisualInfo()
+: <a class="el" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxinit.h</a>
+</li>
+<li>dmxGetWindowAttributes()
+: <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a81cd222e07016da8ee5c87c44a03312a">dmxextension.c</a>
+</li>
+<li>dmxGlobalHeight
+: <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxcb.h</a>
+</li>
+<li>dmxGlobalInvalid
+: <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxevents.c</a>
+</li>
+<li>dmxGlobalWidth
+: <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a738220b78d864fe9317683a1ff425c75">dmxcb.h</a>
+</li>
+<li>dmxGlobalX
+: <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxevents.c</a>
+</li>
+<li>dmxGlobalY
+: <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxevents.c</a>
+</li>
+<li>dmxGLXProxy
+: <a class="el" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxinit.c</a>
+</li>
+<li>dmxGlyphErrorHandler()
+: <a class="el" href="dmxpict_8c.html#a3b0dd9ecc0fbb260662ba6c18d69bd08">dmxpict.c</a>
+</li>
+<li>dmxGlyphLastError
+: <a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxpict.c</a>
+</li>
+<li>dmxGlyphPrivPtr
+: <a class="el" href="dmxpict_8h.html#a269ea3cc32b511169336925123d1558d">dmxpict.h</a>
+</li>
+<li>dmxGlyphPrivRec
+: <a class="el" href="dmxpict_8h.html#a9861086a35576e59fe0f9306c4e2588d">dmxpict.h</a>
+</li>
+<li>dmxGlyphs()
+: <a class="el" href="dmxpict_8c.html#a8a98dca5e23c501c44fa3e040e31d100">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a8a98dca5e23c501c44fa3e040e31d100">dmxpict.h</a>
+</li>
+<li>dmxGlyphSetPrivateKey
+: <a class="el" href="dmx_8h.html#a1ff8700f83ebcf9aab7903e6686dd140">dmx.h</a>
+</li>
+<li>dmxGlyphSetPrivateKeyRec
+: <a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxscrinit.c</a>
+, <a class="el" href="dmx_8h.html#a82e1e514bdfabd9d2d898a5938018b06">dmx.h</a>
+</li>
+<li>dmxHeader()
+: <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxlog.c</a>
+</li>
+<li>dmxHideCursor()
+: <a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#ad67e1086ef62ecfa33549d74cd89a379">dmxcursor.c</a>
+</li>
+<li>dmxIgnoreBadFontPaths
+: <a class="el" href="dmxinit_8c.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmx.h</a>
+</li>
+<li>dmxImageGlyphBlt()
+: <a class="el" href="dmxgcops_8h.html#a3feeb20d71e2368e436633eddf4b13ac">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a3feeb20d71e2368e436633eddf4b13ac">dmxgcops.c</a>
+</li>
+<li>dmxImageText16()
+: <a class="el" href="dmxgcops_8c.html#acb19f9ef082c76f281679994057fafe1">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxgcops.h</a>
+</li>
+<li>dmxImageText8()
+: <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a1fc863ca944469fc34d78db948f14053">dmxgcops.c</a>
+</li>
+<li>dmxInfo
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxlog.h</a>
+</li>
+<li>dmxInitFonts()
+: <a class="el" href="dmxfont_8c.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxfont.h</a>
+</li>
+<li>dmxInitGC()
+: <a class="el" href="dmxgc_8h.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxgc.h</a>
+, <a class="el" href="dmxgc_8c.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxgc.c</a>
+</li>
+<li>dmxInitIndexed()
+: <a class="el" href="dmxpict_8c.html#a5c81bdb404715c2318d3eda49e26fe68">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a5c81bdb404715c2318d3eda49e26fe68">dmxpict.h</a>
+</li>
+<li>dmxInitOrigins()
+: <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxcursor.c</a>
+</li>
+<li>dmxInitOverlap()
+: <a class="el" href="dmxcursor_8c.html#a77c74a33de88fae6cf0de8b755a5c411">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxcursor.h</a>
+</li>
+<li>dmxInitPixmap()
+: <a class="el" href="dmxpixmap_8c.html#aacf02a6e5ba85a356f09f66159e71a75">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#aacf02a6e5ba85a356f09f66159e71a75">dmxpixmap.h</a>
+</li>
+<li>dmxInitProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxinputinit.h</a>
+</li>
+<li>dmxInitRender()
+: <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a76cabef9d3047d8f514fb6e17b951145">dmxpict.c</a>
+</li>
+<li>dmxInitWindow()
+: <a class="el" href="dmxwindow_8h.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxwindow.c</a>
+</li>
+<li>dmxInputAttachBackend()
+: <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a2ee085307a1dba7b07fa2eb34639815c">dmxinputinit.c</a>
+</li>
+<li>dmxInputAttachConsole()
+: <a class="el" href="dmxinputinit_8c.html#ac3f9807875f237589d57ab9f006735af">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxinputinit.h</a>
+</li>
+<li>dmxInputAttachNew()
+: <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxinputinit.c</a>
+</li>
+<li>dmxInputAttachOld()
+: <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxinputinit.c</a>
+</li>
+<li>DMXInputAttributesPtr
+: <a class="el" href="dmxextension_8h.html#af665732621edf76f4bd259d14eb99164">dmxextension.h</a>
+</li>
+<li>dmxInputCopyLocal()
+: <a class="el" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxinputinit.h</a>
+</li>
+<li>dmxInputDetach()
+: <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxdetach.c</a>
+, <a class="el" href="dmxinputinit_8c.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxinputinit.h</a>
+</li>
+<li>dmxInputDetachAll()
+: <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#adec246343ae8402c7cc47b19020c7ef7">dmxinputinit.c</a>
+</li>
+<li>dmxInputDetachId()
+: <a class="el" href="dmxinputinit_8c.html#ad7a3f09eeaf98373c261119fba907c47">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ad7a3f09eeaf98373c261119fba907c47">dmxinputinit.h</a>
+</li>
+<li>dmxInputEnabled
+: <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxsigio.c</a>
+</li>
+<li>dmxInputExtensionErrorHandler()
+: <a class="el" href="dmxinputinit_8h.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxinputinit.c</a>
+</li>
+<li>dmxInputFree()
+: <a class="el" href="dmxinput_8h.html#afa044735ab6fae7c75c82243a5159611">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxinputinit.c</a>
+</li>
+<li>dmxInputFreeLocal()
+: <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxinputinit.c</a>
+</li>
+<li>DMXInputInfo
+: <a class="el" href="dmx_8h.html#a175903acd588f450ac6325e17355f8ca">dmx.h</a>
+</li>
+<li>dmxInputInit()
+: <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxinputinit.c</a>
+, <a class="el" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxinput.h</a>
+</li>
+<li>dmxInputLateReInit()
+: <a class="el" href="dmxinput_8h.html#a9d1185c140ba54b24312ff6c98105c15">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxinputinit.c</a>
+</li>
+<li>dmxInputLocateId()
+: <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxinputinit.c</a>
+</li>
+<li>dmxInputLogDevices()
+: <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxinputinit.c</a>
+, <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxinput.h</a>
+</li>
+<li>dmxInputReInit()
+: <a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxinputinit.c</a>
+, <a class="el" href="dmxinput_8h.html#ac8f3465a13cae73a3d657526643ef7b7">dmxinput.h</a>
+</li>
+<li>dmxInputs
+: <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxinput.h</a>
+, <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxinit.c</a>
+</li>
+<li>dmxInputScanForExtensions()
+: <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxinputinit.c</a>
+</li>
+<li>dmxInstallColormap()
+: <a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxcmap.h</a>
+</li>
+<li>dmxInvalidateGlobalPosition()
+: <a class="el" href="dmxevents_8h.html#a344419a01be02621ec99942c6cfd45ea">dmxevents.h</a>
+, <a class="el" href="dmxevents_8c.html#a344419a01be02621ec99942c6cfd45ea">dmxevents.c</a>
+</li>
+<li>dmxIterateOverlap()
+: <a class="el" href="dmxcursor_8c.html#a28c6651bdff6f7fc01292548659a6eb4">dmxcursor.c</a>
+</li>
+<li>dmxKBBellProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxinputinit.h</a>
+</li>
+<li>dmxKBCtrlProcPtr
+: <a class="el" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxinputinit.h</a>
+</li>
+<li>dmxKbdCtrl()
+: <a class="el" href="dmxinputinit_8c.html#a4538a00d09ac3cd10b81598b39340da3">dmxinputinit.c</a>
+</li>
+<li>dmxKeyboardBellProc()
+: <a class="el" href="dmxinputinit_8c.html#ab127903bdb6bf262e51f128b4cec4960">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxinputinit.h</a>
+</li>
+<li>dmxKeyboardFreeNames()
+: <a class="el" href="dmxinputinit_8c.html#aef5e79cc27e75fdc3fdfb3e45c64dc9a">dmxinputinit.c</a>
+</li>
+<li>dmxKeyboardKbdCtrlProc()
+: <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxinputinit.c</a>
+</li>
+<li>dmxKeyboardOn()
+: <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxinputinit.c</a>
+</li>
+<li>dmxKeyCodeToKeySym()
+: <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxevents.c</a>
+</li>
+<li>dmxKeySymToKeyCode()
+: <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxevents.c</a>
+</li>
+<li>dmxLastErrorEvent
+: <a class="el" href="dmx_8h.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxinit.c</a>
+</li>
+<li>dmxLateReInitProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxinputinit.h</a>
+</li>
+<li>dmxLazyWindowCreation
+: <a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#af266e8dde07901ede60eaa822b3e945a">dmxinit.c</a>
+</li>
+<li>dmxLocalCoreKeyboard
+: <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxinputinit.h</a>
+</li>
+<li>dmxLocalCorePointer
+: <a class="el" href="dmxinputinit_8h.html#ab34ec11967377e32bc0817fb3a8b939e">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ab34ec11967377e32bc0817fb3a8b939e">dmxinputinit.c</a>
+</li>
+<li>DMXLocalDevices
+: <a class="el" href="dmxinputinit_8c.html#a74cb9ef11048e61ab91acd98613210b8">dmxinputinit.c</a>
+</li>
+<li>DMXLocalInitInfo
+: <a class="el" href="dmxinputinit_8h.html#a3c9d38c22c8aff8456167d8990cbded0">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInitInfoPtr
+: <a class="el" href="dmxinputinit_8h.html#a6f7eba570368d4ee72420f0cdb70f5c5">dmxinputinit.h</a>
+</li>
+<li>dmxLocalInitInput()
+: <a class="el" href="dmxinputinit_8h.html#a5ed320a98bbcf4d2970316dff3ddb349">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInputExtType
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInputInfoPtr
+: <a class="el" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">dmxinput.h</a>
+</li>
+<li>DMXLocalInputInfoRec
+: <a class="el" href="dmxinputinit_8h.html#a18d50c3ccca9422952b75ceed4e26e8e">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInputType
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">dmxinputinit.h</a>
+</li>
+<li>dmxLog()
+: <a class="el" href="dmxlog_8h.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxlog.c</a>
+</li>
+<li>dmxLogArgs()
+: <a class="el" href="dmxlog_8c.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxlog.h</a>
+</li>
+<li>dmxLogCont()
+: <a class="el" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a661111d53827a1a15c715b7b32f05a0e">dmxlog.h</a>
+</li>
+<li>dmxLogInput()
+: <a class="el" href="dmxlog_8h.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxlog.c</a>
+</li>
+<li>dmxLogInputCont()
+: <a class="el" href="dmxlog_8h.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxlog.c</a>
+</li>
+<li>dmxLogLevel
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxlog.h</a>
+</li>
+<li>dmxLogOutput()
+: <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxlog.h</a>
+</li>
+<li>dmxLogOutputCont()
+: <a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a9ee9ef3403a0905596796cfcac2334d2">dmxlog.h</a>
+</li>
+<li>dmxLogOutputWarning()
+: <a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a079f70db20eaa2ba22b976851da820b6">dmxlog.h</a>
+</li>
+<li>dmxLogVisual()
+: <a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxlog.c</a>
+</li>
+<li>dmxLookupLocal()
+: <a class="el" href="dmxinputinit_8c.html#aa1d3565232f8ab962246c825bb565bd6">dmxinputinit.c</a>
+</li>
+<li>dmxLookupVisual()
+: <a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxvisual.c</a>
+, <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxvisual.h</a>
+</li>
+<li>dmxLookupVisualFromID()
+: <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxvisual.h</a>
+, <a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxvisual.c</a>
+</li>
+<li>dmxMakeUniqueDeviceName()
+: <a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxinputinit.c</a>
+</li>
+<li>dmxMapClear()
+: <a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxmap.h</a>
+, <a class="el" href="dmxmap_8c.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxmap.c</a>
+</li>
+<li>dmxMapInsert()
+: <a class="el" href="dmxmap_8c.html#ada5a28e0c746708e0f5c45e9e193d907">dmxmap.c</a>
+, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxmap.h</a>
+</li>
+<li>dmxMapLookup()
+: <a class="el" href="dmxmap_8c.html#abc1a46c87c4acd45e4e5f79370be6169">dmxmap.c</a>
+, <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxmap.h</a>
+</li>
+<li>dmxMaxNumScreens()
+: <a class="el" href="dmx_8c.html#ad4763f72eeccf61b16b1e3c3141e3dd3">dmx.c</a>
+</li>
+<li>dmxMCtrlProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxinputinit.h</a>
+</li>
+<li>dmxMessage()
+: <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxlog.c</a>
+</li>
+<li>dmxMotion()
+: <a class="el" href="dmxevents_8c.html#ae08f1801d0215396a7f39bd083ddca11">dmxevents.c</a>
+, <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxevents.h</a>
+</li>
+<li>dmxMotionProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxinputinit.h</a>
+</li>
+<li>DMXMotionType
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">dmxinputinit.h</a>
+</li>
+<li>dmxMoveCursor()
+: <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#a21820e2001f763e3cfc924a1d602bb62">dmxcursor.c</a>
+</li>
+<li>dmxNumInputs
+: <a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxinput.h</a>
+, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxinit.c</a>
+</li>
+<li>dmxNumScreens
+: <a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmx.h</a>
+</li>
+<li>dmxOffProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxinputinit.h</a>
+</li>
+<li>dmxOffScreenOpt
+: <a class="el" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#aa8987e6ecde1821c659e8fe22336fd20">dmxinit.c</a>
+</li>
+<li>dmxOnProcPtr
+: <a class="el" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxinputinit.h</a>
+</li>
+<li>dmxOnScreen()
+: <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxcursor.c</a>
+</li>
+<li>dmxOpenDisplay()
+: <a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxinit.h</a>
+, <a class="el" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxinit.c</a>
+</li>
+<li>dmxPictPrivateKey
+: <a class="el" href="dmx_8h.html#ae1d817ef5faef4a4328e7b6e20329eeb">dmx.h</a>
+</li>
+<li>dmxPictPrivateKeyRec
+: <a class="el" href="dmx_8h.html#abf05e9930ee1c563f28664a2e425eabe">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxscrinit.c</a>
+</li>
+<li>dmxPictPrivPtr
+: <a class="el" href="dmxpict_8h.html#af8d6ee7f8278532ad8b810f448d1cca3">dmxpict.h</a>
+</li>
+<li>dmxPictPrivRec
+: <a class="el" href="dmxpict_8h.html#ab9d490e5079b84da8b60bf0aadd4b10e">dmxpict.h</a>
+</li>
+<li>dmxPictureInit()
+: <a class="el" href="dmxpict_8c.html#a457aa4df6b01e88a26cc069094e4b07c">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxpict.h</a>
+</li>
+<li>dmxPixPrivateKey
+: <a class="el" href="dmx_8h.html#a58cdac45cf32cd2a4246d891717af12a">dmx.h</a>
+</li>
+<li>dmxPixPrivateKeyRec
+: <a class="el" href="dmx_8h.html#af773380733836d74aa67be0d75614fe4">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxscrinit.c</a>
+</li>
+<li>dmxPixPrivPtr
+: <a class="el" href="dmxpixmap_8h.html#a33d23370f4af28113332cd6112de22f1">dmxpixmap.h</a>
+</li>
+<li>dmxPixPrivRec
+: <a class="el" href="dmxpixmap_8h.html#af881d895a7a1cac8c226aa3aff5678c7">dmxpixmap.h</a>
+</li>
+<li>dmxPointerCursorFuncs
+: <a class="el" href="dmxcursor_8h.html#aacf8d4857dd965073f62f10a53edcaa3">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#aacf8d4857dd965073f62f10a53edcaa3">dmxcursor.c</a>
+</li>
+<li>dmxPointerGetMotionBufferSize()
+: <a class="el" href="dmxmotion_8c.html#a71e31cfbffb3603068d897374e173400">dmxmotion.c</a>
+, <a class="el" href="dmxmotion_8h.html#a71e31cfbffb3603068d897374e173400">dmxmotion.h</a>
+</li>
+<li>dmxPointerGetMotionEvents()
+: <a class="el" href="dmxmotion_8h.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxmotion.h</a>
+, <a class="el" href="dmxmotion_8c.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxmotion.c</a>
+</li>
+<li>dmxPointerPutMotionEvent()
+: <a class="el" href="dmxmotion_8h.html#abe71ba14a07f4077ca2658f81426f4c6">dmxmotion.h</a>
+, <a class="el" href="dmxmotion_8c.html#abe71ba14a07f4077ca2658f81426f4c6">dmxmotion.c</a>
+</li>
+<li>dmxPointerSpriteFuncs
+: <a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxcursor.c</a>
+</li>
+<li>dmxPolyArc()
+: <a class="el" href="dmxgcops_8c.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxgcops.h</a>
+</li>
+<li>dmxPolyFillArc()
+: <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a5488891f016532e40ba5e31466fb67fd">dmxgcops.c</a>
+</li>
+<li>dmxPolyFillRect()
+: <a class="el" href="dmxgcops_8c.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxgcops.h</a>
+</li>
+<li>dmxPolyGlyphBlt()
+: <a class="el" href="dmxgcops_8h.html#ae1200c166d613547b34d0adf04d152ea">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#ae1200c166d613547b34d0adf04d152ea">dmxgcops.c</a>
+</li>
+<li>dmxPolylines()
+: <a class="el" href="dmxgcops_8c.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxgcops.h</a>
+</li>
+<li>dmxPolyPoint()
+: <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a03892f8e655a4bb743a264f121b096c6">dmxgcops.c</a>
+</li>
+<li>dmxPolyRectangle()
+: <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxgcops.c</a>
+</li>
+<li>dmxPolySegment()
+: <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxgcops.c</a>
+</li>
+<li>dmxPolyText16()
+: <a class="el" href="dmxgcops_8c.html#a2fe37b5892867df4c29292c975c17e52">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxgcops.h</a>
+</li>
+<li>dmxPolyText8()
+: <a class="el" href="dmxgcops_8c.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxgcops.h</a>
+</li>
+<li>dmxPopulate()
+: <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmx.c</a>
+</li>
+<li>dmxPopulateLocal()
+: <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxinputinit.c</a>
+</li>
+<li>dmxPositionWindow()
+: <a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxwindow.h</a>
+</li>
+<li>dmxPrintOverlap()
+: <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxcursor.c</a>
+</li>
+<li>dmxPrintScreenInfo()
+: <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxinit.c</a>
+</li>
+<li>dmxProcessInputEvents()
+: <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxinputinit.c</a>
+</li>
+<li>dmxProcessInputProcPtr
+: <a class="el" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxinputinit.h</a>
+</li>
+<li>dmxProcRenderAddGlyphs()
+: <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxpict.c</a>
+</li>
+<li>dmxProcRenderCompositeGlyphs()
+: <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxpict.c</a>
+</li>
+<li>dmxProcRenderCreateGlyphSet()
+: <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxpict.c</a>
+</li>
+<li>dmxProcRenderFreeGlyphs()
+: <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxpict.c</a>
+</li>
+<li>dmxProcRenderFreeGlyphSet()
+: <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxpict.c</a>
+</li>
+<li>dmxProcRenderSetPictureFilter()
+: <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxpict.c</a>
+</li>
+<li>dmxProcRenderSetPictureTransform()
+: <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxpict.c</a>
+</li>
+<li>dmxProcSetFontPath()
+: <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxfont.c</a>
+</li>
+<li>dmxPropertyCheckOtherServers()
+: <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxprop.c</a>
+</li>
+<li>dmxPropertyCheckOtherWindows()
+: <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxprop.c</a>
+</li>
+<li>dmxPropertyDisplay()
+: <a class="el" href="dmxprop_8c.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxprop.c</a>
+, <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxprop.h</a>
+</li>
+<li>dmxPropertyErrorHandler()
+: <a class="el" href="dmxprop_8c.html#a45eb0051c6d317735f2bf3b64ddc43e1">dmxprop.c</a>
+</li>
+<li>dmxPropertyIdentifier()
+: <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxprop.c</a>
+</li>
+<li>dmxPropertyIterate()
+: <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxprop.c</a>
+, <a class="el" href="dmxprop_8h.html#a4c53640b27c787d65539555cc3bf3c57">dmxprop.h</a>
+</li>
+<li>dmxPropertySameDisplay()
+: <a class="el" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxprop.c</a>
+, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxprop.h</a>
+</li>
+<li>dmxPropertyWindow()
+: <a class="el" href="dmxprop_8c.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxprop.c</a>
+, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxprop.h</a>
+</li>
+<li>dmxPushPixels()
+: <a class="el" href="dmxgcops_8h.html#a2ca1093683e50ef80846d76a83d2f102">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a2ca1093683e50ef80846d76a83d2f102">dmxgcops.c</a>
+</li>
+<li>dmxPutImage()
+: <a class="el" href="dmxgcops_8c.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxgcops.h</a>
+</li>
+<li>dmxRealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxcursor.c</a>
+</li>
+<li>dmxRealizeFont()
+: <a class="el" href="dmxfont_8c.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxfont.h</a>
+</li>
+<li>dmxRealizeWindow()
+: <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxwindow.c</a>
+</li>
+<li>DMXRecomputeFlag
+: <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">dmxcb.h</a>
+</li>
+<li>dmxReInitOrigins()
+: <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxcursor.h</a>
+</li>
+<li>dmxReInitProcPtr
+: <a class="el" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxinputinit.h</a>
+</li>
+<li>dmxRemoveInput()
+: <a class="el" href="dmxextension_8c.html#a6125541332383040aa07fa1ef310d38d">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a55936739d6df4e5b8a048d5d34c6cd39">dmxextension.h</a>
+</li>
+<li>dmxReparentWindow()
+: <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxwindow.c</a>
+</li>
+<li>dmxResetFonts()
+: <a class="el" href="dmxfont_8c.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxfont.h</a>
+</li>
+<li>dmxResetRender()
+: <a class="el" href="dmxpict_8h.html#a93c956636d6aba1f2ce1cab637e00fff">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a93c956636d6aba1f2ce1cab637e00fff">dmxpict.c</a>
+</li>
+<li>dmxResizeRootWindow()
+: <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#a817739d4921329f1cf71f2af6fcacfc2">dmxwindow.c</a>
+</li>
+<li>dmxResizeScreenWindow()
+: <a class="el" href="dmxwindow_8c.html#af96b8583264e78a4c693c6f7ee887067">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxwindow.h</a>
+</li>
+<li>dmxResizeWindow()
+: <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxwindow.c</a>
+</li>
+<li>dmxRestackWindow()
+: <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxwindow.c</a>
+</li>
+<li>dmxSaveProcVector
+: <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxfont.c</a>
+</li>
+<li>dmxSaveRenderVector
+: <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxpict.c</a>
+</li>
+<li>dmxSaveScreen()
+: <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxscrinit.c</a>
+</li>
+<li>DMXScreenAttributesPtr
+: <a class="el" href="dmxextension_8h.html#a0e47929486368da1a7513c7d2305f24f">dmxextension.h</a>
+</li>
+<li>DMXScreenInfo
+: <a class="el" href="dmx_8h.html#a093c967353474b26640284f89d78e204">dmx.h</a>
+</li>
+<li>dmxScreenInit()
+: <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxscrinit.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxscrinit.c</a>
+</li>
+<li>dmxScreenPrivateKey
+: <a class="el" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">dmx.h</a>
+</li>
+<li>dmxScreenPrivateKeyRec
+: <a class="el" href="dmx_8h.html#a28f509d7976acb88156303dd4231b463">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxscrinit.c</a>
+</li>
+<li>dmxScreens
+: <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxinit.c</a>
+</li>
+<li>dmxSetCursor()
+: <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxcursor.c</a>
+</li>
+<li>dmxSetDefaultFontPath()
+: <a class="el" href="dmxinit_8c.html#a18cb12b28844e363b3f43b3b3582d214">dmxinit.c</a>
+</li>
+<li>dmxSetDesktopAttribute()
+: <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmx.c</a>
+</li>
+<li>dmxSetErrorHandler()
+: <a class="el" href="dmxinit_8h.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxinit.h</a>
+, <a class="el" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxinit.c</a>
+</li>
+<li>dmxSetFontPath()
+: <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxfont.c</a>
+</li>
+<li>dmxSetInputAttribute()
+: <a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmx.c</a>
+</li>
+<li>dmxSetLogLevel()
+: <a class="el" href="dmxlog_8h.html#a1fb44232c682fab283ef2726255e8759">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#a1fb44232c682fab283ef2726255e8759">dmxlog.c</a>
+</li>
+<li>dmxSetPixmapFormats()
+: <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxinit.c</a>
+</li>
+<li>dmxSetScreenAttribute()
+: <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmx.c</a>
+</li>
+<li>dmxSetShape()
+: <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxwindow.c</a>
+</li>
+<li>dmxSetSpans()
+: <a class="el" href="dmxgcops_8c.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxgcops.h</a>
+</li>
+<li>dmxSetWidthHeight()
+: <a class="el" href="dmxcb_8c.html#aaafedb53a138b81ebb62eeff391f1115">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxcb.h</a>
+</li>
+<li>dmxShadowFB
+: <a class="el" href="dmxinit_8c.html#a97d09d0d46e9e7df451072def499e4fe">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmx.h</a>
+</li>
+<li>dmxShadowUpdateProc()
+: <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxshadow.h</a>
+, <a class="el" href="dmxshadow_8c.html#af2e3c9fd493e63137db512ab54bf1327">dmxshadow.c</a>
+</li>
+<li>dmxSigioAdd()
+: <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxsigio.c</a>
+</li>
+<li>dmxSigioBlock()
+: <a class="el" href="dmxsigio_8h.html#a0ab74a514a7e18842b085aa001553137">dmxsigio.h</a>
+, <a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxsigio.c</a>
+</li>
+<li>dmxSigioDisableInput()
+: <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxsigio.h</a>
+, <a class="el" href="dmxsigio_8c.html#aea86e1800e644fac954c6bbf6012c7aa">dmxsigio.c</a>
+</li>
+<li>dmxSigioEnableInput()
+: <a class="el" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxsigio.c</a>
+, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxsigio.h</a>
+</li>
+<li>dmxSigioHandler()
+: <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxsigio.c</a>
+</li>
+<li>dmxSigioHook()
+: <a class="el" href="dmxsigio_8c.html#a71472c553212e8de00f36e072c378a6c">dmxsigio.c</a>
+</li>
+<li>dmxSigioRegister()
+: <a class="el" href="dmxsigio_8c.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxsigio.c</a>
+, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxsigio.h</a>
+</li>
+<li>dmxSigioRemove()
+: <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxsigio.c</a>
+</li>
+<li>dmxSigioState
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxinput.h</a>
+</li>
+<li>dmxSigioUnblock()
+: <a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxsigio.c</a>
+, <a class="el" href="dmxsigio_8h.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxsigio.h</a>
+</li>
+<li>dmxSigioUnhook()
+: <a class="el" href="dmxsigio_8c.html#a0092cc73f6beb3d16b542a8527f1cbf6">dmxsigio.c</a>
+</li>
+<li>dmxSigioUnregister()
+: <a class="el" href="dmxsigio_8h.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxsigio.h</a>
+, <a class="el" href="dmxsigio_8c.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxsigio.c</a>
+</li>
+<li>dmxSLCreate()
+: <a class="el" href="dmxcursor_8c.html#aaf8a9878f12b6653247fc27d960beccf">dmxcursor.c</a>
+</li>
+<li>dmxSLFindNext()
+: <a class="el" href="dmxcursor_8c.html#ab4dcb11cad339e72d843356841ffd203">dmxcursor.c</a>
+</li>
+<li>dmxSLFree()
+: <a class="el" href="dmxcursor_8c.html#a565fbb8c3754a14c1aed13b741705b91">dmxcursor.c</a>
+</li>
+<li>dmxStatActivate()
+: <a class="el" href="dmxstat_8c.html#a3d01ce5487317c131c32e31f05489c58">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxstat.h</a>
+</li>
+<li>dmxStatAlloc()
+: <a class="el" href="dmxstat_8c.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxstat.h</a>
+</li>
+<li>DMXStatAvg
+: <a class="el" href="dmxstat_8c.html#a75a8942c042ee0a2c387e61a28a59b94">dmxstat.c</a>
+</li>
+<li>dmxStatCallback()
+: <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxstat.c</a>
+</li>
+<li>dmxStatDisplays
+: <a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxstat.c</a>
+</li>
+<li>dmxStatFree()
+: <a class="el" href="dmxstat_8c.html#a23687b91d203902bb293ba64c391cee4">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a33d0c28b9f5f129f4328a714f1da1db7">dmxstat.h</a>
+</li>
+<li>DMXStatInfo
+: <a class="el" href="dmx_8h.html#aac7b710f9533f3b984574f1403488673">dmx.h</a>
+</li>
+<li>dmxStatInit()
+: <a class="el" href="dmxstat_8c.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxstat.h</a>
+</li>
+<li>dmxStatInterval
+: <a class="el" href="dmxstat_8h.html#abe67369da5135f53f058261d3c173927">dmxstat.h</a>
+, <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxstat.c</a>
+</li>
+<li>dmxStatSync()
+: <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxstat.h</a>
+, <a class="el" href="dmxstat_8c.html#a1098a195e40df685aaf2fbc238884027">dmxstat.c</a>
+</li>
+<li>dmxStatTimer
+: <a class="el" href="dmxstat_8c.html#a4b07a4c989d24e5cad8f85a24d24406c">dmxstat.c</a>
+</li>
+<li>dmxStatValue()
+: <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxstat.c</a>
+</li>
+<li>dmxStoreColors()
+: <a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxcmap.h</a>
+</li>
+<li>dmxSubdividePrimitives
+: <a class="el" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a8207510b34c9871015d1e9378c31c568">dmxinit.c</a>
+</li>
+<li>dmxSwitchReturn()
+: <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxinputinit.c</a>
+</li>
+<li>dmxSync()
+: <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxsync.c</a>
+, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxsync.h</a>
+</li>
+<li>dmxSyncActivate()
+: <a class="el" href="dmxsync_8h.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxsync.h</a>
+, <a class="el" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxsync.c</a>
+</li>
+<li>dmxSyncBlockHandler()
+: <a class="el" href="dmxsync_8c.html#aa5bb6eee83aba5bedf3c93fbb85af049">dmxsync.c</a>
+</li>
+<li>dmxSyncCallback()
+: <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxsync.c</a>
+</li>
+<li>dmxSyncInit()
+: <a class="el" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxsync.c</a>
+, <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxsync.h</a>
+</li>
+<li>dmxSyncInterval
+: <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxsync.c</a>
+</li>
+<li>dmxSyncPending
+: <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxsync.c</a>
+</li>
+<li>dmxSyncTimer
+: <a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxsync.c</a>
+</li>
+<li>dmxSyncWakeupHandler()
+: <a class="el" href="dmxsync_8c.html#a9329ae45fff6668caaca1fb93792b0b9">dmxsync.c</a>
+</li>
+<li>dmxTestSameDisplay()
+: <a class="el" href="dmxcursor_8c.html#a3beed7bb0f6999879936b2f47751d125">dmxcursor.c</a>
+</li>
+<li>dmxTranslateAndEnqueueExtEvent()
+: <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxevents.c</a>
+</li>
+<li>dmxTrapezoids()
+: <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxpict.c</a>
+</li>
+<li>dmxTriangles()
+: <a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxpict.h</a>
+</li>
+<li>dmxTriFan()
+: <a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxpict.h</a>
+</li>
+<li>dmxTriStrip()
+: <a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxpict.h</a>
+</li>
+<li>dmxTryComputeScreenOrigins()
+: <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxcursor.c</a>
+</li>
+<li>dmxUnrealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxcursor.c</a>
+</li>
+<li>dmxUnrealizeFont()
+: <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxfont.h</a>
+, <a class="el" href="dmxfont_8c.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxfont.c</a>
+</li>
+<li>dmxUnrealizeWindow()
+: <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxwindow.c</a>
+</li>
+<li>dmxUpdateIndexed()
+: <a class="el" href="dmxpict_8c.html#a05292dc07650c6fb40e13640cfce0df6">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a05292dc07650c6fb40e13640cfce0df6">dmxpict.h</a>
+</li>
+<li>dmxUpdateInfoProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxinputinit.h</a>
+</li>
+<li>dmxUpdatePositionProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxinputinit.h</a>
+</li>
+<li>dmxUpdateScreenResources()
+: <a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a602b3c05cd619a8b00d91315009ebc5d">dmxextension.c</a>
+</li>
+<li>DMXUpdateType
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">dmxinput.h</a>
+</li>
+<li>dmxUpdateWindowInfo()
+: <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxinput.c</a>
+, <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxinput.h</a>
+</li>
+<li>dmxUpdateWindowInformation()
+: <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxinputinit.c</a>
+</li>
+<li>dmxUseXKB
+: <a class="el" href="dmxinit_8c.html#ab5b999218612af4136983694943737aa">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmx.h</a>
+</li>
+<li>dmxValidateGC()
+: <a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxgc.h</a>
+, <a class="el" href="dmxgc_8c.html#ad34a918e727baa65bea235ac16b5e08f">dmxgc.c</a>
+</li>
+<li>dmxValidatePicture()
+: <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxpict.h</a>
+</li>
+<li>dmxVDLCount()
+: <a class="el" href="dmxcompat_8c.html#a2bfb19f15e4e2fab177d050423dfd478">dmxcompat.c</a>
+</li>
+<li>dmxVDLDisplayEntry()
+: <a class="el" href="dmxcompat_8c.html#a48a37477c3206396f646511a64e8b7c9">dmxcompat.c</a>
+</li>
+<li>dmxVDLRead()
+: <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxcompat.h</a>
+, <a class="el" href="dmxcompat_8c.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxcompat.c</a>
+</li>
+<li>dmxVDLReadLine()
+: <a class="el" href="dmxcompat_8c.html#a186cebe5d2ccba23be8ed5184ec0b27d">dmxcompat.c</a>
+</li>
+<li>dmxVDLVirtualEntry()
+: <a class="el" href="dmxcompat_8c.html#a0f960866400da9b168f15d8e738bf864">dmxcompat.c</a>
+</li>
+<li>dmxVTPostSwitchProcPtr
+: <a class="el" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxinputinit.h</a>
+</li>
+<li>dmxVTPreSwitchProcPtr
+: <a class="el" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxinputinit.h</a>
+</li>
+<li>dmxVTSwitchProcPtr
+: <a class="el" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxinputinit.h</a>
+</li>
+<li>dmxVTSwitchReturnProcPtr
+: <a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxinputinit.h</a>
+</li>
+<li>dmxWakeupHandler()
+: <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxinputinit.c</a>
+</li>
+<li>dmxWarning
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxlog.h</a>
+</li>
+<li>dmxWarpCursor()
+: <a class="el" href="dmxcursor_8c.html#af80076061e55521b62a7cfd8e66bf3e6">dmxcursor.c</a>
+</li>
+<li>DMXWindowAttributesPtr
+: <a class="el" href="dmxextension_8h.html#ad22f823435ccab00deb798c2e080fbe1">dmxextension.h</a>
+</li>
+<li>dmxWindowExposurePredicate()
+: <a class="el" href="dmxwindow_8c.html#a2d44bd3ba7edbd43508cca91982ce572">dmxwindow.c</a>
+</li>
+<li>dmxWindowExposures()
+: <a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxwindow.h</a>
+</li>
+<li>dmxWinPrivateKey
+: <a class="el" href="dmx_8h.html#a7f019f89eaada79f813c4f969ef4ab00">dmx.h</a>
+</li>
+<li>dmxWinPrivateKeyRec
+: <a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxscrinit.c</a>
+, <a class="el" href="dmx_8h.html#acb038e21fd8e5d160e62e63b339f27af">dmx.h</a>
+</li>
+<li>dmxWinPrivPtr
+: <a class="el" href="dmxwindow_8h.html#a3024ab3c0220000ce6ed1e93fd4880cc">dmxwindow.h</a>
+</li>
+<li>dmxWinPrivRec
+: <a class="el" href="dmxwindow_8h.html#a5f9a6e44e1c8fbd89cf1d50b50fee122">dmxwindow.h</a>
+</li>
+<li>dmxXInputEventName()
+: <a class="el" href="dmxlog_8c.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxlog.h</a>
+</li>
+<li>dmxXkbLayout
+: <a class="el" href="dmxconfig_8c.html#a70d750a10d2cda84bbb9e009c8cdbdda">dmxconfig.c</a>
+</li>
+<li>dmxXkbModel
+: <a class="el" href="dmxconfig_8c.html#a03f1affbcf5042cf537cffc8ce9d47f4">dmxconfig.c</a>
+</li>
+<li>dmxXkbOptions
+: <a class="el" href="dmxconfig_8c.html#aba9019237c80bcabbbbd9afffc723c22">dmxconfig.c</a>
+</li>
+<li>dmxXkbRules
+: <a class="el" href="dmxconfig_8c.html#aae9b4e8aa3f950c6e12e792d6940a852">dmxconfig.c</a>
+</li>
+<li>dmxXkbVariant
+: <a class="el" href="dmxconfig_8c.html#a9237687e93253996897e0e0d584222ed">dmxconfig.c</a>
+</li>
+<li>dpmsGeneration
+: <a class="el" href="dmxdpms_8c.html#a7bb06fe7454077ecfbfae62ac9cba1e0">dmxdpms.c</a>
+</li>
+<li>dpmsSupported
+: <a class="el" href="dmxdpms_8c.html#a2d45a784084cd5cdef646499d5298254">dmxdpms.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x65.html b/hw/dmx/doc/html/globals_0x65.html
new file mode 100644
index 0000000..5121a5b
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x65.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>ecbutton
+: <a class="el" href="xdmxconfig_8c.html#a655e2589b88ef8902e7c022e496d8170">xdmxconfig.c</a>
+</li>
+<li>ecdialog0
+: <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">xdmxconfig.c</a>
+</li>
+<li>ecdialog1
+: <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">xdmxconfig.c</a>
+</li>
+<li>ecpopup
+: <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">xdmxconfig.c</a>
+</li>
+<li>edbutton
+: <a class="el" href="xdmxconfig_8c.html#a7cd605cfca87d28f931794de0132fb91">xdmxconfig.c</a>
+</li>
+<li>eddialog0
+: <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">xdmxconfig.c</a>
+</li>
+<li>eddialog1
+: <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">xdmxconfig.c</a>
+</li>
+<li>eddialog2
+: <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">xdmxconfig.c</a>
+</li>
+<li>edpopup
+: <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">xdmxconfig.c</a>
+</li>
+<li>enqueueMotion()
+: <a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">dmxevents.c</a>
+</li>
+<li>ENQUEUEPROC
+: <a class="el" href="lnx-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">lnx-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-other.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a017080ce5e42667a6582cf858e7185cd">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-common.c</a>
+, <a class="el" href="lnx-ms_8c.html#a017080ce5e42667a6582cf858e7185cd">lnx-ms.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-keyboard.c</a>
+</li>
+<li>EV_FF
+: <a class="el" href="usb-private_8h.html#a97886fd107ad9e34bf130fe2e8a5799a">usb-private.h</a>
+</li>
+<li>EV_MSC
+: <a class="el" href="usb-private_8h.html#af2e56f461a160409ab75afaa916beebf">usb-private.h</a>
+</li>
+<li>EXTRACT_VALUATORS
+: <a class="el" href="dmxevents_8c.html#a4424526939b87a780233ad69fdf26c62">dmxevents.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x66.html b/hw/dmx/doc/html/globals_0x66.html
new file mode 100644
index 0000000..7890832
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x66.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FATAL0
+: <a class="el" href="lnx-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a6bce6020b913db8afe5d94bc63d1b355">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-keyboard.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a6bce6020b913db8afe5d94bc63d1b355">lnx-ps2.c</a>
+, <a class="el" href="usb-mouse_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-other.c</a>
+</li>
+<li>FATAL1
+: <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-other.c</a>
+</li>
+<li>FATAL2
+: <a class="el" href="usb-mouse_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-mouse.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a7952c9e9fe9c75be4964fc53a4299183">lnx-ps2.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">lnx-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-keyboard.c</a>
+, <a class="el" href="usb-common_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-common.c</a>
+, <a class="el" href="lnx-ms_8c.html#a7952c9e9fe9c75be4964fc53a4299183">lnx-ms.c</a>
+, <a class="el" href="usb-other_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-other.c</a>
+</li>
+<li>FINALMESSAGE
+: <a class="el" href="lnx-keyboard_8c.html#ad71b1ebcfa90278a27073d2c0cb4dad4">lnx-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x67.html b/hw/dmx/doc/html/globals_0x67.html
new file mode 100644
index 0000000..67365db
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x67.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GC
+: <a class="el" href="dmxclient_8h.html#a17dcc767f86e6823829de8f847a5d2d4">dmxclient.h</a>
+</li>
+<li>GEN
+: <a class="el" href="dmxconfig_8c.html#af12101f305634cb9d15269a4b7a13b34">dmxconfig.c</a>
+</li>
+<li>GETDMXINPUTFROMPDEV
+: <a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">dmxcommon.h</a>
+</li>
+<li>GETDMXINPUTFROMPDEVICE
+: <a class="el" href="dmxcommon_8h.html#a7067dd8545db11300dc1ee7f461b346d">dmxcommon.h</a>
+</li>
+<li>GETDMXINPUTFROMPRIV
+: <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">dmxcommon.h</a>
+</li>
+<li>GETDMXLOCALFROMPDEV
+: <a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">dmxcommon.h</a>
+</li>
+<li>GETDMXLOCALFROMPDEVICE
+: <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">dmxcommon.h</a>
+</li>
+<li>GetGLXFBConfigs()
+: <a class="el" href="dmx__glxvisuals_8c.html#a0ec26db964e7f051b0c53fa80f0ca64f">dmx_glxvisuals.c</a>
+, <a class="el" href="dmx__glxvisuals_8h.html#a0ec26db964e7f051b0c53fa80f0ca64f">dmx_glxvisuals.h</a>
+</li>
+<li>GetGLXVisualConfigs()
+: <a class="el" href="dmx__glxvisuals_8c.html#abe57e7081e90397658ffe52225891023">dmx_glxvisuals.c</a>
+, <a class="el" href="dmx__glxvisuals_8h.html#abe57e7081e90397658ffe52225891023">dmx_glxvisuals.h</a>
+</li>
+<li>GetGLXVisualConfigsFromFBConfigs()
+: <a class="el" href="dmx__glxvisuals_8c.html#a8c817583455230eb81b38c9fcdf3d363">dmx_glxvisuals.c</a>
+, <a class="el" href="dmx__glxvisuals_8h.html#a8c817583455230eb81b38c9fcdf3d363">dmx_glxvisuals.h</a>
+</li>
+<li>GETNAME
+: <a class="el" href="usb-common_8c.html#a5340233a04762d00a2fc39e922489cbd">usb-common.c</a>
+</li>
+<li>GETONLYPRIVFROMPRIVATE
+: <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">dmxcommon.h</a>
+</li>
+<li>GETPRIV
+: <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">lnx-ps2.c</a>
+, <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">usb-keyboard.c</a>
+, <a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">usb-other.c</a>
+, <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">usb-common.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">lnx-ms.c</a>
+, <a class="el" href="usb-mouse_8c.html#aacf069d346230dd96812d5395728eef2">usb-mouse.c</a>
+</li>
+<li>GETPRIVFROMPDEV
+: <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">dmxcommon.h</a>
+</li>
+<li>GETPRIVFROMPRIVATE
+: <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">dmxcommon.h</a>
+</li>
+<li>GLYPHS_PER_KEY
+: <a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">usb-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x69.html b/hw/dmx/doc/html/globals_0x69.html
new file mode 100644
index 0000000..fa73cfb
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x69.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>indent
+: <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">dmxprint.c</a>
+</li>
+<li>initialStack
+: <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">dmxprint.c</a>
+</li>
+<li>InitInput()
+: <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">dmxinput.c</a>
+</li>
+<li>InitOutput()
+: <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">dmxinit.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x6b.html b/hw/dmx/doc/html/globals_0x6b.html
new file mode 100644
index 0000000..da8063c
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x6b.html
@@ -0,0 +1,217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kbdLinuxActivate()
+: <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxBell()
+: <a class="el" href="lnx-keyboard_8c.html#a0acb8c77b4bd032bda9aeb87a656b9e7">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a0acb8c77b4bd032bda9aeb87a656b9e7">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxCloseConsole()
+: <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxConvert()
+: <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxCreatePrivate()
+: <a class="el" href="lnx-keyboard_8c.html#aaeba8e3220761201a64b5da3e2f85e52">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#aaeba8e3220761201a64b5da3e2f85e52">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxCtrl()
+: <a class="el" href="lnx-keyboard_8c.html#a278d93f44fccf1e642fa58c05bb2d06a">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a278d93f44fccf1e642fa58c05bb2d06a">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxDestroyPrivate()
+: <a class="el" href="lnx-keyboard_8c.html#a5c9ddc88a9a5d989ce49a071eadcec87">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a71f565aa8f6824d52f817dc4a5e504f7">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxGetCurrentVTNumber()
+: <a class="el" href="lnx-keyboard_8c.html#aefe715d8634268857806b5655cb70466">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxGetFreeVTNumber()
+: <a class="el" href="lnx-keyboard_8c.html#a198a0f886cb4a350bfe714c16e92c44d">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxGetInfo()
+: <a class="el" href="lnx-keyboard_8c.html#ae65b4fd1c456532a438479b35228d4cf">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxGetMap()
+: <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxInit()
+: <a class="el" href="lnx-keyboard_8c.html#a24c8cbb95ad1f21d590f57cdb22c25f4">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a24c8cbb95ad1f21d590f57cdb22c25f4">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxKeyDown()
+: <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxKeyState()
+: <a class="el" href="lnx-keyboard_8c.html#a0667fd33b8b30b74319818c9e1752950">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxOff()
+: <a class="el" href="lnx-keyboard_8c.html#a2f0498bfb85d9301b7bab802844b047d">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a2f0498bfb85d9301b7bab802844b047d">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxOn()
+: <a class="el" href="lnx-keyboard_8c.html#a541096c9032b400b6f7f8cc76c36f716">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a541096c9032b400b6f7f8cc76c36f716">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxOpenConsole()
+: <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxOpenVT()
+: <a class="el" href="lnx-keyboard_8c.html#af405cce5d5bbc25171b425782f6e0b92">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxPrefix0Mapping()
+: <a class="el" href="lnx-keyboard_8c.html#a582fe5af774d898b85edb42116598890">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxPrefixMapping()
+: <a class="el" href="lnx-keyboard_8c.html#a67b95ff06cbdb5de12cc01954aa7b67e">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxRead()
+: <a class="el" href="lnx-keyboard_8c.html#aa7781cedb743039542090faf43d9423f">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a5c9ea7d8bd36c991d67988615ac57328">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxReadKernelMapping()
+: <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxVTPostSwitch()
+: <a class="el" href="lnx-keyboard_8c.html#a8c0e2439e4991b78f99c79e90f5e474d">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a8c0e2439e4991b78f99c79e90f5e474d">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxVTPreSwitch()
+: <a class="el" href="lnx-keyboard_8c.html#a50fd258e64aa03fd197af2a1a8306b32">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a50fd258e64aa03fd197af2a1a8306b32">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxVTSignalHandler()
+: <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxVTSwitch()
+: <a class="el" href="lnx-keyboard_8h.html#a11eda88b5082b0adaad1bbc723dae485">lnx-keyboard.h</a>
+, <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">lnx-keyboard.c</a>
+</li>
+<li>kbdUSBConvert()
+: <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">usb-keyboard.c</a>
+</li>
+<li>kbdUSBCtrl()
+: <a class="el" href="usb-keyboard_8c.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">usb-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8h.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">usb-keyboard.h</a>
+</li>
+<li>kbdUSBGetInfo()
+: <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">usb-keyboard.h</a>
+, <a class="el" href="usb-keyboard_8c.html#a2513592fe5b9c9f0cafcb299c6531d50">usb-keyboard.c</a>
+</li>
+<li>kbdUSBGetMap()
+: <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">usb-keyboard.c</a>
+</li>
+<li>kbdUSBInit()
+: <a class="el" href="usb-keyboard_8h.html#a294cdaa0f31f5f463562c72107b569f2">usb-keyboard.h</a>
+, <a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">usb-keyboard.c</a>
+</li>
+<li>kbdUSBKeyDown()
+: <a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">usb-keyboard.c</a>
+</li>
+<li>kbdUSBKeyState()
+: <a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">usb-keyboard.c</a>
+</li>
+<li>kbdUSBOn()
+: <a class="el" href="usb-keyboard_8c.html#ab1326e68df2758918fd0e9aa06387424">usb-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">usb-keyboard.h</a>
+</li>
+<li>kbdUSBRead()
+: <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">usb-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8h.html#a2f9f160c14e7911c167f03c9eab139e7">usb-keyboard.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x6c.html b/hw/dmx/doc/html/globals_0x6c.html
new file mode 100644
index 0000000..d6c129c
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x6c.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LED_MISC
+: <a class="el" href="usb-private_8h.html#acc1dccaea09503c64e9dfb635e19b29a">usb-private.h</a>
+</li>
+<li>LED_MUTE
+: <a class="el" href="usb-private_8h.html#a06e2b597089e33458df03d81fa441995">usb-private.h</a>
+</li>
+<li>LED_SLEEP
+: <a class="el" href="usb-private_8h.html#ad578ee0c4ea73206378c55bba1135e84">usb-private.h</a>
+</li>
+<li>LED_SUSPEND
+: <a class="el" href="usb-private_8h.html#a59fd9fe6c0cd23e8154bc7578d3676a5">usb-private.h</a>
+</li>
+<li>LegalModifier()
+: <a class="el" href="dmxinput_8c.html#a794cad8ab41d42457e19090e38c5b338">dmxinput.c</a>
+</li>
+<li>LEN
+: <a class="el" href="dmxinputinit_8c.html#a05b49c662c073f89e86804f7856622a0">dmxinputinit.c</a>
+</li>
+<li>linux_to_x
+: <a class="el" href="lnx-keyboard_8c.html#a8448907727701c5b1fd1001458ccd62c">lnx-keyboard.c</a>
+</li>
+<li>LOG0
+: <a class="el" href="lnx-keyboard_8c.html#a837722a322e811d5e42242655f277b87">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a837722a322e811d5e42242655f277b87">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a837722a322e811d5e42242655f277b87">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a837722a322e811d5e42242655f277b87">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a837722a322e811d5e42242655f277b87">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a837722a322e811d5e42242655f277b87">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a837722a322e811d5e42242655f277b87">usb-other.c</a>
+</li>
+<li>LOG1
+: <a class="el" href="lnx-ms_8c.html#aab4b3434c36117a2ecdddec40716d97a">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#aab4b3434c36117a2ecdddec40716d97a">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-other.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">lnx-keyboard.c</a>
+</li>
+<li>LOG1INPUT
+: <a class="el" href="usb-common_8c.html#a362570e9b2c9ac295638be490c81d1fb">usb-common.c</a>
+</li>
+<li>LOG2
+: <a class="el" href="lnx-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">lnx-keyboard.c</a>
+, <a class="el" href="usb-other_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-other.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-common.c</a>
+, <a class="el" href="usb-mouse_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-mouse.c</a>
+</li>
+<li>LOG3
+: <a class="el" href="lnx-ms_8c.html#a8247f0bca25789d2ac27674eb26e223f">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a8247f0bca25789d2ac27674eb26e223f">lnx-ps2.c</a>
+, <a class="el" href="usb-mouse_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-mouse.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-keyboard.c</a>
+, <a class="el" href="usb-common_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-common.c</a>
+, <a class="el" href="usb-other_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-other.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">lnx-keyboard.c</a>
+</li>
+<li>LOG3INPUT
+: <a class="el" href="usb-common_8c.html#ab34476eaeb97ba2e10bab547085c22b8">usb-common.c</a>
+</li>
+<li>LOG5INPUT
+: <a class="el" href="usb-common_8c.html#aa9a2c0ce5f5776ac17b498dc1d90ce1f">usb-common.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x6d.html b/hw/dmx/doc/html/globals_0x6d.html
new file mode 100644
index 0000000..591b55e
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x6d.html
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">dmxtodmx.c</a>
+, <a class="el" href="vdltodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">vdltodmx.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">xdmxconfig.c</a>
+</li>
+<li>map
+: <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">usb-keyboard.c</a>
+</li>
+<li>MAX_KEYCODE
+: <a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">usb-keyboard.c</a>
+</li>
+<li>MESSAGE
+: <a class="el" href="lnx-keyboard_8c.html#af8a3e30cb4858ca8a098acae107286c0">lnx-keyboard.c</a>
+</li>
+<li>MIN_KEYCODE
+: <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">usb-keyboard.c</a>
+</li>
+<li>MOTIONPROC
+: <a class="el" href="lnx-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a11a17082bee3b1b8217ce8a12adcf814">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a11a17082bee3b1b8217ce8a12adcf814">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-other.c</a>
+</li>
+<li>mouUSBCtrl()
+: <a class="el" href="usb-mouse_8h.html#a62cd25ae1a19bea910edcbf10c2d8686">usb-mouse.h</a>
+</li>
+<li>mouUSBGetInfo()
+: <a class="el" href="usb-mouse_8c.html#a422205f883732c44c29093a832254579">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">usb-mouse.h</a>
+</li>
+<li>mouUSBGetMap()
+: <a class="el" href="usb-mouse_8c.html#a006f4bb1b13582dc5d54ba662b84a4d7">usb-mouse.c</a>
+</li>
+<li>mouUSBInit()
+: <a class="el" href="usb-mouse_8c.html#a6c0a19ce4ec02df96f781152a8cc5d36">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#a6c0a19ce4ec02df96f781152a8cc5d36">usb-mouse.h</a>
+</li>
+<li>mouUSBOn()
+: <a class="el" href="usb-mouse_8c.html#a919a8e16f26a0742cda7c9824270501b">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#a919a8e16f26a0742cda7c9824270501b">usb-mouse.h</a>
+</li>
+<li>mouUSBRead()
+: <a class="el" href="usb-mouse_8c.html#ae823cb66bf7678148ffadf3202034921">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#afb9d774d978b63fed427dc72d94f632d">usb-mouse.h</a>
+</li>
+<li>MSC_MAX
+: <a class="el" href="usb-private_8h.html#abe411125a4bc2a57b8656a3d44acfc0d">usb-private.h</a>
+</li>
+<li>MSC_SERIAL
+: <a class="el" href="usb-private_8h.html#af0896a7858b26c8c2eb9d8406f2aa32c">usb-private.h</a>
+</li>
+<li>msLinuxButton()
+: <a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">lnx-ms.c</a>
+</li>
+<li>msLinuxCreatePrivate()
+: <a class="el" href="lnx-ms_8c.html#a7d7777681993bc701468245e42c04282">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#a7d7777681993bc701468245e42c04282">lnx-ms.h</a>
+</li>
+<li>msLinuxCtrl()
+: <a class="el" href="lnx-ms_8h.html#a760648b944ddf26eafb81cf9b54dd976">lnx-ms.h</a>
+</li>
+<li>msLinuxDestroyPrivate()
+: <a class="el" href="lnx-ms_8h.html#a570d96862061388c5649972b2fa22d75">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#a570d96862061388c5649972b2fa22d75">lnx-ms.c</a>
+</li>
+<li>msLinuxGetInfo()
+: <a class="el" href="lnx-ms_8c.html#ad650b3779315db603085a045405c9d9a">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">lnx-ms.h</a>
+</li>
+<li>msLinuxGetMap()
+: <a class="el" href="lnx-ms_8c.html#a04f66d21af929f125fa7d524883700d5">lnx-ms.c</a>
+</li>
+<li>msLinuxInit()
+: <a class="el" href="lnx-ms_8c.html#a0afb23673c5b1bc695c09f3f3bd75a4b">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#a0afb23673c5b1bc695c09f3f3bd75a4b">lnx-ms.h</a>
+</li>
+<li>msLinuxOff()
+: <a class="el" href="lnx-ms_8h.html#a834a356a0e28d90699a8178154588e09">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#a834a356a0e28d90699a8178154588e09">lnx-ms.c</a>
+</li>
+<li>msLinuxOn()
+: <a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#ad8f116275f80b5143bc6fe8806cf1298">lnx-ms.c</a>
+</li>
+<li>msLinuxRead()
+: <a class="el" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#a9212626ca3092129b094b014e92e0630">lnx-ms.h</a>
+</li>
+<li>msLinuxReadBytes()
+: <a class="el" href="lnx-ms_8c.html#a71addb6f47215d1e4bf1452fdeeb5081">lnx-ms.c</a>
+</li>
+<li>msLinuxVTPostSwitch()
+: <a class="el" href="lnx-ms_8c.html#af83993c8cc498cbd9f91737beefb5ea3">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#af83993c8cc498cbd9f91737beefb5ea3">lnx-ms.h</a>
+</li>
+<li>msLinuxVTPreSwitch()
+: <a class="el" href="lnx-ms_8h.html#a1ce83df54082f3196ac29e36dea47fc5">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#a1ce83df54082f3196ac29e36dea47fc5">lnx-ms.c</a>
+</li>
+<li>myPrivate
+: <a class="el" href="lnx-keyboard_8c.html#a25692217bddf2b6c089525b325afccf1">lnx-keyboard.c</a>
+, <a class="el" href="usb-private_8h.html#a25692217bddf2b6c089525b325afccf1">usb-private.h</a>
+, <a class="el" href="dmxbackend_8c.html#a25692217bddf2b6c089525b325afccf1">dmxbackend.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a25692217bddf2b6c089525b325afccf1">lnx-ps2.c</a>
+, <a class="el" href="dmxcommon_8c.html#a25692217bddf2b6c089525b325afccf1">dmxcommon.c</a>
+, <a class="el" href="lnx-ms_8c.html#a25692217bddf2b6c089525b325afccf1">lnx-ms.c</a>
+, <a class="el" href="dmxconsole_8c.html#a25692217bddf2b6c089525b325afccf1">dmxconsole.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x6e.html b/hw/dmx/doc/html/globals_0x6e.html
new file mode 100644
index 0000000..3b1fa07
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x6e.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NAME
+: <a class="el" href="dmxcommon_8c.html#a14111ac8f43949172b152e50dc720aba">dmxcommon.c</a>
+</li>
+<li>namebox
+: <a class="el" href="xdmxconfig_8c.html#aeb035d7eb4ec0fd86074b4729a1bcb1e">xdmxconfig.c</a>
+</li>
+<li>ndbutton0
+: <a class="el" href="xdmxconfig_8c.html#a210a7f8748e7ac28c44be94bb607840d">xdmxconfig.c</a>
+</li>
+<li>ndbutton1
+: <a class="el" href="xdmxconfig_8c.html#a191091047c7a786b2994aa7cabbf9d19">xdmxconfig.c</a>
+</li>
+<li>NewInputDeviceRequest()
+: <a class="el" href="dmxinput_8c.html#a8e64d097682947120de17cf9ff43586a">dmxinput.c</a>
+</li>
+<li>NUM_AT2LNX
+: <a class="el" href="lnx-keyboard_8c.html#aa472fa3dc86eaccfc92bb0caf47bdcd9">lnx-keyboard.c</a>
+</li>
+<li>NUM_KEYCODES
+: <a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">usb-keyboard.c</a>
+</li>
+<li>NUM_STATE_ENTRIES
+: <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">lnx-keyboard.c</a>
+, <a class="el" href="usb-private_8h.html#a4551482d17e969e4de70a669be3afc74">usb-private.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x6f.html b/hw/dmx/doc/html/globals_0x6f.html
new file mode 100644
index 0000000..b2ce2fd
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x6f.html
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>O_ASYNC
+: <a class="el" href="dmxsigio_8c.html#ac5d0c9848f853f8b026b1211b93f78b1">dmxsigio.c</a>
+</li>
+<li>O_NONBLOCK
+: <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">dmxsigio.c</a>
+</li>
+<li>OFFSET
+: <a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">dmxmotion.c</a>
+</li>
+<li>okbutton
+: <a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">xdmxconfig.c</a>
+</li>
+<li>opendialog
+: <a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">xdmxconfig.c</a>
+</li>
+<li>openpopup
+: <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">xdmxconfig.c</a>
+</li>
+<li>origbox
+: <a class="el" href="xdmxconfig_8c.html#ac277ca719048235d195e2fe39e16e280">xdmxconfig.c</a>
+</li>
+<li>OsVendorFatalError()
+: <a class="el" href="dmxinit_8c.html#adaf9384688ad8a12254ccb5ce594c3e1">dmxinit.c</a>
+</li>
+<li>OsVendorInit()
+: <a class="el" href="dmxinit_8c.html#a01064ddfa83f5ae5440a15e6d4121af6">dmxinit.c</a>
+</li>
+<li>othUSBCtrl()
+: <a class="el" href="usb-other_8h.html#a968e84db8d818b0fdd455cf61a1da058">usb-other.h</a>
+</li>
+<li>othUSBGetInfo()
+: <a class="el" href="usb-other_8c.html#a35a421bfc49015d8ed37cac84746ba78">usb-other.c</a>
+, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">usb-other.h</a>
+</li>
+<li>othUSBInit()
+: <a class="el" href="usb-other_8h.html#ad1b551c84928693ea1b2edebf6c4fcff">usb-other.h</a>
+, <a class="el" href="usb-other_8c.html#ad1b551c84928693ea1b2edebf6c4fcff">usb-other.c</a>
+</li>
+<li>othUSBOn()
+: <a class="el" href="usb-other_8c.html#a1f1af19f36fcccfc6b67c814fb360573">usb-other.c</a>
+, <a class="el" href="usb-other_8h.html#a1f1af19f36fcccfc6b67c814fb360573">usb-other.h</a>
+</li>
+<li>othUSBRead()
+: <a class="el" href="usb-other_8c.html#a3c2a6d36c58f4372068d019364831151">usb-other.c</a>
+, <a class="el" href="usb-other_8h.html#a901d4789dd6f963fb642427bc6816033">usb-other.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x70.html b/hw/dmx/doc/html/globals_0x70.html
new file mode 100644
index 0000000..0a5732b
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x70.html
@@ -0,0 +1,241 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li class="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pos
+: <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">dmxprint.c</a>
+</li>
+<li>PosAbove
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414">dmx.h</a>
+</li>
+<li>PosAbsolute
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">dmx.h</a>
+</li>
+<li>PosBelow
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">dmx.h</a>
+</li>
+<li>PositionType
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">dmx.h</a>
+</li>
+<li>PosLeftOf
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f">dmx.h</a>
+</li>
+<li>PosNone
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44">dmx.h</a>
+</li>
+<li>PosRelative
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc">dmx.h</a>
+</li>
+<li>PosRightOf
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">dmx.h</a>
+</li>
+<li>PRESS
+: <a class="el" href="lnx-ms_8c.html#a7581da9bfd7ebf4fe3703352df521931">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a7581da9bfd7ebf4fe3703352df521931">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a7581da9bfd7ebf4fe3703352df521931">usb-common.c</a>
+</li>
+<li>PRIV
+: <a class="el" href="lnx-keyboard_8c.html#a4feca68f31d2c2170bef7d62f747dd88">lnx-keyboard.c</a>
+</li>
+<li>ProcDMXAddInput()
+: <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">dmx.c</a>
+</li>
+<li>ProcDMXAddScreen()
+: <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">dmx.c</a>
+</li>
+<li>ProcDMXChangeDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">dmx.c</a>
+</li>
+<li>ProcDMXChangeScreensAttributes()
+: <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">dmx.c</a>
+</li>
+<li>ProcDMXDispatch()
+: <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">dmx.c</a>
+</li>
+<li>ProcDMXForceWindowCreation()
+: <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">dmx.c</a>
+</li>
+<li>ProcDMXGetDesktopAttributes()
+: <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">dmx.c</a>
+</li>
+<li>ProcDMXGetInputAttributes()
+: <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">dmx.c</a>
+</li>
+<li>ProcDMXGetInputCount()
+: <a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">dmx.c</a>
+</li>
+<li>ProcDMXGetScreenAttributes()
+: <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">dmx.c</a>
+</li>
+<li>ProcDMXGetScreenCount()
+: <a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">dmx.c</a>
+</li>
+<li>ProcDMXGetWindowAttributes()
+: <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">dmx.c</a>
+</li>
+<li>ProcDMXQueryVersion()
+: <a class="el" href="dmx_8c.html#a4e75f7427a3c89b10c98c0fcbde1d736">dmx.c</a>
+</li>
+<li>ProcDMXRemoveInput()
+: <a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">dmx.c</a>
+</li>
+<li>ProcDMXRemoveScreen()
+: <a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">dmx.c</a>
+</li>
+<li>ProcDMXSync()
+: <a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">dmx.c</a>
+</li>
+<li>ProcessInputEvents()
+: <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">dmxinput.c</a>
+</li>
+<li>ProcessInputEventsProc
+: <a class="el" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">dmxinput.h</a>
+</li>
+<li>ProcRenderVector
+: <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">dmxpict.c</a>
+</li>
+<li>ProximityIn
+: <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">dmxclient.h</a>
+</li>
+<li>ProximityOut
+: <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">dmxclient.h</a>
+</li>
+<li>ps2LinuxButton()
+: <a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxCreatePrivate()
+: <a class="el" href="lnx-ps2_8c.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxCtrl()
+: <a class="el" href="lnx-ps2_8h.html#a2c7781cb76c926b5a9648e05bc3a1b59">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxDestroyPrivate()
+: <a class="el" href="lnx-ps2_8c.html#af67bcdd060164de0c3a0d3e69c8483ac">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#af67bcdd060164de0c3a0d3e69c8483ac">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxGetInfo()
+: <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#ab914e24acbae5ce49174e06842ac684b">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxGetMap()
+: <a class="el" href="lnx-ps2_8c.html#a0f65c382ff39d64cd881a919eb566964">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxInit()
+: <a class="el" href="lnx-ps2_8c.html#aa0f0b690de9e5c3a958909000c7f787d">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#aa0f0b690de9e5c3a958909000c7f787d">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxOff()
+: <a class="el" href="lnx-ps2_8h.html#af955e539213ec85f5b6d5d7b38dae89e">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#af955e539213ec85f5b6d5d7b38dae89e">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxOn()
+: <a class="el" href="lnx-ps2_8c.html#aaf9aaca79e044d91f072901ad3be1863">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#aaf9aaca79e044d91f072901ad3be1863">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxRead()
+: <a class="el" href="lnx-ps2_8h.html#a0cde2ad6c3aad19be778fc97bb7286a7">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxReadBytes()
+: <a class="el" href="lnx-ps2_8c.html#ad806e9804e49f47d75f252ab0b14c075">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxVTPostSwitch()
+: <a class="el" href="lnx-ps2_8h.html#a11a5bfc4866f86dfe3ea5acb788c4afe">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#a11a5bfc4866f86dfe3ea5acb788c4afe">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxVTPreSwitch()
+: <a class="el" href="lnx-ps2_8c.html#a3a9ac063b46a191b38d92881367d74d4">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#a3a9ac063b46a191b38d92881367d74d4">lnx-ps2.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x71.html b/hw/dmx/doc/html/globals_0x71.html
new file mode 100644
index 0000000..a7457fa
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x71.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>quitpopup
+: <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">xdmxconfig.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x72.html b/hw/dmx/doc/html/globals_0x72.html
new file mode 100644
index 0000000..281205e
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x72.html
@@ -0,0 +1,106 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li class="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>RELEASE
+: <a class="el" href="lnx-ms_8c.html#a2b4d2480737f9eb52f80998518486f01">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a2b4d2480737f9eb52f80998518486f01">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a2b4d2480737f9eb52f80998518486f01">usb-common.c</a>
+</li>
+<li>RenderErrBase
+: <a class="el" href="dmxpict_8c.html#a2a976139e942aa64e03b8f5357ba82ca">dmxpict.c</a>
+</li>
+<li>rtbox
+: <a class="el" href="xdmxconfig_8c.html#acb241369adbfdc70fec382d0d306e012">xdmxconfig.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x73.html b/hw/dmx/doc/html/globals_0x73.html
new file mode 100644
index 0000000..b089a66
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x73.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>scalex()
+: <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">dmxconsole.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a3bc158b6dffde7c1880143b39a5cdd45">xdmxconfig.c</a>
+</li>
+<li>scaley()
+: <a class="el" href="xdmxconfig_8c.html#aa2d08afe50deaa3274b6b1006795cf30">xdmxconfig.c</a>
+, <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">dmxconsole.c</a>
+</li>
+<li>SetDeviceMode()
+: <a class="el" href="dmxxinput_8c.html#aa4b20aa4795f3a94339e1748d5a4d1fb">dmxxinput.c</a>
+</li>
+<li>SetDeviceValuators()
+: <a class="el" href="dmxxinput_8c.html#a1175b57fa9f8cba2b233ffb9e81ed066">dmxxinput.c</a>
+</li>
+<li>SProcDMXAddInput()
+: <a class="el" href="dmx_8c.html#ab430383da03ac7476c5c59fd52c25d07">dmx.c</a>
+</li>
+<li>SProcDMXAddScreen()
+: <a class="el" href="dmx_8c.html#ab1dd1e3ff17ee8ea90bf41e15366edfd">dmx.c</a>
+</li>
+<li>SProcDMXChangeDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a6c6656e72d8e4ecf7879e1b5981f4ba7">dmx.c</a>
+</li>
+<li>SProcDMXChangeScreensAttributes()
+: <a class="el" href="dmx_8c.html#ab0857e8373d5f2824e40b99399e53a52">dmx.c</a>
+</li>
+<li>SProcDMXDispatch()
+: <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">dmx.c</a>
+</li>
+<li>SProcDMXForceWindowCreation()
+: <a class="el" href="dmx_8c.html#ac6ee42ca6657daec84d10aaac5e07ac2">dmx.c</a>
+</li>
+<li>SProcDMXGetDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a1e068cbd512e5db1582004f3374247dc">dmx.c</a>
+</li>
+<li>SProcDMXGetInputAttributes()
+: <a class="el" href="dmx_8c.html#ae9d3545f7127fd2762839e66a1dbf623">dmx.c</a>
+</li>
+<li>SProcDMXGetInputCount()
+: <a class="el" href="dmx_8c.html#af7394899aba8296b835babef42773422">dmx.c</a>
+</li>
+<li>SProcDMXGetScreenAttributes()
+: <a class="el" href="dmx_8c.html#aaf773356a5c4ea879a7ae2c414955a4e">dmx.c</a>
+</li>
+<li>SProcDMXGetScreenCount()
+: <a class="el" href="dmx_8c.html#ab3ba38ff5f0a57f0f01313e6b0894eea">dmx.c</a>
+</li>
+<li>SProcDMXGetWindowAttributes()
+: <a class="el" href="dmx_8c.html#aa1e51336c38f55cfd52955ea633e6595">dmx.c</a>
+</li>
+<li>SProcDMXQueryVersion()
+: <a class="el" href="dmx_8c.html#a40d9e691d399f0ac5d79b70de13cb725">dmx.c</a>
+</li>
+<li>SProcDMXRemoveInput()
+: <a class="el" href="dmx_8c.html#ae2f98f4b6a0e8fed67460294b6b6978d">dmx.c</a>
+</li>
+<li>SProcDMXRemoveScreen()
+: <a class="el" href="dmx_8c.html#a71bba4cfda826375e2b491a24fbea193">dmx.c</a>
+</li>
+<li>SProcDMXSync()
+: <a class="el" href="dmx_8c.html#a9cf92503721755b9945d9ae242203e4f">dmx.c</a>
+</li>
+<li>stack
+: <a class="el" href="dmxprint_8c.html#a85981501fbd26d90c517d5b98c76d6ec">dmxprint.c</a>
+</li>
+<li>str
+: <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">dmxprint.c</a>
+</li>
+<li>SWITCHRETPROC
+: <a class="el" href="lnx-keyboard_8c.html#a3463151de078a8c7b6bfcae492b9e5f9">lnx-keyboard.c</a>
+</li>
+<li>SYSCALL
+: <a class="el" href="lnx-keyboard_8c.html#acdc80f4d45e1276e533490146d014bde">lnx-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x74.html b/hw/dmx/doc/html/globals_0x74.html
new file mode 100644
index 0000000..7c871c8
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x74.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>test_bit
+: <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">usb-common.c</a>
+, <a class="el" href="usb-other_8c.html#a36b621e66020a8ee4641d56c73c4226b">usb-other.c</a>
+</li>
+<li>test_bits
+: <a class="el" href="usb-common_8c.html#a228e7b7d6adf81ad78bc848896044085">usb-common.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x75.html b/hw/dmx/doc/html/globals_0x75.html
new file mode 100644
index 0000000..a2502c3
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x75.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>unscalex()
+: <a class="el" href="dmxconsole_8c.html#a8d0da535d8543184dd5c418d123806ec">dmxconsole.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a4a62777857ee3d909f62c658676d616f">xdmxconfig.c</a>
+</li>
+<li>unscaley()
+: <a class="el" href="xdmxconfig_8c.html#a96116525a27fadda21e883223f4b35b7">xdmxconfig.c</a>
+, <a class="el" href="dmxconsole_8c.html#abbad6ed54f9edf3c3a92321eb2d6b424">dmxconsole.c</a>
+</li>
+<li>UpdateWindowInfoProc
+: <a class="el" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">dmxinput.h</a>
+</li>
+<li>USB_COMMON_DEBUG
+: <a class="el" href="usb-common_8c.html#a4745b9c19ea1cc480dc2b58e59d1e9bb">usb-common.c</a>
+</li>
+<li>USB_KEYBOARD_DEBUG
+: <a class="el" href="usb-keyboard_8c.html#a6a3bdd45bcb120470819f4ef1ffabc57">usb-keyboard.c</a>
+</li>
+<li>usbCreatePrivate()
+: <a class="el" href="usb-common_8c.html#a580f9f4ac56071b925cbf63d8b9dc706">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#a580f9f4ac56071b925cbf63d8b9dc706">usb-common.h</a>
+</li>
+<li>usbDestroyPrivate()
+: <a class="el" href="usb-common_8c.html#a0eca0051ed4a3a117d504d6a82c65313">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#a0eca0051ed4a3a117d504d6a82c65313">usb-common.h</a>
+</li>
+<li>usbInit()
+: <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usb-common.h</a>
+</li>
+<li>usbKeyboard
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usb-common.h</a>
+</li>
+<li>usbMouse
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usb-common.h</a>
+</li>
+<li>usbOff()
+: <a class="el" href="usb-common_8h.html#aa86d87cabbc0971c51452970b7dc879f">usb-common.h</a>
+, <a class="el" href="usb-common_8c.html#aa86d87cabbc0971c51452970b7dc879f">usb-common.c</a>
+</li>
+<li>usbOther
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usb-common.h</a>
+</li>
+<li>usbPrint()
+: <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usb-common.c</a>
+</li>
+<li>usbRead()
+: <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#aea8c9cef438c8851ef7f47d7167152cb">usb-common.h</a>
+</li>
+<li>usbType
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usb-common.h</a>
+</li>
+<li>usec()
+: <a class="el" href="dmxstat_8c.html#a1a534cc2274afee02c883ac10ea9435f">dmxstat.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x76.html b/hw/dmx/doc/html/globals_0x76.html
new file mode 100644
index 0000000..32a255f
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x76.html
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li class="current"><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>VENDOR_RELEASE
+: <a class="el" href="dmx-config_8h.html#aca03501ac22663ba1d6dcff24b2dd30f">dmx-config.h</a>
+</li>
+<li>VENDOR_STRING
+: <a class="el" href="dmx-config_8h.html#a48a30090778ac60d0fdd8648ae0cac57">dmx-config.h</a>
+</li>
+<li>VFatalError()
+: <a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">dmxlog.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x78.html b/hw/dmx/doc/html/globals_0x78.html
new file mode 100644
index 0000000..9f9e69b
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x78.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li class="current"><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>XCheckNotMaskEvent()
+: <a class="el" href="ChkNotMaskEv_8c.html#a492aa70992c986ae525318a29678c4bb">ChkNotMaskEv.c</a>
+, <a class="el" href="ChkNotMaskEv_8h.html#a492aa70992c986ae525318a29678c4bb">ChkNotMaskEv.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_0x79.html b/hw/dmx/doc/html/globals_0x79.html
new file mode 100644
index 0000000..8748056
--- /dev/null
+++ b/hw/dmx/doc/html/globals_0x79.html
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li class="current"><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals.html#index__"><span>_</span></a></li>
+ <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+ <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+ <li class="current"><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div>
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>yydebug
+: <a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">dmxparse.h</a>
+</li>
+<li>yyerror()
+: <a class="el" href="dmxparse_8h.html#a87640c870f7c3d90c830a68620e48de4">dmxparse.h</a>
+</li>
+<li>yyin
+: <a class="el" href="dmxtodmx_8c.html#a46af646807e0797e72b6e8945e7ea88b">dmxtodmx.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">xdmxconfig.c</a>
+, <a class="el" href="dmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">dmxconfig.c</a>
+</li>
+<li>yylex()
+: <a class="el" href="dmxparse_8h.html#a9a7bd1b3d14701eb97c03f3ef34deff1">dmxparse.h</a>
+</li>
+<li>yyparse()
+: <a class="el" href="xdmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">xdmxconfig.c</a>
+, <a class="el" href="dmxtodmx_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">dmxtodmx.c</a>
+, <a class="el" href="dmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">dmxconfig.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs.html b/hw/dmx/doc/html/globals_defs.html
new file mode 100644
index 0000000..19d5394
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>ABS_BRAKE
+: <a class="el" href="usb-private_8h.html#a28f782ce9e5d1e3cff987901a7bf6823">usb-private.h</a>
+</li>
+<li>ABS_GAS
+: <a class="el" href="usb-private_8h.html#acf2960996b3a73cfa447e18a655690c5">usb-private.h</a>
+</li>
+<li>ABS_WHEEL
+: <a class="el" href="usb-private_8h.html#abc57d88f908f35bd3c82ba7dff0d97e7">usb-private.h</a>
+</li>
+<li>ADD
+: <a class="el" href="dmxcommon_8c.html#ad9bd99dabcb14e9efe85df040d63c4b3">dmxcommon.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x62.html b/hw/dmx/doc/html/globals_defs_0x62.html
new file mode 100644
index 0000000..d512a56
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x62.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BLOCK
+: <a class="el" href="lnx-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a52220397ecea855b3a99746e451426e1">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a52220397ecea855b3a99746e451426e1">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">usb-keyboard.c</a>
+, <a class="el" href="usb-other_8c.html#a52220397ecea855b3a99746e451426e1">usb-other.c</a>
+, <a class="el" href="usb-mouse_8c.html#a52220397ecea855b3a99746e451426e1">usb-mouse.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a52220397ecea855b3a99746e451426e1">lnx-ps2.c</a>
+</li>
+<li>BTN_DEAD
+: <a class="el" href="usb-private_8h.html#a0774f9bbd6ba5b888d42a088b906deaf">usb-private.h</a>
+</li>
+<li>BTN_THUMBL
+: <a class="el" href="usb-private_8h.html#ad7efb66d8b7e7e5ef815d869534a769e">usb-private.h</a>
+</li>
+<li>BTN_THUMBR
+: <a class="el" href="usb-private_8h.html#ab637d656fd23697017c9b50be714119d">usb-private.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x63.html b/hw/dmx/doc/html/globals_defs_0x63.html
new file mode 100644
index 0000000..5c23601
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x63.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li class="current"><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>CHECKPROC
+: <a class="el" href="lnx-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#aa35a985e998ad5e2187e13434dca118a">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-keyboard.c</a>
+, <a class="el" href="lnx-ps2_8c.html#aa35a985e998ad5e2187e13434dca118a">lnx-ps2.c</a>
+, <a class="el" href="usb-mouse_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#aa35a985e998ad5e2187e13434dca118a">usb-other.c</a>
+</li>
+<li>CONSOLE_BG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a6fe0e39a803f195f4b98f0a771b7770a">dmxconsole.c</a>
+</li>
+<li>CONSOLE_DEN
+: <a class="el" href="dmxconsole_8c.html#a9966cd444cfac23d54a82230ea4d1abb">dmxconsole.c</a>
+</li>
+<li>CONSOLE_FG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a28d20c43c4cde047ef8db075a3c92ead">dmxconsole.c</a>
+</li>
+<li>CONSOLE_NUM
+: <a class="el" href="dmxconsole_8c.html#af1044436ff6b782c51553425ab4886a9">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_BG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a8a86151c856b02dd2d832ab6420358a0">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_CUR_COLOR
+: <a class="el" href="dmxconsole_8c.html#a3493122f5e207552fb641de41c77df82">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_DET_COLOR
+: <a class="el" href="dmxconsole_8c.html#a34059c2f2d177a788cef1f14697c4dc4">dmxconsole.c</a>
+</li>
+<li>CONSOLE_SCREEN_FG_COLOR
+: <a class="el" href="dmxconsole_8c.html#a9b686d2ada1bab9f9a84a5985baab548">dmxconsole.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x64.html b/hw/dmx/doc/html/globals_defs_0x64.html
new file mode 100644
index 0000000..a3e28a9
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x64.html
@@ -0,0 +1,365 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>DMX_ARG_TEST
+: <a class="el" href="dmxarg_8c.html#a6da7af093c10727644c84f2c0de19dae">dmxarg.c</a>
+</li>
+<li>DMX_ATOMNAME
+: <a class="el" href="dmxprop_8c.html#aa5cb343dc33f4f7e12652ca1298a2ed8">dmxprop.c</a>
+</li>
+<li>DMX_BACKEND_DEBUG
+: <a class="el" href="dmxbackend_8c.html#a93e9da9032ea981dd2543ec373eb964f">dmxbackend.c</a>
+</li>
+<li>DMX_CANVAS_HEIGHT
+: <a class="el" href="xdmxconfig_8c.html#aeef510f1ba3b95b6c6bccdf44c368a9b">xdmxconfig.c</a>
+</li>
+<li>DMX_CANVAS_WIDTH
+: <a class="el" href="xdmxconfig_8c.html#a4a00c4b6ff866ade978aed2dc1e7869c">xdmxconfig.c</a>
+</li>
+<li>DMX_COMMON_OTHER
+: <a class="el" href="dmxcommon_8h.html#ac501f773a244037a88da37c0dc48ac66">dmxcommon.h</a>
+</li>
+<li>DMX_COMMON_PRIVATE
+: <a class="el" href="dmxcommon_8h.html#a6f802c6dc60aba1cbf8c1246cb5a4be4">dmxcommon.h</a>
+</li>
+<li>DMX_COMMON_XKB
+: <a class="el" href="dmxcommon_8h.html#ac4c9fac008144d96c6bd6313b5e158d2">dmxcommon.h</a>
+</li>
+<li>DMX_CONSOLE_DEBUG
+: <a class="el" href="dmxconsole_8c.html#ae6c4c4e74cae671c41da9251ce9f1fc1">dmxconsole.c</a>
+</li>
+<li>DMX_CONSOLE_NAME
+: <a class="el" href="dmxconsole_8c.html#a8ac83cbd82d4f8ec05a6d83a0b8b447f">dmxconsole.c</a>
+</li>
+<li>DMX_CURSOR_DEBUG
+: <a class="el" href="dmxcursor_8c.html#a757d7359cf12591268a62c0974178079">dmxcursor.c</a>
+</li>
+<li>DMX_DATA_HEIGHT
+: <a class="el" href="xdmxconfig_8c.html#a9bdedff1c4e130521fc21098486373f5">xdmxconfig.c</a>
+</li>
+<li>DMX_DATA_WIDTH
+: <a class="el" href="xdmxconfig_8c.html#ac3ced6b90c92cd30147cab91dd5cb3ac">xdmxconfig.c</a>
+</li>
+<li>DMX_ERROR_BUF_SIZE
+: <a class="el" href="dmxinit_8c.html#a9ddbdcc93fbd282591a6658afc26faac">dmxinit.c</a>
+</li>
+<li>DMX_EVENTS_DEBUG
+: <a class="el" href="dmxevents_8c.html#a21de6bc79e2465ef06f9bc1c3fb8071f">dmxevents.c</a>
+</li>
+<li>DMX_FONTPATH_DEBUG
+: <a class="el" href="dmxfont_8c.html#af802427439f07d76ba970ca41f6dd7c1">dmxfont.c</a>
+</li>
+<li>DMX_GC_FUNC_EPILOGUE
+: <a class="el" href="dmxgc_8h.html#aa69b8c93d609c2be2d8680388477d5a4">dmxgc.h</a>
+</li>
+<li>DMX_GC_FUNC_PROLOGUE
+: <a class="el" href="dmxgc_8h.html#aa4d5583f3d6876e1fb96226ec9aa281a">dmxgc.h</a>
+</li>
+<li>DMX_GCOPS_OFFSCREEN
+: <a class="el" href="dmxgcops_8c.html#a95d43c03eb7e78bbe20269c5e7dc6e14">dmxgcops.c</a>
+</li>
+<li>DMX_GCOPS_SET_DRAWABLE
+: <a class="el" href="dmxgcops_8c.html#a4e091318ff2a64af06aef315453b88a2">dmxgcops.c</a>
+</li>
+<li>DMX_GET_COLORMAP_PRIV
+: <a class="el" href="dmxcmap_8h.html#aee4652aa0ac07182583f0cb18ed8557b">dmxcmap.h</a>
+</li>
+<li>DMX_GET_CURSOR_PRIV
+: <a class="el" href="dmxcursor_8h.html#a7ddaf12551bbbd8a23fa60c09cdd6218">dmxcursor.h</a>
+</li>
+<li>DMX_GET_GC_PRIV
+: <a class="el" href="dmxgc_8h.html#a42556da1890b53da10806fbab8174549">dmxgc.h</a>
+</li>
+<li>DMX_GET_GLYPH_PRIV
+: <a class="el" href="dmxpict_8h.html#a1f3973dbafad54de511adf9c20a80281">dmxpict.h</a>
+</li>
+<li>DMX_GET_PICT_PRIV
+: <a class="el" href="dmxpict_8h.html#af79a539efc23aae2fd9f175e5e9dbf56">dmxpict.h</a>
+</li>
+<li>DMX_GET_PIXMAP_PRIV
+: <a class="el" href="dmxpixmap_8h.html#add8168a70114703a791f8d154d139e2a">dmxpixmap.h</a>
+</li>
+<li>DMX_GET_WINDOW_PRIV
+: <a class="el" href="dmxwindow_8h.html#afbcb941cf0707b8bfbe0ac5889123ea3">dmxwindow.h</a>
+</li>
+<li>DMX_IDENT
+: <a class="el" href="dmxprop_8c.html#a15bb16a878f80c6c8a7aec68aadf3444">dmxprop.c</a>
+</li>
+<li>DMX_INFO
+: <a class="el" href="xdmxconfig_8c.html#a434eeb6abc7e5d18d14dd477befa412a">xdmxconfig.c</a>
+</li>
+<li>DMX_KEYBOARD_EVENT_MASK
+: <a class="el" href="dmxcommon_8h.html#a8ed45b47d9c28c37195b3d10df2319a1">dmxcommon.h</a>
+</li>
+<li>DMX_LOCAL_DEFAULT_KEYBOARD
+: <a class="el" href="dmxinputinit_8h.html#aa1870074757b46ee3d10dec90cdf2b64">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_DEFAULT_POINTER
+: <a class="el" href="dmxinputinit_8h.html#a71db83edc922dbedc5f8b9d7bed08be8">dmxinputinit.h</a>
+</li>
+<li>DMX_MAIN_HEIGHT
+: <a class="el" href="xdmxconfig_8c.html#a6ed01845a734215a4ebe763b980e371b">xdmxconfig.c</a>
+</li>
+<li>DMX_MAIN_WIDTH
+: <a class="el" href="xdmxconfig_8c.html#acb087e20636d2017ac49f3cbb4129083">xdmxconfig.c</a>
+</li>
+<li>DMX_MAP_ENTRIES
+: <a class="el" href="dmxinputinit_8h.html#a13002c58c62fa0d9c65076f22c4df452">dmxinputinit.h</a>
+</li>
+<li>DMX_MAP_MASK
+: <a class="el" href="dmxinputinit_8h.html#a51a3f23fde19e452c34d472758710b90">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_AXES
+: <a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">dmxevents.c</a>
+, <a class="el" href="dmxinputinit_8h.html#a144e2f1a618a0d14e2c9ce4fda50104a">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_BUTTONS
+: <a class="el" href="dmxinputinit_8h.html#a612274ec201ce93ff486a18bf84225ec">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_SIGIO_FDS
+: <a class="el" href="dmxinput_8h.html#afc9c4f441bc6bd7d6ba0226d1415031c">dmxinput.h</a>
+</li>
+<li>DMX_MAX_VALUATORS
+: <a class="el" href="dmxinputinit_8h.html#aa3be211c7a2902aa6358627c1a2fe697">dmxinputinit.h</a>
+</li>
+<li>DMX_MAX_XINPUT_EVENT_TYPES
+: <a class="el" href="dmxinputinit_8h.html#ae754d74afaf08d6e9b46b3bc7581623e">dmxinputinit.h</a>
+</li>
+<li>DMX_MOTION_SIZE
+: <a class="el" href="dmxinputinit_8h.html#aa5877f857ec01a4754c187147f3e34f1">dmxinputinit.h</a>
+</li>
+<li>DMX_POINTER_EVENT_MASK
+: <a class="el" href="dmxcommon_8h.html#aab5b14e925716fa97237594ee0b07d01">dmxcommon.h</a>
+</li>
+<li>DMX_RES_CLASS
+: <a class="el" href="dmxconsole_8c.html#a678a6a04bb4db0eb59755b010773ed08">dmxconsole.c</a>
+</li>
+<li>DMX_RES_NAME
+: <a class="el" href="dmxconsole_8c.html#a3dcea52f8f4efb214af127167c51447f">dmxconsole.c</a>
+</li>
+<li>DMX_SET_COLORMAP_PRIV
+: <a class="el" href="dmxcmap_8h.html#a713cec2a0442303cafdb59183a686d28">dmxcmap.h</a>
+</li>
+<li>DMX_SET_CURSOR_PRIV
+: <a class="el" href="dmxcursor_8h.html#a7ec081934a095ba159d03229e714cfd5">dmxcursor.h</a>
+</li>
+<li>DMX_SET_GLYPH_PRIV
+: <a class="el" href="dmxpict_8h.html#a326b29fc2f94bec3a92a7d2c801df449">dmxpict.h</a>
+</li>
+<li>DMX_STAT_BIN0
+: <a class="el" href="dmxstat_8h.html#a8757af3ae82fef58d05e31523454065f">dmxstat.h</a>
+</li>
+<li>DMX_STAT_BINMULT
+: <a class="el" href="dmxstat_8h.html#a9c3e64f7fc0b5305bb6798b298ae6283">dmxstat.h</a>
+</li>
+<li>DMX_STAT_BINS
+: <a class="el" href="dmxstat_8h.html#aac0caef45e7427ea05d5425da659ac56">dmxstat.h</a>
+</li>
+<li>DMX_STAT_INTERVAL
+: <a class="el" href="dmxstat_8h.html#a4cb43c9c7db58a10d8834a6b95a5c180">dmxstat.h</a>
+</li>
+<li>DMX_STAT_LENGTH
+: <a class="el" href="dmxstat_8h.html#ad38ec0be743fab83c032d231034d4d49">dmxstat.h</a>
+</li>
+<li>DMX_STATE_DEBUG
+: <a class="el" href="dmxcommon_8c.html#ac478cb19dda771f00d3b753001a51e09">dmxcommon.c</a>
+</li>
+<li>DMX_UNWRAP
+: <a class="el" href="dmx_8h.html#a94c3604e80b511877468dea0d8da7051">dmx.h</a>
+</li>
+<li>DMX_VENDOR_RELEASE
+: <a class="el" href="dmx-config_8h.html#ad1ec3b5086644b176e48fbdb72b39adc">dmx-config.h</a>
+</li>
+<li>DMX_WINDOW_DEBUG
+: <a class="el" href="dmxinputinit_8c.html#ae119931aa626ba4edf85defe5bebe2e7">dmxinputinit.c</a>
+, <a class="el" href="dmxconsole_8c.html#ae119931aa626ba4edf85defe5bebe2e7">dmxconsole.c</a>
+</li>
+<li>DMX_WINDOW_FUNC_EPILOGUE
+: <a class="el" href="dmxwindow_8h.html#a9144b8f0cbe6f869da8a9ddcfbaa5f1b">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_FUNC_PROLOGUE
+: <a class="el" href="dmxwindow_8h.html#a35b887c43ad7855996b9aab8151fc479">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_OFFSCREEN
+: <a class="el" href="dmxwindow_8h.html#a9d5f07cf04c9e32d918d57d096769a5d">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_X1
+: <a class="el" href="dmxwindow_8h.html#a7eb75e49cc319067cfd50841378f8808">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_X2
+: <a class="el" href="dmxwindow_8h.html#ad52fe7cfe660be4536aabed92c0108d1">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_Y1
+: <a class="el" href="dmxwindow_8h.html#a744e6f0a3bd069a37c77b8bff83bf491">dmxwindow.h</a>
+</li>
+<li>DMX_WINDOW_Y2
+: <a class="el" href="dmxwindow_8h.html#a2d0ce76b2c1b06889444d93d5368c0ba">dmxwindow.h</a>
+</li>
+<li>DMX_WRAP
+: <a class="el" href="dmx_8h.html#a67000d9b6ab4428d002523c0ef981ed0">dmx.h</a>
+</li>
+<li>dmxColormapPrivateKey
+: <a class="el" href="dmx_8h.html#a47c216bb108efa441d7009a7da18d759">dmx.h</a>
+</li>
+<li>DMXDBG0
+: <a class="el" href="dmxcursor_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxbackend.c</a>
+, <a class="el" href="dmxconsole_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxconsole.c</a>
+, <a class="el" href="dmxevents_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxevents.c</a>
+, <a class="el" href="dmxcommon_8c.html#adf6865b0bc7ad370c94e3b8682262c13">dmxcommon.c</a>
+</li>
+<li>DMXDBG1
+: <a class="el" href="dmxevents_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxevents.c</a>
+, <a class="el" href="dmxbackend_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxbackend.c</a>
+, <a class="el" href="dmxcursor_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxcursor.c</a>
+, <a class="el" href="dmxconsole_8c.html#a302a2c9f84249eee79404eb601d085ab">dmxconsole.c</a>
+</li>
+<li>DMXDBG2
+: <a class="el" href="dmxbackend_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxbackend.c</a>
+, <a class="el" href="dmxconsole_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxconsole.c</a>
+, <a class="el" href="dmxevents_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxevents.c</a>
+, <a class="el" href="dmxcursor_8c.html#a1056d63499cee76ebe297c19637f2b79">dmxcursor.c</a>
+</li>
+<li>DMXDBG3
+: <a class="el" href="dmxconsole_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxbackend.c</a>
+, <a class="el" href="dmxevents_8c.html#a6c6714b899194081b94edb722ca1c4bc">dmxevents.c</a>
+</li>
+<li>DMXDBG4
+: <a class="el" href="dmxevents_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxevents.c</a>
+, <a class="el" href="dmxconsole_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxcursor.c</a>
+, <a class="el" href="dmxbackend_8c.html#a8ffd07ee80777c394a6ff32d1021347d">dmxbackend.c</a>
+</li>
+<li>DMXDBG5
+: <a class="el" href="dmxbackend_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxbackend.c</a>
+, <a class="el" href="dmxconsole_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxcursor.c</a>
+, <a class="el" href="dmxevents_8c.html#a753eef37715b6379d7d65e34a23d2e03">dmxevents.c</a>
+</li>
+<li>DMXDBG6
+: <a class="el" href="dmxevents_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxevents.c</a>
+, <a class="el" href="dmxbackend_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxbackend.c</a>
+, <a class="el" href="dmxcursor_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxcursor.c</a>
+, <a class="el" href="dmxconsole_8c.html#af703e1a00a515e2507f7d2a354429a24">dmxconsole.c</a>
+</li>
+<li>DMXDBG7
+: <a class="el" href="dmxbackend_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxbackend.c</a>
+, <a class="el" href="dmxconsole_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxconsole.c</a>
+, <a class="el" href="dmxcursor_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxcursor.c</a>
+, <a class="el" href="dmxevents_8c.html#ab45c7f6cc47b2c786215ca0276d37d91">dmxevents.c</a>
+</li>
+<li>DMXDBG8
+: <a class="el" href="dmxbackend_8c.html#a57571aaa5d83f2f29a6bd0ad8379b4fa">dmxbackend.c</a>
+</li>
+<li>DMXDBG9
+: <a class="el" href="dmxbackend_8c.html#a8342fb3f503f3f58f0f636a908292b14">dmxbackend.c</a>
+</li>
+<li>DMXEXT
+: <a class="el" href="dmx-config_8h.html#aa054c2ad75b0e796e5aca99f3cc58c04">dmx-config.h</a>
+</li>
+<li>dmxGCPrivateKey
+: <a class="el" href="dmx_8h.html#aca566caa216b43a032891484384dfca8">dmx.h</a>
+</li>
+<li>dmxGlyphSetPrivateKey
+: <a class="el" href="dmx_8h.html#a1ff8700f83ebcf9aab7903e6686dd140">dmx.h</a>
+</li>
+<li>dmxPictPrivateKey
+: <a class="el" href="dmx_8h.html#ae1d817ef5faef4a4328e7b6e20329eeb">dmx.h</a>
+</li>
+<li>dmxPixPrivateKey
+: <a class="el" href="dmx_8h.html#a58cdac45cf32cd2a4246d891717af12a">dmx.h</a>
+</li>
+<li>dmxScreenPrivateKey
+: <a class="el" href="dmx_8h.html#a956f38a520a532afb837d5ec089cf29f">dmx.h</a>
+</li>
+<li>dmxWinPrivateKey
+: <a class="el" href="dmx_8h.html#a7f019f89eaada79f813c4f969ef4ab00">dmx.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x65.html b/hw/dmx/doc/html/globals_defs_0x65.html
new file mode 100644
index 0000000..256fb1f
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x65.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>ENQUEUEPROC
+: <a class="el" href="lnx-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a017080ce5e42667a6582cf858e7185cd">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-keyboard.c</a>
+, <a class="el" href="usb-other_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-other.c</a>
+, <a class="el" href="usb-mouse_8c.html#a017080ce5e42667a6582cf858e7185cd">usb-mouse.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a017080ce5e42667a6582cf858e7185cd">lnx-ps2.c</a>
+</li>
+<li>EV_FF
+: <a class="el" href="usb-private_8h.html#a97886fd107ad9e34bf130fe2e8a5799a">usb-private.h</a>
+</li>
+<li>EV_MSC
+: <a class="el" href="usb-private_8h.html#af2e56f461a160409ab75afaa916beebf">usb-private.h</a>
+</li>
+<li>EXTRACT_VALUATORS
+: <a class="el" href="dmxevents_8c.html#a4424526939b87a780233ad69fdf26c62">dmxevents.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x66.html b/hw/dmx/doc/html/globals_defs_0x66.html
new file mode 100644
index 0000000..edd9ae0
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x66.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FATAL0
+: <a class="el" href="lnx-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a6bce6020b913db8afe5d94bc63d1b355">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-keyboard.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a6bce6020b913db8afe5d94bc63d1b355">lnx-ps2.c</a>
+, <a class="el" href="usb-mouse_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a6bce6020b913db8afe5d94bc63d1b355">usb-other.c</a>
+</li>
+<li>FATAL1
+: <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">usb-other.c</a>
+</li>
+<li>FATAL2
+: <a class="el" href="usb-mouse_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-mouse.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a7952c9e9fe9c75be4964fc53a4299183">lnx-ps2.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">lnx-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-keyboard.c</a>
+, <a class="el" href="usb-common_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-common.c</a>
+, <a class="el" href="lnx-ms_8c.html#a7952c9e9fe9c75be4964fc53a4299183">lnx-ms.c</a>
+, <a class="el" href="usb-other_8c.html#a7952c9e9fe9c75be4964fc53a4299183">usb-other.c</a>
+</li>
+<li>FINALMESSAGE
+: <a class="el" href="lnx-keyboard_8c.html#ad71b1ebcfa90278a27073d2c0cb4dad4">lnx-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x67.html b/hw/dmx/doc/html/globals_defs_0x67.html
new file mode 100644
index 0000000..add71d9
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x67.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li class="current"><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GC
+: <a class="el" href="dmxclient_8h.html#a17dcc767f86e6823829de8f847a5d2d4">dmxclient.h</a>
+</li>
+<li>GEN
+: <a class="el" href="dmxconfig_8c.html#af12101f305634cb9d15269a4b7a13b34">dmxconfig.c</a>
+</li>
+<li>GETDMXINPUTFROMPDEV
+: <a class="el" href="dmxcommon_8h.html#ad100a619cb405b9f315abf1019622dd7">dmxcommon.h</a>
+</li>
+<li>GETDMXINPUTFROMPDEVICE
+: <a class="el" href="dmxcommon_8h.html#a7067dd8545db11300dc1ee7f461b346d">dmxcommon.h</a>
+</li>
+<li>GETDMXINPUTFROMPRIV
+: <a class="el" href="dmxcommon_8h.html#a2f522c463d79a458d27ac9e1f6b2e30f">dmxcommon.h</a>
+</li>
+<li>GETDMXLOCALFROMPDEV
+: <a class="el" href="dmxcommon_8h.html#a22db91e32f104411c68049e16a93067b">dmxcommon.h</a>
+</li>
+<li>GETDMXLOCALFROMPDEVICE
+: <a class="el" href="dmxcommon_8h.html#ae60813d58a79b6dae5b98321fd7e1866">dmxcommon.h</a>
+</li>
+<li>GETNAME
+: <a class="el" href="usb-common_8c.html#a5340233a04762d00a2fc39e922489cbd">usb-common.c</a>
+</li>
+<li>GETONLYPRIVFROMPRIVATE
+: <a class="el" href="dmxcommon_8h.html#a215427f6c6c570d64e1039239484563f">dmxcommon.h</a>
+</li>
+<li>GETPRIV
+: <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">usb-common.c</a>
+, <a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">usb-other.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">lnx-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#aacf069d346230dd96812d5395728eef2">usb-mouse.c</a>
+, <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">lnx-ps2.c</a>
+, <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">usb-keyboard.c</a>
+</li>
+<li>GETPRIVFROMPDEV
+: <a class="el" href="dmxcommon_8h.html#a162b4980b050465ca21228eb41f207a2">dmxcommon.h</a>
+</li>
+<li>GETPRIVFROMPRIVATE
+: <a class="el" href="dmxcommon_8h.html#ae04675e973690cab79ef643f298cb375">dmxcommon.h</a>
+</li>
+<li>GLYPHS_PER_KEY
+: <a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">usb-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x6c.html b/hw/dmx/doc/html/globals_defs_0x6c.html
new file mode 100644
index 0000000..9afc7e3
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x6c.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LED_MISC
+: <a class="el" href="usb-private_8h.html#acc1dccaea09503c64e9dfb635e19b29a">usb-private.h</a>
+</li>
+<li>LED_MUTE
+: <a class="el" href="usb-private_8h.html#a06e2b597089e33458df03d81fa441995">usb-private.h</a>
+</li>
+<li>LED_SLEEP
+: <a class="el" href="usb-private_8h.html#ad578ee0c4ea73206378c55bba1135e84">usb-private.h</a>
+</li>
+<li>LED_SUSPEND
+: <a class="el" href="usb-private_8h.html#a59fd9fe6c0cd23e8154bc7578d3676a5">usb-private.h</a>
+</li>
+<li>LEN
+: <a class="el" href="dmxinputinit_8c.html#a05b49c662c073f89e86804f7856622a0">dmxinputinit.c</a>
+</li>
+<li>LOG0
+: <a class="el" href="lnx-ps2_8c.html#a837722a322e811d5e42242655f277b87">lnx-ps2.c</a>
+, <a class="el" href="usb-common_8c.html#a837722a322e811d5e42242655f277b87">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a837722a322e811d5e42242655f277b87">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a837722a322e811d5e42242655f277b87">usb-mouse.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a837722a322e811d5e42242655f277b87">lnx-keyboard.c</a>
+, <a class="el" href="usb-other_8c.html#a837722a322e811d5e42242655f277b87">usb-other.c</a>
+, <a class="el" href="lnx-ms_8c.html#a837722a322e811d5e42242655f277b87">lnx-ms.c</a>
+</li>
+<li>LOG1
+: <a class="el" href="usb-common_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#aab4b3434c36117a2ecdddec40716d97a">usb-other.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#aab4b3434c36117a2ecdddec40716d97a">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#aab4b3434c36117a2ecdddec40716d97a">lnx-ps2.c</a>
+</li>
+<li>LOG1INPUT
+: <a class="el" href="usb-common_8c.html#a362570e9b2c9ac295638be490c81d1fb">usb-common.c</a>
+</li>
+<li>LOG2
+: <a class="el" href="lnx-ps2_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">lnx-ps2.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">lnx-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-keyboard.c</a>
+, <a class="el" href="usb-mouse_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-mouse.c</a>
+, <a class="el" href="usb-other_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">usb-other.c</a>
+</li>
+<li>LOG3
+: <a class="el" href="lnx-ps2_8c.html#a8247f0bca25789d2ac27674eb26e223f">lnx-ps2.c</a>
+, <a class="el" href="usb-mouse_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-mouse.c</a>
+, <a class="el" href="lnx-ms_8c.html#a8247f0bca25789d2ac27674eb26e223f">lnx-ms.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">lnx-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-keyboard.c</a>
+, <a class="el" href="usb-common_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-common.c</a>
+, <a class="el" href="usb-other_8c.html#a8247f0bca25789d2ac27674eb26e223f">usb-other.c</a>
+</li>
+<li>LOG3INPUT
+: <a class="el" href="usb-common_8c.html#ab34476eaeb97ba2e10bab547085c22b8">usb-common.c</a>
+</li>
+<li>LOG5INPUT
+: <a class="el" href="usb-common_8c.html#aa9a2c0ce5f5776ac17b498dc1d90ce1f">usb-common.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x6d.html b/hw/dmx/doc/html/globals_defs_0x6d.html
new file mode 100644
index 0000000..6c96d80
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x6d.html
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>MAX_KEYCODE
+: <a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">usb-keyboard.c</a>
+</li>
+<li>MESSAGE
+: <a class="el" href="lnx-keyboard_8c.html#af8a3e30cb4858ca8a098acae107286c0">lnx-keyboard.c</a>
+</li>
+<li>MIN_KEYCODE
+: <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">usb-keyboard.c</a>
+</li>
+<li>MOTIONPROC
+: <a class="el" href="usb-other_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-other.c</a>
+, <a class="el" href="usb-mouse_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-mouse.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">lnx-keyboard.c</a>
+, <a class="el" href="usb-common_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-common.c</a>
+, <a class="el" href="usb-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">usb-keyboard.c</a>
+, <a class="el" href="lnx-ms_8c.html#a11a17082bee3b1b8217ce8a12adcf814">lnx-ms.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a11a17082bee3b1b8217ce8a12adcf814">lnx-ps2.c</a>
+</li>
+<li>MSC_MAX
+: <a class="el" href="usb-private_8h.html#abe411125a4bc2a57b8656a3d44acfc0d">usb-private.h</a>
+</li>
+<li>MSC_SERIAL
+: <a class="el" href="usb-private_8h.html#af0896a7858b26c8c2eb9d8406f2aa32c">usb-private.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x6e.html b/hw/dmx/doc/html/globals_defs_0x6e.html
new file mode 100644
index 0000000..96ceb44
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x6e.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NAME
+: <a class="el" href="dmxcommon_8c.html#a14111ac8f43949172b152e50dc720aba">dmxcommon.c</a>
+</li>
+<li>NUM_AT2LNX
+: <a class="el" href="lnx-keyboard_8c.html#aa472fa3dc86eaccfc92bb0caf47bdcd9">lnx-keyboard.c</a>
+</li>
+<li>NUM_KEYCODES
+: <a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">usb-keyboard.c</a>
+</li>
+<li>NUM_STATE_ENTRIES
+: <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">lnx-keyboard.c</a>
+, <a class="el" href="usb-private_8h.html#a4551482d17e969e4de70a669be3afc74">usb-private.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x6f.html b/hw/dmx/doc/html/globals_defs_0x6f.html
new file mode 100644
index 0000000..9d1cbcf
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x6f.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>O_ASYNC
+: <a class="el" href="dmxsigio_8c.html#ac5d0c9848f853f8b026b1211b93f78b1">dmxsigio.c</a>
+</li>
+<li>O_NONBLOCK
+: <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">dmxsigio.c</a>
+</li>
+<li>OFFSET
+: <a class="el" href="dmxmotion_8c.html#ab1f1378062fc8a2c5b4132193e143c95">dmxmotion.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x70.html b/hw/dmx/doc/html/globals_defs_0x70.html
new file mode 100644
index 0000000..ea7c726
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x70.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li class="current"><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PRESS
+: <a class="el" href="lnx-ms_8c.html#a7581da9bfd7ebf4fe3703352df521931">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a7581da9bfd7ebf4fe3703352df521931">usb-common.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a7581da9bfd7ebf4fe3703352df521931">lnx-ps2.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x72.html b/hw/dmx/doc/html/globals_defs_0x72.html
new file mode 100644
index 0000000..7df6dbd
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x72.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>RELEASE
+: <a class="el" href="lnx-ms_8c.html#a2b4d2480737f9eb52f80998518486f01">lnx-ms.c</a>
+, <a class="el" href="usb-common_8c.html#a2b4d2480737f9eb52f80998518486f01">usb-common.c</a>
+, <a class="el" href="lnx-ps2_8c.html#a2b4d2480737f9eb52f80998518486f01">lnx-ps2.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x73.html b/hw/dmx/doc/html/globals_defs_0x73.html
new file mode 100644
index 0000000..90a641e
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x73.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li class="current"><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>SWITCHRETPROC
+: <a class="el" href="lnx-keyboard_8c.html#a3463151de078a8c7b6bfcae492b9e5f9">lnx-keyboard.c</a>
+</li>
+<li>SYSCALL
+: <a class="el" href="lnx-keyboard_8c.html#acdc80f4d45e1276e533490146d014bde">lnx-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x74.html b/hw/dmx/doc/html/globals_defs_0x74.html
new file mode 100644
index 0000000..af86507
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x74.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>test_bit
+: <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">usb-common.c</a>
+, <a class="el" href="usb-other_8c.html#a36b621e66020a8ee4641d56c73c4226b">usb-other.c</a>
+</li>
+<li>test_bits
+: <a class="el" href="usb-common_8c.html#a228e7b7d6adf81ad78bc848896044085">usb-common.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x75.html b/hw/dmx/doc/html/globals_defs_0x75.html
new file mode 100644
index 0000000..4b5de7d
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x75.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li class="current"><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>USB_COMMON_DEBUG
+: <a class="el" href="usb-common_8c.html#a4745b9c19ea1cc480dc2b58e59d1e9bb">usb-common.c</a>
+</li>
+<li>USB_KEYBOARD_DEBUG
+: <a class="el" href="usb-keyboard_8c.html#a6a3bdd45bcb120470819f4ef1ffabc57">usb-keyboard.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_defs_0x76.html b/hw/dmx/doc/html/globals_defs_0x76.html
new file mode 100644
index 0000000..e1ab099
--- /dev/null
+++ b/hw/dmx/doc/html/globals_defs_0x76.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_defs.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+ <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+ <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+ <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+ <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+ <li class="current"><a href="globals_defs_0x76.html#index_v"><span>v</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>VENDOR_RELEASE
+: <a class="el" href="dmx-config_8h.html#aca03501ac22663ba1d6dcff24b2dd30f">dmx-config.h</a>
+</li>
+<li>VENDOR_STRING
+: <a class="el" href="dmx-config_8h.html#a48a30090778ac60d0fdd8648ae0cac57">dmx-config.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_enum.html b/hw/dmx/doc/html/globals_enum.html
new file mode 100644
index 0000000..9711674
--- /dev/null
+++ b/hw/dmx/doc/html/globals_enum.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;<ul>
+<li>DMXBlockType
+: <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">dmxinput.h</a>
+</li>
+<li>DMXConfigType
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">dmxparse.h</a>
+</li>
+<li>DMXFunctionType
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039c">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInputExtType
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInputType
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">dmxinputinit.h</a>
+</li>
+<li>dmxLogLevel
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917f">dmxlog.h</a>
+</li>
+<li>DMXMotionType
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349">dmxinputinit.h</a>
+</li>
+<li>DMXRecomputeFlag
+: <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63ee">dmxcb.h</a>
+</li>
+<li>dmxSigioState
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxinput.h</a>
+</li>
+<li>DMXUpdateType
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8">dmxinput.h</a>
+</li>
+<li>PositionType
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">dmx.h</a>
+</li>
+<li>usbType
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usb-common.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_eval.html b/hw/dmx/doc/html/globals_eval.html
new file mode 100644
index 0000000..4df4589
--- /dev/null
+++ b/hw/dmx/doc/html/globals_eval.html
@@ -0,0 +1,233 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>DMX_ABSOLUTE
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">dmxinputinit.h</a>
+</li>
+<li>DMX_ABSOLUTE_CONFINED
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a0fa251fe246858df55404c1df40b818c">dmxinputinit.h</a>
+</li>
+<li>DMX_ACTIVESIGIO
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a7fae538ba04dbc6882d35b2911081d3b">dmxinput.h</a>
+</li>
+<li>DMX_BLOCK
+: <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7a1337585a30b99661498485885b4ff04f">dmxinput.h</a>
+</li>
+<li>DMX_FUNCTION_FINE
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039cacb642cebe9d2e8d1827da4f4f55b019f">dmxinputinit.h</a>
+</li>
+<li>DMX_FUNCTION_GRAB
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca262bb5d411552f7a435dd36bba30b8b4">dmxinputinit.h</a>
+</li>
+<li>DMX_FUNCTION_TERMINATE
+: <a class="el" href="dmxinputinit_8h.html#a9537dacd464c8445848fb808e172039ca69c6e18081258083ff0e25109e6bc32a">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_HIGHLEVEL
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba522a6d99a065b65dc4ae638dbbd28618">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_KEYBOARD
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba9cfee78a907b9e6bed60a9389c7709a2">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_MOUSE
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba35757b72bace4308b51b6fe3329d6818">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_OTHER
+: <a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181ba95e6b211e73013a06ea68d760fca770e">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_BACKEND
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baab3f82141a68b75ae9fa1fdcc30c946fa">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_COMMON
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa942a3c9c695ca587e3543f57669066ee">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_CONSOLE
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa8c17962e3be26e8ac6ab67cce2613eb8">dmxinputinit.h</a>
+</li>
+<li>DMX_LOCAL_TYPE_LOCAL
+: <a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9baa04cf7124964dfea96c0d273b9acf1e16">dmxinputinit.h</a>
+</li>
+<li>DMX_NO_BLOCK
+: <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7add5ccc82aea86bc4dfec91782883202b">dmxinput.h</a>
+</li>
+<li>DMX_NO_RECOMPUTE_BOUNDING_BOX
+: <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea90f550ce4ddbbbbec42e974f7f42ad0b">dmxcb.h</a>
+</li>
+<li>DMX_NOSIGIO
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a3332aab1a0fa6ab7dbb69ff402b0d596">dmxinput.h</a>
+</li>
+<li>DMX_RECOMPUTE_BOUNDING_BOX
+: <a class="el" href="dmxcb_8h.html#ab00a2ebacc2ad1ec1b8ad02800ff63eea2bc3f60d973a4d9e53e0fe71ee386d9a">dmxcb.h</a>
+</li>
+<li>DMX_RELATIVE
+: <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">dmxinputinit.h</a>
+</li>
+<li>DMX_UPDATE_COPY
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a3eb041e8c291b09423f9e7e48a097c72">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_REALIZE
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a7c104dbcebe304b597aa6214c7857ba9">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_REPARENT
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8abd180f2b5dc44a7f596c94da55b1b06c">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_RESIZE
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8aff37829542cf6747dfc40ad0b1db4146">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_RESTACK
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8a5cbd84079e335dd7025ca4698f96ee25">dmxinput.h</a>
+</li>
+<li>DMX_UPDATE_UNREALIZE
+: <a class="el" href="dmxinput_8h.html#ae16d9134720b35da8f258db9a1c039a8ad8f34c00059f389fd2f6e38af575f11b">dmxinput.h</a>
+</li>
+<li>DMX_USESIGIO
+: <a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4a602a53cb181b839ee55e077c20588608">dmxinput.h</a>
+</li>
+<li>dmxConfigComment
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88aec466000071c74f9c5d74dfbdac0188f">dmxparse.h</a>
+</li>
+<li>dmxConfigDisplay
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxparse.h</a>
+</li>
+<li>dmxConfigOption
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a614d5741a7446449811a7627b13535b2">dmxparse.h</a>
+</li>
+<li>dmxConfigParam
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a86387d0341d85b69a1f41fec10494698">dmxparse.h</a>
+</li>
+<li>dmxConfigStateOpen
+: <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716">xdmxconfig.c</a>
+</li>
+<li>dmxConfigStateSave
+: <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a387ae4d1cea5ba75911cb467d76d0996">xdmxconfig.c</a>
+</li>
+<li>dmxConfigVirtual
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxparse.h</a>
+</li>
+<li>dmxConfigWall
+: <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88ac20511fb5c828f993a1f76015646f212">dmxparse.h</a>
+</li>
+<li>dmxDebug
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa55e322963608341d32ebb8a0b9d936fe">dmxlog.h</a>
+</li>
+<li>dmxError
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa537bf9f60b39a221057e37c76aeea890">dmxlog.h</a>
+</li>
+<li>dmxFatal
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fa4d84ad320675a046536d76c0820abc70">dmxlog.h</a>
+</li>
+<li>dmxInfo
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxlog.h</a>
+</li>
+<li>dmxWarning
+: <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxlog.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>PosAbove
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a8b4710773b7ba23cd4ba12a48f544414">dmx.h</a>
+</li>
+<li>PosAbsolute
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a98c1cbf3326de8339bf0538c74477351">dmx.h</a>
+</li>
+<li>PosBelow
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a61079f63564c7d135feeeabb170cff1e">dmx.h</a>
+</li>
+<li>PosLeftOf
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6e57f3ac055303c9c0c730274faa419f">dmx.h</a>
+</li>
+<li>PosNone
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48ad375955ea9a568af249c13e41d2f0d44">dmx.h</a>
+</li>
+<li>PosRelative
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48a6681d76ba36d5d2fce88975100fbfddc">dmx.h</a>
+</li>
+<li>PosRightOf
+: <a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48adbb68d2dea659baab7c04a54a95679ae">dmx.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>usbKeyboard
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usb-common.h</a>
+</li>
+<li>usbMouse
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usb-common.h</a>
+</li>
+<li>usbOther
+: <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usb-common.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func.html b/hw/dmx/doc/html/globals_func.html
new file mode 100644
index 0000000..c8cfd6c
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func.html
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li class="current"><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_dmxChangePointerControl()
+: <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">dmxinputinit.c</a>
+</li>
+<li>_dmxDPMSInit()
+: <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">dmxdpms.c</a>
+</li>
+<li>_dmxKeyboardBellProc()
+: <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">dmxinputinit.c</a>
+</li>
+<li>_dmxKeyboardKbdCtrlProc()
+: <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">dmxinputinit.c</a>
+</li>
+<li>_dmxMoveCursor()
+: <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">dmxcursor.c</a>
+</li>
+<li>_dmxRealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">dmxcursor.c</a>
+</li>
+<li>_dmxSetCursor()
+: <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">dmxcursor.c</a>
+</li>
+<li>_dmxUnrealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">dmxcursor.c</a>
+</li>
+<li>_DMXXineramaActive()
+: <a class="el" href="dmx_8c.html#a9760de3bc5bce0c3fcb7eda8afdafcb7">dmx.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x61.html b/hw/dmx/doc/html/globals_func_0x61.html
new file mode 100644
index 0000000..c98ffe3
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x61.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li class="current"><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>AbortDDX()
+: <a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">dmxinit.c</a>
+</li>
+<li>AbortServer()
+: <a class="el" href="dmxlog_8c.html#a50d079f944b71e881c0c58562f96c6ad">dmxlog.c</a>
+</li>
+<li>avg()
+: <a class="el" href="dmxstat_8c.html#aeccae65bbc33f6b7717b2dc1a536d3cd">dmxstat.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x63.html b/hw/dmx/doc/html/globals_func_0x63.html
new file mode 100644
index 0000000..5e45c1a
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x63.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li class="current"><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>ChangeDeviceControl()
+: <a class="el" href="dmxxinput_8c.html#ae8839ac736a195a19dd4b60653b5507b">dmxxinput.c</a>
+</li>
+<li>CloseInput()
+: <a class="el" href="dmxinput_8c.html#a4f9d470e1f20101d9951d1dfcdca7d4e">dmxinput.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x64.html b/hw/dmx/doc/html/globals_func_0x64.html
new file mode 100644
index 0000000..15198d8
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x64.html
@@ -0,0 +1,2023 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li class="current"><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>ddxGiveUp()
+: <a class="el" href="dmxinit_8c.html#a37656cea0c901129a2feb6564a6dbfea">dmxinit.c</a>
+</li>
+<li>ddxProcessArgument()
+: <a class="el" href="dmxinit_8c.html#a6ed0a235a6d852bfe0cc0250159a5daf">dmxinit.c</a>
+</li>
+<li>DDXRingBell()
+: <a class="el" href="dmxinputinit_8c.html#ae708022d89f6e39813b8db1389bf64fe">dmxinputinit.c</a>
+</li>
+<li>ddxUseMsg()
+: <a class="el" href="dmxinit_8c.html#add8bf8bb09cff9a75fb84594b08baa5a">dmxinit.c</a>
+</li>
+<li>DeleteInputDeviceRequest()
+: <a class="el" href="dmxinput_8c.html#aad5437e77e383efb20d0720f2afe863a">dmxinput.c</a>
+</li>
+<li>dmxAddDevice()
+: <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxinputinit.c</a>
+</li>
+<li>dmxAddInput()
+: <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a6b0b38eb49c6be097a59dbcdd6dacb51">dmxextension.c</a>
+</li>
+<li>dmxAdjustCursorBoundaries()
+: <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxextension.c</a>
+</li>
+<li>dmxAllocateColormapPrivates()
+: <a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxcmap.c</a>
+</li>
+<li>dmxApplyFunctions()
+: <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxevents.c</a>
+</li>
+<li>dmxArgAdd()
+: <a class="el" href="dmxarg_8c.html#a6d41e61a00975e123ed72a269d653d23">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a6d41e61a00975e123ed72a269d653d23">dmxarg.h</a>
+</li>
+<li>dmxArgC()
+: <a class="el" href="dmxarg_8c.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxarg.h</a>
+</li>
+<li>dmxArgCreate()
+: <a class="el" href="dmxarg_8c.html#af4ecb9595303a7fcac5eae840766b6fb">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#af4ecb9595303a7fcac5eae840766b6fb">dmxarg.h</a>
+</li>
+<li>dmxArgFree()
+: <a class="el" href="dmxarg_8c.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxarg.h</a>
+</li>
+<li>dmxArgParse()
+: <a class="el" href="dmxarg_8c.html#a7d872851e86ae8063cd13e85ed203d09">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a7d872851e86ae8063cd13e85ed203d09">dmxarg.h</a>
+</li>
+<li>dmxArgV()
+: <a class="el" href="dmxarg_8c.html#a7de14f607c61ecac05f9c45d002e36ab">dmxarg.c</a>
+, <a class="el" href="dmxarg_8h.html#a7de14f607c61ecac05f9c45d002e36ab">dmxarg.h</a>
+</li>
+<li>dmxAttachScreen()
+: <a class="el" href="dmxextension_8c.html#a3962840388f9bcf96fb17294a413d8cb">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxextension.h</a>
+</li>
+<li>dmxBackendCollectEvents()
+: <a class="el" href="dmxbackend_8c.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxbackend.h</a>
+</li>
+<li>dmxBackendComputeCenter()
+: <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxbackend.c</a>
+</li>
+<li>dmxBackendCreatePrivate()
+: <a class="el" href="dmxbackend_8c.html#a2a875125c1316c123e45c7e7a9251c2e">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a2a875125c1316c123e45c7e7a9251c2e">dmxbackend.h</a>
+</li>
+<li>dmxBackendDestroyPrivate()
+: <a class="el" href="dmxbackend_8h.html#acd47377dd517a5494edae5920e3ae946">dmxbackend.h</a>
+, <a class="el" href="dmxbackend_8c.html#acd47377dd517a5494edae5920e3ae946">dmxbackend.c</a>
+</li>
+<li>dmxBackendFindOverlapping()
+: <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxbackend.c</a>
+</li>
+<li>dmxBackendFindWindow()
+: <a class="el" href="dmxbackend_8c.html#aad68f30daf82995805de813568eb0087">dmxbackend.c</a>
+</li>
+<li>dmxBackendFunctions()
+: <a class="el" href="dmxbackend_8c.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a0c9ccf0733bd3a4615815fc404e30a9c">dmxbackend.h</a>
+</li>
+<li>dmxBackendGetEvent()
+: <a class="el" href="dmxbackend_8c.html#a7744472c5c8aafb2dd63d047995aeef3">dmxbackend.c</a>
+</li>
+<li>dmxBackendInit()
+: <a class="el" href="dmxbackend_8c.html#a941213c5a98d26e0f30391ee312e1436">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxbackend.h</a>
+</li>
+<li>dmxBackendInitPrivate()
+: <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxbackend.c</a>
+</li>
+<li>dmxBackendKbdGetInfo()
+: <a class="el" href="dmxbackend_8c.html#a1c628b807f62aeeeb2093ad63941eff1">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxbackend.h</a>
+</li>
+<li>dmxBackendLateReInit()
+: <a class="el" href="dmxbackend_8c.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a6027901ceb2a93e4fea5acf9b8cb0059">dmxbackend.h</a>
+</li>
+<li>dmxBackendMouGetInfo()
+: <a class="el" href="dmxbackend_8c.html#a1afb0902ffb9019c943b0c4db6315209">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxbackend.h</a>
+</li>
+<li>dmxBackendOffscreen()
+: <a class="el" href="dmxbackend_8c.html#a2cb121a910d12c89e65fe68d8acb203f">dmxbackend.c</a>
+</li>
+<li>dmxBackendPendingMotionEvent()
+: <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxbackend.c</a>
+</li>
+<li>dmxBackendProcessInput()
+: <a class="el" href="dmxbackend_8c.html#a4ee65e2f1b86616b7898c273d78a5853">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a4ee65e2f1b86616b7898c273d78a5853">dmxbackend.h</a>
+</li>
+<li>dmxBackendSameDisplay()
+: <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestEvents()
+: <a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestMotionEvent()
+: <a class="el" href="dmxbackend_8c.html#a772eea70f63c028de57f6d9e5bb48fbe">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestScreen()
+: <a class="el" href="dmxbackend_8c.html#a86a56e6c6d23ef0f13d1d4ee8f84a162">dmxbackend.c</a>
+</li>
+<li>dmxBackendTestWindow()
+: <a class="el" href="dmxbackend_8c.html#a25cd9424824427d35f7e1cdb6ae0ad61">dmxbackend.c</a>
+</li>
+<li>dmxBackendUpdatePosition()
+: <a class="el" href="dmxbackend_8c.html#a486d684411f79c459a1195e5c02f404c">dmxbackend.c</a>
+, <a class="el" href="dmxbackend_8h.html#a486d684411f79c459a1195e5c02f404c">dmxbackend.h</a>
+</li>
+<li>dmxBECloseScreen()
+: <a class="el" href="dmxscrinit_8c.html#a95af573befeeedfa4a7d15b574341c36">dmxscrinit.c</a>
+, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxscrinit.h</a>
+</li>
+<li>dmxBECreateColormap()
+: <a class="el" href="dmxcmap_8c.html#a6986e997430cf665904ad9149e39a50b">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxcmap.h</a>
+</li>
+<li>dmxBECreateCursor()
+: <a class="el" href="dmxcursor_8c.html#a84c92b801c5802879047e74401f62e94">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxcursor.h</a>
+</li>
+<li>dmxBECreateGC()
+: <a class="el" href="dmxgc_8c.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxgc.h</a>
+</li>
+<li>dmxBECreateGlyphSet()
+: <a class="el" href="dmxpict_8c.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxpict.h</a>
+</li>
+<li>dmxBECreatePicture()
+: <a class="el" href="dmxpict_8c.html#ac1b1e577a8993b4c76eba1bfad485396">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxpict.h</a>
+</li>
+<li>dmxBECreatePixmap()
+: <a class="el" href="dmxpixmap_8c.html#ab785500b50aa10eb1d76274688413770">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxpixmap.h</a>
+</li>
+<li>dmxBECreateResources()
+: <a class="el" href="dmxextension_8c.html#a6ce8486d2aa17ed2ca5375b127b6189f">dmxextension.c</a>
+</li>
+<li>dmxBECreateScratchGCs()
+: <a class="el" href="dmxextension_8c.html#a335fb276d4398515aa93ed1b3652dfd5">dmxextension.c</a>
+</li>
+<li>dmxBECreateWindowTree()
+: <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxextension.c</a>
+</li>
+<li>dmxBEDestroyResources()
+: <a class="el" href="dmxextension_8c.html#aaf05373ce6271205b865799a1c2a588f">dmxextension.c</a>
+</li>
+<li>dmxBEDestroyScratchGCs()
+: <a class="el" href="dmxextension_8c.html#ada568e54996488fca996405eb68c1b8b">dmxextension.c</a>
+</li>
+<li>dmxBEDestroyWindow()
+: <a class="el" href="dmxwindow_8c.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxwindow.h</a>
+</li>
+<li>dmxBEDestroyWindowTree()
+: <a class="el" href="dmxextension_8c.html#a30620fb306cff3ee44d6de43aa97346a">dmxextension.c</a>
+</li>
+<li>dmxBEFreeColormap()
+: <a class="el" href="dmxcmap_8c.html#a432d82d6335a8bc17292440baded360c">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxcmap.h</a>
+</li>
+<li>dmxBEFreeCursor()
+: <a class="el" href="dmxcursor_8c.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxcursor.h</a>
+</li>
+<li>dmxBEFreeFont()
+: <a class="el" href="dmxfont_8c.html#afadf46b46a1f3da085c96849c885a41e">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxfont.h</a>
+</li>
+<li>dmxBEFreeGC()
+: <a class="el" href="dmxgc_8c.html#a17c700daf344c32c6daecaf19d19f6a8">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxgc.h</a>
+</li>
+<li>dmxBEFreeGlyphSet()
+: <a class="el" href="dmxpict_8c.html#a342746cc3fb1fe0731522315c6dd91fc">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxpict.h</a>
+</li>
+<li>dmxBEFreePicture()
+: <a class="el" href="dmxpict_8c.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxpict.h</a>
+</li>
+<li>dmxBEFreePixmap()
+: <a class="el" href="dmxpixmap_8c.html#aa930f04f91d83243d3e6224f911bf9e8">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxpixmap.h</a>
+</li>
+<li>dmxBell()
+: <a class="el" href="dmxinputinit_8c.html#ace8ffeb961580bf16d7c3ec044a00491">dmxinputinit.c</a>
+</li>
+<li>dmxBELoadFont()
+: <a class="el" href="dmxfont_8c.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxfont.h</a>
+</li>
+<li>dmxBERestorePixmap()
+: <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxextension.c</a>
+</li>
+<li>dmxBERestoreRenderGlyph()
+: <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxextension.c</a>
+</li>
+<li>dmxBERestoreRenderPict()
+: <a class="el" href="dmxextension_8c.html#a83d7548ed24086d9fb08866ec94735e2">dmxextension.c</a>
+</li>
+<li>dmxBESavePixmap()
+: <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxextension.c</a>
+</li>
+<li>dmxBEScreenInit()
+: <a class="el" href="dmxscrinit_8c.html#a51bde87df35cd264d315d09e33c4f9e3">dmxscrinit.c</a>
+, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxscrinit.h</a>
+</li>
+<li>dmxBitmapToRegion()
+: <a class="el" href="dmxpixmap_8c.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxpixmap.h</a>
+</li>
+<li>dmxBlockHandler()
+: <a class="el" href="dmxinputinit_8c.html#abd6a885883606f21d4342486d8fd5ab6">dmxinputinit.c</a>
+</li>
+<li>dmxBuildCompiler()
+: <a class="el" href="dmxinit_8c.html#ac1f3e1fa60f11e75fe94b7629ec8c0f0">dmxinit.c</a>
+</li>
+<li>dmxChangeBorderWidth()
+: <a class="el" href="dmxwindow_8c.html#a5d63a05eab33981615afdf523a44c697">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxwindow.h</a>
+</li>
+<li>dmxChangeClip()
+: <a class="el" href="dmxgc_8c.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxgc.h</a>
+</li>
+<li>dmxChangeGC()
+: <a class="el" href="dmxgc_8c.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxgc.h</a>
+</li>
+<li>dmxChangePicture()
+: <a class="el" href="dmxpict_8c.html#a316382a2e169f1662363123670a252c7">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxpict.h</a>
+</li>
+<li>dmxChangePictureClip()
+: <a class="el" href="dmxpict_8c.html#a80e126a5d7911fec43bad8a9428980d6">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxpict.h</a>
+</li>
+<li>dmxChangePointerControl()
+: <a class="el" href="dmxinputinit_8c.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxinputinit.h</a>
+</li>
+<li>dmxChangeWindowAttributes()
+: <a class="el" href="dmxwindow_8c.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxwindow.h</a>
+</li>
+<li>dmxCheckCursor()
+: <a class="el" href="dmxcursor_8c.html#a6a381bffb099457e7c26a2312cf968a6">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxcursor.h</a>
+</li>
+<li>dmxCheckFontPath()
+: <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxfont.c</a>
+</li>
+<li>dmxCheckFontPathElement()
+: <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxfont.c</a>
+</li>
+<li>dmxCheckForWM()
+: <a class="el" href="dmxinit_8c.html#a339a0fdeb357fee53a56ba268c66b68d">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#a339a0fdeb357fee53a56ba268c66b68d">dmxinit.h</a>
+</li>
+<li>dmxCheckFunctionKeys()
+: <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxevents.c</a>
+</li>
+<li>dmxCheckSpecialKeys()
+: <a class="el" href="dmxevents_8c.html#a082f21151ec3d66b75d4613a3612c755">dmxevents.c</a>
+, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxevents.h</a>
+</li>
+<li>dmxCloseConsole()
+: <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxconsole.c</a>
+</li>
+<li>dmxCloseConsoleScreen()
+: <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxconsole.c</a>
+</li>
+<li>dmxCloseIndexed()
+: <a class="el" href="dmxpict_8c.html#aa63b1daaacc56332c04832198a9e30b7">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#aa63b1daaacc56332c04832198a9e30b7">dmxpict.h</a>
+</li>
+<li>dmxCloseScreen()
+: <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxscrinit.c</a>
+</li>
+<li>dmxCollectAll()
+: <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxinputinit.c</a>
+</li>
+<li>dmxColormapFromDefaultVisual()
+: <a class="el" href="dmxvisual_8c.html#aca13684e9357c96035388a924d8af570">dmxvisual.c</a>
+, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxvisual.h</a>
+</li>
+<li>dmxCommonAddEnabledDevice()
+: <a class="el" href="dmxcommon_8c.html#a82d9ce21ede8d533adde28ce8dbabdf7">dmxcommon.c</a>
+</li>
+<li>dmxCommonCopyPrivate()
+: <a class="el" href="dmxcommon_8c.html#a0e7301a2783357ff391172acab00d48a">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdBell()
+: <a class="el" href="dmxcommon_8c.html#aa069076ebf89f8b89668cffafb731cfe">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#aa069076ebf89f8b89668cffafb731cfe">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdCtrl()
+: <a class="el" href="dmxcommon_8c.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a399f0ec4a6e5d0bcd3d07f24b2a6ac9e">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdGetInfo()
+: <a class="el" href="dmxcommon_8c.html#a86b1c983a556770efdd1a19e8be44534">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdGetMap()
+: <a class="el" href="dmxcommon_8c.html#a83410e3987567bd35fd146b193a21ed9">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a83410e3987567bd35fd146b193a21ed9">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdOff()
+: <a class="el" href="dmxcommon_8c.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a9ddcdd8a91205b9b0e23022f246190a0">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdOn()
+: <a class="el" href="dmxcommon_8c.html#a60cd36c3430ead2858986fe5f93165c1">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a60cd36c3430ead2858986fe5f93165c1">dmxcommon.h</a>
+</li>
+<li>dmxCommonKbdSetAR()
+: <a class="el" href="dmxcommon_8c.html#a5fe4b4fef83f0ca1aba8cabf76ebccf2">dmxcommon.c</a>
+</li>
+<li>dmxCommonKbdSetCtrl()
+: <a class="el" href="dmxcommon_8c.html#a029097ed04b236c945e3715910250680">dmxcommon.c</a>
+</li>
+<li>dmxCommonKbdSetLeds()
+: <a class="el" href="dmxcommon_8c.html#a77cfda7cbd3e83a0869b26b782d2b6d4">dmxcommon.c</a>
+</li>
+<li>dmxCommonMouCtrl()
+: <a class="el" href="dmxcommon_8c.html#a11aa027975061ee6f3e684ee66f0f18c">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a11aa027975061ee6f3e684ee66f0f18c">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouGetMap()
+: <a class="el" href="dmxcommon_8c.html#a9ce209ad340f84644115a165eadfa540">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a9ce209ad340f84644115a165eadfa540">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouOff()
+: <a class="el" href="dmxcommon_8c.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#acfeaccbc1f2f5be028b3ee8c0f31da89">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouOn()
+: <a class="el" href="dmxcommon_8c.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a8ba0ee4f9f09bc9089d480d1f5467cd8">dmxcommon.h</a>
+</li>
+<li>dmxCommonMouSetCtrl()
+: <a class="el" href="dmxcommon_8c.html#a71374978838ea5232f72055f152a894e">dmxcommon.c</a>
+</li>
+<li>dmxCommonOthGetInfo()
+: <a class="el" href="dmxcommon_8c.html#a67f944a345e0ba88ac996056914d191c">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxcommon.h</a>
+</li>
+<li>dmxCommonOthOff()
+: <a class="el" href="dmxcommon_8c.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a45f87ba7a0b02587dd2d1b4cdd3480c6">dmxcommon.h</a>
+</li>
+<li>dmxCommonOthOn()
+: <a class="el" href="dmxcommon_8c.html#a4b8e72433e206d48e6fb471e933800ad">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a4b8e72433e206d48e6fb471e933800ad">dmxcommon.h</a>
+</li>
+<li>dmxCommonRemoveEnabledDevice()
+: <a class="el" href="dmxcommon_8c.html#adb5e0faaefc43851e4ebcd01bd9c10ec">dmxcommon.c</a>
+</li>
+<li>dmxCommonRestoreState()
+: <a class="el" href="dmxcommon_8c.html#aca953b7500d93577441828156674c64e">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#aca953b7500d93577441828156674c64e">dmxcommon.h</a>
+</li>
+<li>dmxCommonSaveState()
+: <a class="el" href="dmxcommon_8c.html#a14295660e17d34955693cef6654d7bb6">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a14295660e17d34955693cef6654d7bb6">dmxcommon.h</a>
+</li>
+<li>dmxCommonXSelect()
+: <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxcommon.c</a>
+</li>
+<li>dmxCompareScreens()
+: <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxextension.c</a>
+</li>
+<li>dmxComposite()
+: <a class="el" href="dmxpict_8c.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxpict.h</a>
+</li>
+<li>dmxCompositeRects()
+: <a class="el" href="dmxpict_8c.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxpict.h</a>
+</li>
+<li>dmxComputeScreenOrigins()
+: <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxcursor.c</a>
+</li>
+<li>dmxComputeWidthHeight()
+: <a class="el" href="dmxcb_8c.html#a077a54c8577746426371b996c9aacefb">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxcb.h</a>
+</li>
+<li>dmxConfigAboutCallback()
+: <a class="el" href="xdmxconfig_8c.html#a51a4a8ca6b21891e2fa70c466faee77c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigAboutOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a8bbd18621db9d5b385f4904e5acd0af1">xdmxconfig.c</a>
+</li>
+<li>dmxConfigAddDisplay()
+: <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxconfig.c</a>
+</li>
+<li>dmxConfigAddEntry()
+: <a class="el" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#acec532235fc1d75b24779b3ed50aa037">dmxparse.h</a>
+</li>
+<li>dmxConfigAddInput()
+: <a class="el" href="dmxinput_8h.html#a21dc2639218a59ae564d3eaeb4781a90">dmxinput.h</a>
+, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxconfig.c</a>
+</li>
+<li>dmxConfigAddSub()
+: <a class="el" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxparse.h</a>
+</li>
+<li>dmxConfigAlloc()
+: <a class="el" href="dmxparse_8c.html#a1794b2e8571596d46f01ff8cf692410f">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a1794b2e8571596d46f01ff8cf692410f">dmxparse.h</a>
+</li>
+<li>dmxConfigCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#a63d22122002cecb690732604266cb1e6">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasDraw()
+: <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasExpose()
+: <a class="el" href="xdmxconfig_8c.html#aadfc47cfd989e655d03dda6ccd2ba3bf">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasGCs()
+: <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasInput()
+: <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasResize()
+: <a class="el" href="xdmxconfig_8c.html#ae65368a94fe9f60eb2fbfa083db4ea9b">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCanvasUpdate()
+: <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">xdmxconfig.c</a>
+</li>
+<li>dmxConfigConfigInputs()
+: <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxconfig.c</a>
+</li>
+<li>dmxConfigConfigure()
+: <a class="el" href="dmxconfig_8c.html#a826f729e29c8737ac9bbb9416505cd74">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxconfig.h</a>
+</li>
+<li>dmxConfigCopyData()
+: <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromDisplay()
+: <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromOption()
+: <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromParam()
+: <a class="el" href="dmxconfig_8c.html#afc8b90e1cf4b70434515265c10970967">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyFromWall()
+: <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxconfig.c</a>
+</li>
+<li>dmxConfigCopyString()
+: <a class="el" href="dmxparse_8c.html#a0d1c3d922b777254300e346b0111943c">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a0d1c3d922b777254300e346b0111943c">dmxparse.h</a>
+</li>
+<li>dmxConfigCopystrings()
+: <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCreateComment()
+: <a class="el" href="dmxparse_8c.html#ae0619f5f0850b65fefe4df5112aaac05">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateDisplay()
+: <a class="el" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateEntry()
+: <a class="el" href="dmxparse_8c.html#a402a182c5c9922807ffc7998b4228b24">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateFullDim()
+: <a class="el" href="dmxparse_8c.html#ac75eb1b376fb8a510d123ca119ef215e">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateNumber()
+: <a class="el" href="dmxparse_8c.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateOption()
+: <a class="el" href="dmxparse_8c.html#ad183386657a3549f60760a156fad4fb8">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxparse.h</a>
+</li>
+<li>dmxConfigCreatePair()
+: <a class="el" href="dmxparse_8c.html#a488a03d25bc380f1bdf786693c644957">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateParam()
+: <a class="el" href="dmxparse_8c.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxparse.h</a>
+</li>
+<li>dmxConfigCreatePartDim()
+: <a class="el" href="dmxparse_8c.html#a1740a9f650d43464836c9b0ec44f9659">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateString()
+: <a class="el" href="dmxparse_8c.html#ae285ab0da6d63770365886d413f58432">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateSub()
+: <a class="el" href="dmxparse_8c.html#aa7e24c7be4cc3880e15274a53b627267">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateToken()
+: <a class="el" href="dmxparse_8c.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateVirtual()
+: <a class="el" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxparse.h</a>
+</li>
+<li>dmxConfigCreateWall()
+: <a class="el" href="dmxparse_8c.html#a6078c6ad23fc49e4992cade35f7351b2">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxparse.h</a>
+</li>
+<li>dmxConfigDataUpdate()
+: <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">xdmxconfig.c</a>
+</li>
+<li>dmxConfigDCCallback()
+: <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">xdmxconfig.c</a>
+</li>
+<li>dmxConfigDDCallback()
+: <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">xdmxconfig.c</a>
+</li>
+<li>dmxConfigECCallback()
+: <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">xdmxconfig.c</a>
+</li>
+<li>dmxConfigECCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#aee0b69600ad12890c06000770f1c655f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigECOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEDCallback()
+: <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEDCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#a8d3ad76031d45149189806723870a81c">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEDOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEntryComment()
+: <a class="el" href="dmxparse_8c.html#acee635a4deedd0f4b488d951346f4622">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#acee635a4deedd0f4b488d951346f4622">dmxparse.h</a>
+</li>
+<li>dmxConfigEntryVirtual()
+: <a class="el" href="dmxparse_8c.html#a643b2c9c57d3009965318d20aad1ca0d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a643b2c9c57d3009965318d20aad1ca0d">dmxparse.h</a>
+</li>
+<li>dmxConfigFindDisplay()
+: <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigFree()
+: <a class="el" href="dmxparse_8c.html#a890429fea43e1039967b94fadc1f4e29">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a890429fea43e1039967b94fadc1f4e29">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeComment()
+: <a class="el" href="dmxparse_8c.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeDisplay()
+: <a class="el" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeEntry()
+: <a class="el" href="dmxparse_8c.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeFullDim()
+: <a class="el" href="dmxparse_8c.html#ad09f9037b194ad32029047499003a60a">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeNumber()
+: <a class="el" href="dmxparse_8c.html#a2b8a343fe122733af82e802a01a5f30b">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a2b8a343fe122733af82e802a01a5f30b">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeOption()
+: <a class="el" href="dmxparse_8c.html#a87d839927d1775c43e099e87f6e2ca8d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxparse.h</a>
+</li>
+<li>dmxConfigFreePair()
+: <a class="el" href="dmxparse_8c.html#a382b3c46caeb7e134e381d732f8d185e">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a382b3c46caeb7e134e381d732f8d185e">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeParam()
+: <a class="el" href="dmxparse_8c.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxparse.h</a>
+</li>
+<li>dmxConfigFreePartDim()
+: <a class="el" href="dmxparse_8c.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeString()
+: <a class="el" href="dmxparse_8c.html#a679f8776dd1a503057891de6483adc49">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeSub()
+: <a class="el" href="dmxparse_8c.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeToken()
+: <a class="el" href="dmxparse_8c.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeVirtual()
+: <a class="el" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a6e48a41d83e97afcbd542a210ea30258">dmxparse.h</a>
+</li>
+<li>dmxConfigFreeWall()
+: <a class="el" href="dmxparse_8c.html#aac254e191bb664ec87d44f70f52ce897">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxparse.h</a>
+</li>
+<li>dmxConfigFromCommandLine()
+: <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxconfig.c</a>
+</li>
+<li>dmxConfigFromConfigFile()
+: <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxconfig.c</a>
+</li>
+<li>dmxConfigGetDims()
+: <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGetValueString()
+: <a class="el" href="xdmxconfig_8c.html#a861864048083f1d533e5e51f96d74284">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGetXkbLayout()
+: <a class="el" href="dmxconfig_8h.html#a5d7b9c934bac97af375cfc1425e4d71c">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbModel()
+: <a class="el" href="dmxconfig_8h.html#a9789c9f2428105bd9e896ddd25ea9a76">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbOptions()
+: <a class="el" href="dmxconfig_8h.html#ae5986f5f5ba901313f950db2b4d8b340">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbRules()
+: <a class="el" href="dmxconfig_8h.html#a144614ca8f250e559b030eef79189aac">dmxconfig.h</a>
+</li>
+<li>dmxConfigGetXkbVariant()
+: <a class="el" href="dmxconfig_8h.html#a3206dcb48297854a1d47e8aaa88d647e">dmxconfig.h</a>
+</li>
+<li>dmxConfigIndent()
+: <a class="el" href="dmxprint_8c.html#a28323a9b43eda57024b02a22c998b0e7">dmxprint.c</a>
+</li>
+<li>dmxConfigLog()
+: <a class="el" href="dmxparse_8c.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a2c4e1260c486d4898c5bb21ff221c89d">dmxparse.h</a>
+</li>
+<li>dmxConfigLookupParam()
+: <a class="el" href="dmxparse_8c.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxparse.h</a>
+</li>
+<li>dmxConfigMatch()
+: <a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxconfig.c</a>
+</li>
+<li>dmxConfigMove()
+: <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNCCallback()
+: <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNDCallback()
+: <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNewline()
+: <a class="el" href="dmxprint_8c.html#a8e1ceb3caec6ac5eb7d05b18d13250be">dmxprint.c</a>
+</li>
+<li>dmxConfigOkAction()
+: <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">xdmxconfig.c</a>
+</li>
+<li>dmxConfigOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">xdmxconfig.c</a>
+</li>
+<li>dmxConfigOpenCallback()
+: <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">xdmxconfig.c</a>
+</li>
+<li>dmxConfigOutput()
+: <a class="el" href="dmxprint_8c.html#a40c141ef8ec32df494f34b9ccb586652">dmxprint.c</a>
+</li>
+<li>dmxConfigPlaceMenu()
+: <a class="el" href="xdmxconfig_8c.html#afa957a538d9f0f4ea74ff29f68f499e9">xdmxconfig.c</a>
+</li>
+<li>dmxConfigPopState()
+: <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxprint.c</a>
+</li>
+<li>dmxConfigPrint()
+: <a class="el" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxprint.c</a>
+, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxprint.h</a>
+</li>
+<li>dmxConfigPrintComment()
+: <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintDisplay()
+: <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintOption()
+: <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintPair()
+: <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintParam()
+: <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintQuotedString()
+: <a class="el" href="dmxprint_8c.html#ab7686b37f60596276e593fbc300e580a">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintString()
+: <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintSub()
+: <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintToken()
+: <a class="el" href="dmxprint_8c.html#a7a5b3d510c5ee1e3e7aa12a84d243e77">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintTokenFlag()
+: <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintTokenNopop()
+: <a class="el" href="dmxprint_8c.html#a39008636d8a4d4212908a608d17e4ea0">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintVirtual()
+: <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxprint.c</a>
+</li>
+<li>dmxConfigPrintWall()
+: <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxprint.c</a>
+</li>
+<li>dmxConfigPushComment()
+: <a class="el" href="dmxprint_8c.html#ac839095403e872d1a2c5c5bf1fb84d34">dmxprint.c</a>
+</li>
+<li>dmxConfigPushState()
+: <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxprint.c</a>
+</li>
+<li>dmxConfigPushStep()
+: <a class="el" href="dmxprint_8c.html#a640bd88024bf58bbc7613804eadc23ef">dmxprint.c</a>
+</li>
+<li>dmxConfigQuitCallback()
+: <a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">xdmxconfig.c</a>
+</li>
+<li>dmxConfigQuitCanCallback()
+: <a class="el" href="xdmxconfig_8c.html#a883bd47f35bdd31db9a612b8aa569f52">xdmxconfig.c</a>
+</li>
+<li>dmxConfigQuitOkCallback()
+: <a class="el" href="xdmxconfig_8c.html#a94afad40dc987f0eebe60b259f653972">xdmxconfig.c</a>
+</li>
+<li>dmxConfigReadFile()
+: <a class="el" href="dmxconfig_8c.html#a26c4557203995a45cf09b1c810b4d07a">dmxconfig.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">xdmxconfig.c</a>
+</li>
+<li>dmxConfigRealloc()
+: <a class="el" href="dmxparse_8c.html#af8e13444fded1f7707ab7dfc40655fd3">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#af8e13444fded1f7707ab7dfc40655fd3">dmxparse.h</a>
+</li>
+<li>dmxConfigSaveCallback()
+: <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSelectCallback()
+: <a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSetMaxScreens()
+: <a class="el" href="dmxconfig_8c.html#a41ff0900fb1b1056b02014bf39bee02f">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetPopupPosition()
+: <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSetupCnamemenu()
+: <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">xdmxconfig.c</a>
+</li>
+<li>dmxConfigSetXkbLayout()
+: <a class="el" href="dmxconfig_8h.html#ad072d4dab0b5b0623c9b6d1b3b57e23a">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbModel()
+: <a class="el" href="dmxconfig_8h.html#ab9b9a8c70f9fd1b051187c47427f4999">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbOptions()
+: <a class="el" href="dmxconfig_8h.html#aef54e09cba9b65acbdcb6568de54b2b6">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbRules()
+: <a class="el" href="dmxconfig_8h.html#ae3270803aaa7990900d8c123f2181485">dmxconfig.h</a>
+</li>
+<li>dmxConfigSetXkbVariant()
+: <a class="el" href="dmxconfig_8h.html#af8922109f7462e6e246d8e06f1e21c5b">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreConfig()
+: <a class="el" href="dmxconfig_8c.html#a224cf25e04e43ce049574c10ce39b597">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a224cf25e04e43ce049574c10ce39b597">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreDisplay()
+: <a class="el" href="dmxconfig_8c.html#ac372c2ded30d6c82cc7973f7891d2363">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreFile()
+: <a class="el" href="dmxconfig_8c.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreInput()
+: <a class="el" href="dmxconfig_8c.html#aa591f4e1846bc6e6d78c68d77879c900">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxconfig.h</a>
+</li>
+<li>dmxConfigStoreXInput()
+: <a class="el" href="dmxconfig_8c.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxconfig.c</a>
+, <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxconfig.h</a>
+</li>
+<li>dmxConfigSubComment()
+: <a class="el" href="dmxparse_8c.html#a825d125808e8992c740315d3b78e493d">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a825d125808e8992c740315d3b78e493d">dmxparse.h</a>
+</li>
+<li>dmxConfigSubDisplay()
+: <a class="el" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a4f26909fb7f97007567e5514839c3a53">dmxparse.h</a>
+</li>
+<li>dmxConfigSubOption()
+: <a class="el" href="dmxparse_8c.html#a23a35d27aa7bf22d815d2a9cff809307">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a23a35d27aa7bf22d815d2a9cff809307">dmxparse.h</a>
+</li>
+<li>dmxConfigSubParam()
+: <a class="el" href="dmxparse_8c.html#a16047d4ba67462084a85156432c7cf05">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#a16047d4ba67462084a85156432c7cf05">dmxparse.h</a>
+</li>
+<li>dmxConfigSubWall()
+: <a class="el" href="dmxparse_8c.html#aac05245a327cc10096f1a049e675caef">dmxparse.c</a>
+, <a class="el" href="dmxparse_8h.html#aac05245a327cc10096f1a049e675caef">dmxparse.h</a>
+</li>
+<li>dmxConfigureDesktop()
+: <a class="el" href="dmxextension_8h.html#a0aa0eb777a77d62cd3070c642ae0b0aa">dmxextension.h</a>
+</li>
+<li>dmxConfigureScreenWindows()
+: <a class="el" href="dmxextension_8h.html#a63c06d493f7fbe70e235c97a622efca9">dmxextension.h</a>
+</li>
+<li>dmxConfigVirtualPrint()
+: <a class="el" href="dmxprint_8c.html#ae0a45c7fe5f9f4afb7e68856253350be">dmxprint.c</a>
+, <a class="el" href="dmxprint_8h.html#aa41675fce5582dbfb44d7094b94efab9">dmxprint.h</a>
+</li>
+<li>dmxConfigWriteFile()
+: <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">xdmxconfig.c</a>
+</li>
+<li>dmxConnectionBlockCallback()
+: <a class="el" href="dmxcb_8c.html#a39179d932cde34ab3c947fa017d2d78d">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxcb.h</a>
+</li>
+<li>dmxConsoleCapture()
+: <a class="el" href="dmxconsole_8c.html#ae70541f26e4a4ff6360090393d622b41">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxconsole.h</a>
+</li>
+<li>dmxConsoleClearCursor()
+: <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxconsole.c</a>
+</li>
+<li>dmxConsoleCollectEvents()
+: <a class="el" href="dmxconsole_8c.html#a9c2ec3c63c36955d2458283dbd62b605">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxconsole.h</a>
+</li>
+<li>dmxConsoleComputeWidthHeight()
+: <a class="el" href="dmxconsole_8c.html#a6d6dd821d75fae79c02d7407bbd3c4c5">dmxconsole.c</a>
+</li>
+<li>dmxConsoleCreateEmptyCursor()
+: <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxconsole.c</a>
+</li>
+<li>dmxConsoleCreatePrivate()
+: <a class="el" href="dmxconsole_8c.html#a44f5875f978cc85c2190eacef51debac">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a44f5875f978cc85c2190eacef51debac">dmxconsole.h</a>
+</li>
+<li>dmxConsoleDestroyPrivate()
+: <a class="el" href="dmxconsole_8c.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#ab189a2fd44ccd2e6936b6bb1a27f1d5b">dmxconsole.h</a>
+</li>
+<li>dmxConsoleDraw()
+: <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxconsole.c</a>
+</li>
+<li>dmxConsoleDrawFineCursor()
+: <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxconsole.c</a>
+</li>
+<li>dmxConsoleDrawWindows()
+: <a class="el" href="dmxconsole_8c.html#aa058e61a540d8d4c740fee239c3bffe1">dmxconsole.c</a>
+</li>
+<li>dmxConsoleFunctions()
+: <a class="el" href="dmxconsole_8c.html#a613139541bddab357c413b76238e489b">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a613139541bddab357c413b76238e489b">dmxconsole.h</a>
+</li>
+<li>dmxConsoleInit()
+: <a class="el" href="dmxconsole_8c.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxconsole.h</a>
+</li>
+<li>dmxConsoleKbdGetInfo()
+: <a class="el" href="dmxconsole_8c.html#a710d0bdd587deeb35b430ba48ac209f1">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxconsole.h</a>
+</li>
+<li>dmxConsoleKbdSetCtrl()
+: <a class="el" href="dmxconsole_8h.html#a85026fe07bc1cf4f5b740249655c1648">dmxconsole.h</a>
+</li>
+<li>dmxConsoleMouGetInfo()
+: <a class="el" href="dmxconsole_8c.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxconsole.h</a>
+</li>
+<li>dmxConsoleMoveAbsolute()
+: <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxconsole.c</a>
+</li>
+<li>dmxConsoleMoveRelative()
+: <a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxconsole.c</a>
+</li>
+<li>dmxConsoleReInit()
+: <a class="el" href="dmxconsole_8c.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a35bfb53c46a7a14282d0110aa603dd4a">dmxconsole.h</a>
+</li>
+<li>dmxConsoleUncapture()
+: <a class="el" href="dmxconsole_8c.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxconsole.h</a>
+</li>
+<li>dmxConsoleUpdateFineCursor()
+: <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxconsole.c</a>
+</li>
+<li>dmxConsoleUpdateInfo()
+: <a class="el" href="dmxconsole_8c.html#a180def32863f7bdddf3637181661c505">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#ac5fba2223efdab61863b6458a90c189a">dmxconsole.h</a>
+</li>
+<li>dmxConsoleUpdatePosition()
+: <a class="el" href="dmxconsole_8c.html#a596b1bd2ef51d5542393215ad810b227">dmxconsole.c</a>
+, <a class="el" href="dmxconsole_8h.html#a596b1bd2ef51d5542393215ad810b227">dmxconsole.h</a>
+</li>
+<li>dmxCopyArea()
+: <a class="el" href="dmxgcops_8c.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxgcops.h</a>
+</li>
+<li>dmxCopyClip()
+: <a class="el" href="dmxgc_8c.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#ae4af2d27e1d593d35696f0bb52fd8302">dmxgc.h</a>
+</li>
+<li>dmxCopyGC()
+: <a class="el" href="dmxgc_8c.html#a5a4221a9f3552a0abfe0e968991120bf">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxgc.h</a>
+</li>
+<li>dmxCopyPlane()
+: <a class="el" href="dmxgcops_8c.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxgcops.h</a>
+</li>
+<li>dmxCopyWindow()
+: <a class="el" href="dmxwindow_8c.html#ad78bdba42db62285cf174f072a63a81a">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxwindow.h</a>
+</li>
+<li>dmxCoreMotion()
+: <a class="el" href="dmxinput_8h.html#adf2928cf693dab61adafad503e81d2dc">dmxinput.h</a>
+, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxevents.c</a>
+</li>
+<li>dmxCreateAndRealizeWindow()
+: <a class="el" href="dmxwindow_8c.html#afefa2121a2898700d285e77730a52c4d">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxwindow.h</a>
+</li>
+<li>dmxCreateColormap()
+: <a class="el" href="dmxcmap_8c.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxcmap.h</a>
+</li>
+<li>dmxCreateDefColormap()
+: <a class="el" href="dmxcmap_8c.html#a5481a08a1030ecac42ff809a1c7d2139">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a5481a08a1030ecac42ff809a1c7d2139">dmxcmap.h</a>
+</li>
+<li>dmxCreateGC()
+: <a class="el" href="dmxgc_8c.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxgc.h</a>
+</li>
+<li>dmxCreateNonRootWindow()
+: <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxwindow.c</a>
+</li>
+<li>dmxCreatePicture()
+: <a class="el" href="dmxpict_8c.html#ad7adb9c71564816f5f3172c710274d57">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxpict.h</a>
+</li>
+<li>dmxCreatePictureList()
+: <a class="el" href="dmxpict_8c.html#a8c52091268b0f77d74d3a097b396abcf">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a8c52091268b0f77d74d3a097b396abcf">dmxpict.h</a>
+</li>
+<li>dmxCreatePixmap()
+: <a class="el" href="dmxpixmap_8c.html#a9d26c08a4286c663250f61e63ffa3343">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxpixmap.h</a>
+</li>
+<li>dmxCreateRootWindow()
+: <a class="el" href="dmxwindow_8c.html#a5296d023014ce3d69c04557431785923">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxwindow.h</a>
+</li>
+<li>dmxCreateWindow()
+: <a class="el" href="dmxwindow_8c.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxwindow.h</a>
+</li>
+<li>dmxCrossScreen()
+: <a class="el" href="dmxcursor_8c.html#a2d0757fa7119492da7fe26901dab8571">dmxcursor.c</a>
+</li>
+<li>dmxCursorNoMulti()
+: <a class="el" href="dmxcursor_8c.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a709e3d4a4e44e17fed3de1fcb0d42b20">dmxcursor.h</a>
+</li>
+<li>dmxCursorOffScreen()
+: <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxcursor.c</a>
+</li>
+<li>dmxDestroyClip()
+: <a class="el" href="dmxgc_8c.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxgc.h</a>
+</li>
+<li>dmxDestroyColormap()
+: <a class="el" href="dmxcmap_8c.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxcmap.h</a>
+</li>
+<li>dmxDestroyGC()
+: <a class="el" href="dmxgc_8c.html#a7f33d96c7308bec0eb74822316c7ff23">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxgc.h</a>
+</li>
+<li>dmxDestroyPicture()
+: <a class="el" href="dmxpict_8c.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#aee92c240df08f4c8a62c291b3efa4d7e">dmxpict.h</a>
+</li>
+<li>dmxDestroyPictureClip()
+: <a class="el" href="dmxpict_8c.html#aa977edb667e68606b2e08b25d99427de">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxpict.h</a>
+</li>
+<li>dmxDestroyPictureList()
+: <a class="el" href="dmxpict_8c.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a0af49a0382a2763672f3f8bc1e1ee156">dmxpict.h</a>
+</li>
+<li>dmxDestroyPixmap()
+: <a class="el" href="dmxpixmap_8c.html#a7c602d928744ec2e7be73ef197fc9b12">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxpixmap.h</a>
+</li>
+<li>dmxDestroyWindow()
+: <a class="el" href="dmxwindow_8c.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a25a0aafd36f68137e67a3e6d95b78f53">dmxwindow.h</a>
+</li>
+<li>dmxDetachScreen()
+: <a class="el" href="dmxextension_8c.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxextension.h</a>
+</li>
+<li>dmxDeviceCursorCleanup()
+: <a class="el" href="dmxcursor_8c.html#af291298e4f52875e45d7097a223a8c0b">dmxcursor.c</a>
+</li>
+<li>dmxDeviceCursorInitialize()
+: <a class="el" href="dmxcursor_8c.html#a214b710621ed0279d6321375f3512a87">dmxcursor.c</a>
+</li>
+<li>dmxDeviceOnOff()
+: <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxinputinit.c</a>
+</li>
+<li>dmxDisplayInit()
+: <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxinit.c</a>
+</li>
+<li>dmxDoChangeWindowAttributes()
+: <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxwindow.c</a>
+</li>
+<li>dmxDoCreatePicture()
+: <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxpict.c</a>
+</li>
+<li>dmxDoesOverlap()
+: <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxcursor.c</a>
+</li>
+<li>dmxDoRestackWindow()
+: <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxwindow.c</a>
+</li>
+<li>dmxDoSetShape()
+: <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxwindow.c</a>
+</li>
+<li>dmxDoSync()
+: <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxsync.c</a>
+</li>
+<li>dmxDPMSInit()
+: <a class="el" href="dmxdpms_8c.html#a6c93ecabb9ee83027c79f878e143a472">dmxdpms.c</a>
+, <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxdpms.h</a>
+</li>
+<li>dmxDPMSTerm()
+: <a class="el" href="dmxdpms_8c.html#a54288399c9ed5293b83d7d508ff2465c">dmxdpms.c</a>
+, <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxdpms.h</a>
+</li>
+<li>dmxDPMSWakeup()
+: <a class="el" href="dmxdpms_8c.html#aa996aaa17a07afb7fc613142599505c5">dmxdpms.c</a>
+, <a class="el" href="dmxdpms_8h.html#aa996aaa17a07afb7fc613142599505c5">dmxdpms.h</a>
+</li>
+<li>dmxDummyKbdGetInfo()
+: <a class="el" href="dmxdummy_8c.html#a31bf72cac5b5327393423d49a437fc8b">dmxdummy.c</a>
+, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxdummy.h</a>
+</li>
+<li>dmxDummyMouGetInfo()
+: <a class="el" href="dmxdummy_8c.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxdummy.c</a>
+, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxdummy.h</a>
+</li>
+<li>dmxDump()
+: <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxconsole.c</a>
+</li>
+<li>dmxEnqueue()
+: <a class="el" href="dmxevents_8c.html#ac678be4d489b749fea88a8f0e9045499">dmxevents.c</a>
+, <a class="el" href="dmxevents_8h.html#ac678be4d489b749fea88a8f0e9045499">dmxevents.h</a>
+</li>
+<li>dmxeqSwitchScreen()
+: <a class="el" href="dmxinput_8h.html#ac30ee4be3ed3f25b13caba5cf17cf41d">dmxinput.h</a>
+</li>
+<li>dmxErrorHandler()
+: <a class="el" href="dmxinit_8c.html#ab63a915fb3dc8db86b284bc7f98a01b1">dmxinit.c</a>
+</li>
+<li>dmxEventName()
+: <a class="el" href="dmxlog_8h.html#ad06725902753399035cb0ebde9c45e9a">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#ad06725902753399035cb0ebde9c45e9a">dmxlog.c</a>
+</li>
+<li>dmxExecHost()
+: <a class="el" href="dmxinit_8c.html#a609d59c7622777da5af1930d07b06e20">dmxinit.c</a>
+</li>
+<li>dmxExecOS()
+: <a class="el" href="dmxinit_8c.html#a48c537b2dc0c7e3acf70c1b60c211bae">dmxinit.c</a>
+</li>
+<li>DMXExtensionInit()
+: <a class="el" href="dmx_8c.html#adc46810045a2d02d8bbf9a0ae9a85dbb">dmx.c</a>
+</li>
+<li>dmxExtMotion()
+: <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxevents.c</a>
+</li>
+<li>dmxFetchDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a7f4bc58ef9f987c6667b2aca63577252">dmx.c</a>
+</li>
+<li>dmxFetchInputAttributes()
+: <a class="el" href="dmx_8c.html#acf83414bba3036835bc2f489c3243f31">dmx.c</a>
+</li>
+<li>dmxFetchScreenAttributes()
+: <a class="el" href="dmx_8c.html#a632a882d7c7db081ae7a4c6b1a7578de">dmx.c</a>
+</li>
+<li>dmxFillPolygon()
+: <a class="el" href="dmxgcops_8c.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxgcops.h</a>
+</li>
+<li>dmxFillSpans()
+: <a class="el" href="dmxgcops_8c.html#aa70a52ce25b894154a610b0f3fc130cf">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#aa70a52ce25b894154a610b0f3fc130cf">dmxgcops.h</a>
+</li>
+<li>dmxFindAlternatePixmap()
+: <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxgcops.c</a>
+</li>
+<li>dmxFindCursor()
+: <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxcursor.c</a>
+</li>
+<li>dmxFindFirstScreen()
+: <a class="el" href="dmxinput_8h.html#a8bb7b5687d93b86df921eef6b7c28052">dmxinput.h</a>
+, <a class="el" href="dmxevents_8c.html#a8bb7b5687d93b86df921eef6b7c28052">dmxevents.c</a>
+</li>
+<li>dmxFindFormat()
+: <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxpict.c</a>
+</li>
+<li>dmxFindPointerScreen()
+: <a class="el" href="dmxcommon_8c.html#a907580b7be71d9be0b771d32210f3cad">dmxcommon.c</a>
+, <a class="el" href="dmxcommon_8h.html#a907580b7be71d9be0b771d32210f3cad">dmxcommon.h</a>
+</li>
+<li>dmxFixup()
+: <a class="el" href="dmxevents_8c.html#a76dff4df3c759055dfb6b74423868e9b">dmxevents.c</a>
+</li>
+<li>dmxFlushPendingSyncs()
+: <a class="el" href="dmxextension_8c.html#af7927d9de14425779c5de40312407203">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#af7927d9de14425779c5de40312407203">dmxextension.h</a>
+</li>
+<li>dmxFontErrorHandler()
+: <a class="el" href="dmxfont_8c.html#aba35600742d4d57b9dd9fb9dde973707">dmxfont.c</a>
+</li>
+<li>dmxForceExposures()
+: <a class="el" href="dmxextension_8c.html#afa9f0ee11cd56a66fe5925a283c18188">dmxextension.c</a>
+</li>
+<li>dmxForceWindowCreation()
+: <a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxextension.c</a>
+</li>
+<li>dmxFreeFontPath()
+: <a class="el" href="dmxfont_8c.html#a287e0fab77b9351a96fbc08fb5ec7e25">dmxfont.c</a>
+</li>
+<li>dmxGetButtonMapping()
+: <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxevents.c</a>
+</li>
+<li>dmxGetColormaps()
+: <a class="el" href="dmxinit_8c.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxinit.h</a>
+</li>
+<li>dmxGetDefaultWindowAttributes()
+: <a class="el" href="dmxwindow_8c.html#ab8f054330062393aa409a31ec692cf0d">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxwindow.h</a>
+</li>
+<li>dmxGetDesktopAttributes()
+: <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxextension.h</a>
+, <a class="el" href="dmxextension_8c.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxextension.c</a>
+</li>
+<li>dmxGetFontPath()
+: <a class="el" href="dmxfont_8c.html#ae81f188178a0d01ea67b6685cdbe493c">dmxfont.c</a>
+</li>
+<li>dmxGetGlobalPosition()
+: <a class="el" href="dmxinput_8h.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxinput.h</a>
+, <a class="el" href="dmxevents_8c.html#a0cb75edbb0cabbfd89b40309907bdee3">dmxevents.c</a>
+</li>
+<li>dmxGetImage()
+: <a class="el" href="dmxgcops_8c.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxgcops.h</a>
+</li>
+<li>dmxGetInputAttributes()
+: <a class="el" href="dmxextension_8c.html#a3bde3bbb52470b5eb185805d861e6216">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxextension.h</a>
+</li>
+<li>dmxGetInputCount()
+: <a class="el" href="dmxextension_8c.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a7e2b64de1aef77d43ee78d3a8187f651">dmxextension.h</a>
+</li>
+<li>dmxGetLogLevel()
+: <a class="el" href="dmxlog_8c.html#a917ecdf378ddb91bb2aece6583bd449d">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a917ecdf378ddb91bb2aece6583bd449d">dmxlog.h</a>
+</li>
+<li>dmxGetNumScreens()
+: <a class="el" href="dmxextension_8c.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a1317039ecdb6f4eca7c1e5cea884657e">dmxextension.h</a>
+</li>
+<li>dmxGetPixmapFormats()
+: <a class="el" href="dmxinit_8c.html#abe45fd724cbfceb085e23ac62e276afd">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxinit.h</a>
+</li>
+<li>dmxGetScreenAttribs()
+: <a class="el" href="dmxinit_8c.html#aaed1209f913cb233d4e093282ed829ef">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxinit.h</a>
+</li>
+<li>dmxGetScreenAttributes()
+: <a class="el" href="dmxextension_8c.html#ab4180bb82b058d071e2f72c2e18534b7">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxextension.h</a>
+</li>
+<li>dmxGetSpans()
+: <a class="el" href="dmxgcops_8c.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a2a6026c8f03a56ca5ab93dc2c9cf868f">dmxgcops.h</a>
+</li>
+<li>dmxGetVisualInfo()
+: <a class="el" href="dmxinit_8c.html#a6ae3c95f86743822940a155e6770663d">dmxinit.c</a>
+, <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxinit.h</a>
+</li>
+<li>dmxGetWindowAttributes()
+: <a class="el" href="dmxextension_8c.html#a81cd222e07016da8ee5c87c44a03312a">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxextension.h</a>
+</li>
+<li>dmxGlyphErrorHandler()
+: <a class="el" href="dmxpict_8c.html#a3b0dd9ecc0fbb260662ba6c18d69bd08">dmxpict.c</a>
+</li>
+<li>dmxGlyphs()
+: <a class="el" href="dmxpict_8c.html#a8a98dca5e23c501c44fa3e040e31d100">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a8a98dca5e23c501c44fa3e040e31d100">dmxpict.h</a>
+</li>
+<li>dmxHeader()
+: <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxlog.c</a>
+</li>
+<li>dmxHideCursor()
+: <a class="el" href="dmxcursor_8c.html#ad67e1086ef62ecfa33549d74cd89a379">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxcursor.h</a>
+</li>
+<li>dmxImageGlyphBlt()
+: <a class="el" href="dmxgcops_8c.html#a3feeb20d71e2368e436633eddf4b13ac">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a3feeb20d71e2368e436633eddf4b13ac">dmxgcops.h</a>
+</li>
+<li>dmxImageText16()
+: <a class="el" href="dmxgcops_8c.html#acb19f9ef082c76f281679994057fafe1">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxgcops.h</a>
+</li>
+<li>dmxImageText8()
+: <a class="el" href="dmxgcops_8c.html#a1fc863ca944469fc34d78db948f14053">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxgcops.h</a>
+</li>
+<li>dmxInitFonts()
+: <a class="el" href="dmxfont_8c.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#a2d9cf629a70ed7c46a38dac9611b6527">dmxfont.h</a>
+</li>
+<li>dmxInitGC()
+: <a class="el" href="dmxgc_8c.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#a3f58b7fe15764f42dfdcf6b9dfdd9146">dmxgc.h</a>
+</li>
+<li>dmxInitIndexed()
+: <a class="el" href="dmxpict_8c.html#a5c81bdb404715c2318d3eda49e26fe68">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a5c81bdb404715c2318d3eda49e26fe68">dmxpict.h</a>
+</li>
+<li>dmxInitOrigins()
+: <a class="el" href="dmxcursor_8c.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxcursor.h</a>
+</li>
+<li>dmxInitOverlap()
+: <a class="el" href="dmxcursor_8c.html#a77c74a33de88fae6cf0de8b755a5c411">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxcursor.h</a>
+</li>
+<li>dmxInitPixmap()
+: <a class="el" href="dmxpixmap_8c.html#aacf02a6e5ba85a356f09f66159e71a75">dmxpixmap.c</a>
+, <a class="el" href="dmxpixmap_8h.html#aacf02a6e5ba85a356f09f66159e71a75">dmxpixmap.h</a>
+</li>
+<li>dmxInitRender()
+: <a class="el" href="dmxpict_8h.html#a76cabef9d3047d8f514fb6e17b951145">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a76cabef9d3047d8f514fb6e17b951145">dmxpict.c</a>
+</li>
+<li>dmxInitWindow()
+: <a class="el" href="dmxwindow_8c.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ad1c1a5296c1ef99d4dd829108903b21f">dmxwindow.h</a>
+</li>
+<li>dmxInputAttachBackend()
+: <a class="el" href="dmxinputinit_8c.html#a2ee085307a1dba7b07fa2eb34639815c">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxinputinit.h</a>
+</li>
+<li>dmxInputAttachConsole()
+: <a class="el" href="dmxinputinit_8c.html#ac3f9807875f237589d57ab9f006735af">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxinputinit.h</a>
+</li>
+<li>dmxInputAttachNew()
+: <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxinputinit.c</a>
+</li>
+<li>dmxInputAttachOld()
+: <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxinputinit.c</a>
+</li>
+<li>dmxInputCopyLocal()
+: <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a816d1052ef5a587ef8e16b0005b06662">dmxinputinit.c</a>
+</li>
+<li>dmxInputDetach()
+: <a class="el" href="dmxinputinit_8c.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxinputinit.c</a>
+, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxdetach.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxinputinit.h</a>
+</li>
+<li>dmxInputDetachAll()
+: <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#adec246343ae8402c7cc47b19020c7ef7">dmxinputinit.c</a>
+</li>
+<li>dmxInputDetachId()
+: <a class="el" href="dmxinputinit_8c.html#ad7a3f09eeaf98373c261119fba907c47">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ad7a3f09eeaf98373c261119fba907c47">dmxinputinit.h</a>
+</li>
+<li>dmxInputExtensionErrorHandler()
+: <a class="el" href="dmxinputinit_8h.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a50c2f7d406a3aacf3bf95b94d616527c">dmxinputinit.c</a>
+</li>
+<li>dmxInputFree()
+: <a class="el" href="dmxinput_8h.html#afa044735ab6fae7c75c82243a5159611">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxinputinit.c</a>
+</li>
+<li>dmxInputFreeLocal()
+: <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxinputinit.c</a>
+</li>
+<li>dmxInputInit()
+: <a class="el" href="dmxinput_8h.html#a5845f0dbf305a8a233d3747489745faa">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxinputinit.c</a>
+</li>
+<li>dmxInputLateReInit()
+: <a class="el" href="dmxinput_8h.html#a9d1185c140ba54b24312ff6c98105c15">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxinputinit.c</a>
+</li>
+<li>dmxInputLocateId()
+: <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxinputinit.c</a>
+</li>
+<li>dmxInputLogDevices()
+: <a class="el" href="dmxinput_8h.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxinputinit.c</a>
+</li>
+<li>dmxInputReInit()
+: <a class="el" href="dmxinput_8h.html#ac8f3465a13cae73a3d657526643ef7b7">dmxinput.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxinputinit.c</a>
+</li>
+<li>dmxInputScanForExtensions()
+: <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxinputinit.c</a>
+</li>
+<li>dmxInstallColormap()
+: <a class="el" href="dmxcmap_8c.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxcmap.c</a>
+, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxcmap.h</a>
+</li>
+<li>dmxInvalidateGlobalPosition()
+: <a class="el" href="dmxevents_8h.html#a344419a01be02621ec99942c6cfd45ea">dmxevents.h</a>
+, <a class="el" href="dmxevents_8c.html#a344419a01be02621ec99942c6cfd45ea">dmxevents.c</a>
+</li>
+<li>dmxIterateOverlap()
+: <a class="el" href="dmxcursor_8c.html#a28c6651bdff6f7fc01292548659a6eb4">dmxcursor.c</a>
+</li>
+<li>dmxKbdCtrl()
+: <a class="el" href="dmxinputinit_8c.html#a4538a00d09ac3cd10b81598b39340da3">dmxinputinit.c</a>
+</li>
+<li>dmxKeyboardBellProc()
+: <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ab127903bdb6bf262e51f128b4cec4960">dmxinputinit.c</a>
+</li>
+<li>dmxKeyboardFreeNames()
+: <a class="el" href="dmxinputinit_8c.html#aef5e79cc27e75fdc3fdfb3e45c64dc9a">dmxinputinit.c</a>
+</li>
+<li>dmxKeyboardKbdCtrlProc()
+: <a class="el" href="dmxinputinit_8c.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxinputinit.h</a>
+</li>
+<li>dmxKeyboardOn()
+: <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxinputinit.c</a>
+</li>
+<li>dmxKeyCodeToKeySym()
+: <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxevents.c</a>
+</li>
+<li>dmxKeySymToKeyCode()
+: <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxevents.c</a>
+</li>
+<li>dmxLocalInitInput()
+: <a class="el" href="dmxinputinit_8h.html#a5ed320a98bbcf4d2970316dff3ddb349">dmxinputinit.h</a>
+</li>
+<li>dmxLog()
+: <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxlog.h</a>
+</li>
+<li>dmxLogArgs()
+: <a class="el" href="dmxlog_8h.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#afc95eb36d0aadc52b34ee3e506f70f7b">dmxlog.c</a>
+</li>
+<li>dmxLogCont()
+: <a class="el" href="dmxlog_8c.html#a661111d53827a1a15c715b7b32f05a0e">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a661111d53827a1a15c715b7b32f05a0e">dmxlog.h</a>
+</li>
+<li>dmxLogInput()
+: <a class="el" href="dmxlog_8c.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#ac8d8dc0ec631bab1d1d95815c238d574">dmxlog.h</a>
+</li>
+<li>dmxLogInputCont()
+: <a class="el" href="dmxlog_8c.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#afee1d7a707ad9d9b0fd4facacf1b06c0">dmxlog.h</a>
+</li>
+<li>dmxLogOutput()
+: <a class="el" href="dmxlog_8h.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#aabe50ca33403c25a9e57a06d1d3a089a">dmxlog.c</a>
+</li>
+<li>dmxLogOutputCont()
+: <a class="el" href="dmxlog_8c.html#a9ee9ef3403a0905596796cfcac2334d2">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a9ee9ef3403a0905596796cfcac2334d2">dmxlog.h</a>
+</li>
+<li>dmxLogOutputWarning()
+: <a class="el" href="dmxlog_8c.html#a079f70db20eaa2ba22b976851da820b6">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a079f70db20eaa2ba22b976851da820b6">dmxlog.h</a>
+</li>
+<li>dmxLogVisual()
+: <a class="el" href="dmxlog_8c.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a6223e183bab18f6eaa27cb29bf5dcfae">dmxlog.h</a>
+</li>
+<li>dmxLookupLocal()
+: <a class="el" href="dmxinputinit_8c.html#aa1d3565232f8ab962246c825bb565bd6">dmxinputinit.c</a>
+</li>
+<li>dmxLookupVisual()
+: <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxvisual.h</a>
+, <a class="el" href="dmxvisual_8c.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxvisual.c</a>
+</li>
+<li>dmxLookupVisualFromID()
+: <a class="el" href="dmxvisual_8c.html#a1abfce5d0ad66062cc75a5293c514499">dmxvisual.c</a>
+, <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxvisual.h</a>
+</li>
+<li>dmxMakeUniqueDeviceName()
+: <a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxinputinit.c</a>
+</li>
+<li>dmxMapClear()
+: <a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxmap.h</a>
+, <a class="el" href="dmxmap_8c.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxmap.c</a>
+</li>
+<li>dmxMapInsert()
+: <a class="el" href="dmxmap_8c.html#ada5a28e0c746708e0f5c45e9e193d907">dmxmap.c</a>
+, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxmap.h</a>
+</li>
+<li>dmxMapLookup()
+: <a class="el" href="dmxmap_8c.html#abc1a46c87c4acd45e4e5f79370be6169">dmxmap.c</a>
+, <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxmap.h</a>
+</li>
+<li>dmxMaxNumScreens()
+: <a class="el" href="dmx_8c.html#ad4763f72eeccf61b16b1e3c3141e3dd3">dmx.c</a>
+</li>
+<li>dmxMessage()
+: <a class="el" href="dmxlog_8c.html#ab39e0a74201e4118158bc87063dd4a2e">dmxlog.c</a>
+</li>
+<li>dmxMotion()
+: <a class="el" href="dmxevents_8c.html#ae08f1801d0215396a7f39bd083ddca11">dmxevents.c</a>
+, <a class="el" href="dmxevents_8h.html#ac96a9f0e7f2a31881224b4a8e620239a">dmxevents.h</a>
+</li>
+<li>dmxMoveCursor()
+: <a class="el" href="dmxcursor_8c.html#a21820e2001f763e3cfc924a1d602bb62">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxcursor.h</a>
+</li>
+<li>dmxOnScreen()
+: <a class="el" href="dmxcursor_8c.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxcursor.h</a>
+</li>
+<li>dmxOpenDisplay()
+: <a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxinit.h</a>
+, <a class="el" href="dmxinit_8c.html#abe5a8715282907a3ffd7b992c8dd3661">dmxinit.c</a>
+</li>
+<li>dmxPictureInit()
+: <a class="el" href="dmxpict_8c.html#a457aa4df6b01e88a26cc069094e4b07c">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a457aa4df6b01e88a26cc069094e4b07c">dmxpict.h</a>
+</li>
+<li>dmxPointerGetMotionBufferSize()
+: <a class="el" href="dmxmotion_8c.html#a71e31cfbffb3603068d897374e173400">dmxmotion.c</a>
+, <a class="el" href="dmxmotion_8h.html#a71e31cfbffb3603068d897374e173400">dmxmotion.h</a>
+</li>
+<li>dmxPointerGetMotionEvents()
+: <a class="el" href="dmxmotion_8c.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxmotion.c</a>
+, <a class="el" href="dmxmotion_8h.html#a6ebfa18908cd0473f3f23643e9ca2a58">dmxmotion.h</a>
+</li>
+<li>dmxPointerPutMotionEvent()
+: <a class="el" href="dmxmotion_8c.html#abe71ba14a07f4077ca2658f81426f4c6">dmxmotion.c</a>
+, <a class="el" href="dmxmotion_8h.html#abe71ba14a07f4077ca2658f81426f4c6">dmxmotion.h</a>
+</li>
+<li>dmxPolyArc()
+: <a class="el" href="dmxgcops_8c.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxgcops.h</a>
+</li>
+<li>dmxPolyFillArc()
+: <a class="el" href="dmxgcops_8c.html#a5488891f016532e40ba5e31466fb67fd">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxgcops.h</a>
+</li>
+<li>dmxPolyFillRect()
+: <a class="el" href="dmxgcops_8c.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxgcops.h</a>
+</li>
+<li>dmxPolyGlyphBlt()
+: <a class="el" href="dmxgcops_8c.html#ae1200c166d613547b34d0adf04d152ea">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#ae1200c166d613547b34d0adf04d152ea">dmxgcops.h</a>
+</li>
+<li>dmxPolylines()
+: <a class="el" href="dmxgcops_8c.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxgcops.h</a>
+</li>
+<li>dmxPolyPoint()
+: <a class="el" href="dmxgcops_8c.html#a03892f8e655a4bb743a264f121b096c6">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxgcops.h</a>
+</li>
+<li>dmxPolyRectangle()
+: <a class="el" href="dmxgcops_8c.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxgcops.h</a>
+</li>
+<li>dmxPolySegment()
+: <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxgcops.c</a>
+</li>
+<li>dmxPolyText16()
+: <a class="el" href="dmxgcops_8c.html#a2fe37b5892867df4c29292c975c17e52">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxgcops.h</a>
+</li>
+<li>dmxPolyText8()
+: <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxgcops.h</a>
+, <a class="el" href="dmxgcops_8c.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxgcops.c</a>
+</li>
+<li>dmxPopulate()
+: <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmx.c</a>
+</li>
+<li>dmxPopulateLocal()
+: <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxinputinit.c</a>
+</li>
+<li>dmxPositionWindow()
+: <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#adba873c51adf03b8af700c67fc6fba9b">dmxwindow.c</a>
+</li>
+<li>dmxPrintOverlap()
+: <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxcursor.c</a>
+</li>
+<li>dmxPrintScreenInfo()
+: <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxinit.c</a>
+</li>
+<li>dmxProcessInputEvents()
+: <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxinputinit.c</a>
+</li>
+<li>dmxProcRenderAddGlyphs()
+: <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxpict.c</a>
+</li>
+<li>dmxProcRenderCompositeGlyphs()
+: <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxpict.c</a>
+</li>
+<li>dmxProcRenderCreateGlyphSet()
+: <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxpict.c</a>
+</li>
+<li>dmxProcRenderFreeGlyphs()
+: <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxpict.c</a>
+</li>
+<li>dmxProcRenderFreeGlyphSet()
+: <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxpict.c</a>
+</li>
+<li>dmxProcRenderSetPictureFilter()
+: <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxpict.c</a>
+</li>
+<li>dmxProcRenderSetPictureTransform()
+: <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxpict.c</a>
+</li>
+<li>dmxProcSetFontPath()
+: <a class="el" href="dmxfont_8c.html#ac76f86a537e6d719d712d11f310b8989">dmxfont.c</a>
+</li>
+<li>dmxPropertyCheckOtherServers()
+: <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxprop.c</a>
+</li>
+<li>dmxPropertyCheckOtherWindows()
+: <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxprop.c</a>
+</li>
+<li>dmxPropertyDisplay()
+: <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxprop.h</a>
+, <a class="el" href="dmxprop_8c.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxprop.c</a>
+</li>
+<li>dmxPropertyErrorHandler()
+: <a class="el" href="dmxprop_8c.html#a45eb0051c6d317735f2bf3b64ddc43e1">dmxprop.c</a>
+</li>
+<li>dmxPropertyIdentifier()
+: <a class="el" href="dmxprop_8c.html#a5393154b62783c7ff9cb657acbf73cca">dmxprop.c</a>
+</li>
+<li>dmxPropertyIterate()
+: <a class="el" href="dmxprop_8h.html#a4c53640b27c787d65539555cc3bf3c57">dmxprop.h</a>
+, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxprop.c</a>
+</li>
+<li>dmxPropertySameDisplay()
+: <a class="el" href="dmxprop_8c.html#ad0a551002589f00b2bac2b081283bc83">dmxprop.c</a>
+, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxprop.h</a>
+</li>
+<li>dmxPropertyWindow()
+: <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxprop.h</a>
+, <a class="el" href="dmxprop_8c.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxprop.c</a>
+</li>
+<li>dmxPushPixels()
+: <a class="el" href="dmxgcops_8c.html#a2ca1093683e50ef80846d76a83d2f102">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a2ca1093683e50ef80846d76a83d2f102">dmxgcops.h</a>
+</li>
+<li>dmxPutImage()
+: <a class="el" href="dmxgcops_8c.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxgcops.h</a>
+</li>
+<li>dmxRealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxcursor.c</a>
+</li>
+<li>dmxRealizeFont()
+: <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxfont.h</a>
+, <a class="el" href="dmxfont_8c.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxfont.c</a>
+</li>
+<li>dmxRealizeWindow()
+: <a class="el" href="dmxwindow_8c.html#ac75f5d6332a78eeac4e0e185cf326045">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxwindow.h</a>
+</li>
+<li>dmxReInitOrigins()
+: <a class="el" href="dmxcursor_8c.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxcursor.h</a>
+</li>
+<li>dmxRemoveInput()
+: <a class="el" href="dmxextension_8c.html#a6125541332383040aa07fa1ef310d38d">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a55936739d6df4e5b8a048d5d34c6cd39">dmxextension.h</a>
+</li>
+<li>dmxReparentWindow()
+: <a class="el" href="dmxwindow_8c.html#ab07d7010858aa078f26396f420fdea8c">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxwindow.h</a>
+</li>
+<li>dmxResetFonts()
+: <a class="el" href="dmxfont_8c.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#ab6bdac52e012fec9bd43eaa9667f9785">dmxfont.h</a>
+</li>
+<li>dmxResetRender()
+: <a class="el" href="dmxpict_8h.html#a93c956636d6aba1f2ce1cab637e00fff">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a93c956636d6aba1f2ce1cab637e00fff">dmxpict.c</a>
+</li>
+<li>dmxResizeRootWindow()
+: <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#a817739d4921329f1cf71f2af6fcacfc2">dmxwindow.c</a>
+</li>
+<li>dmxResizeScreenWindow()
+: <a class="el" href="dmxwindow_8c.html#af96b8583264e78a4c693c6f7ee887067">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxwindow.h</a>
+</li>
+<li>dmxResizeWindow()
+: <a class="el" href="dmxwindow_8c.html#ac3811e381fef200b5cd3207478df66e1">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxwindow.h</a>
+</li>
+<li>dmxRestackWindow()
+: <a class="el" href="dmxwindow_8c.html#a21e147f295faee8e53eb162071dc66ad">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxwindow.h</a>
+</li>
+<li>dmxSaveScreen()
+: <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxscrinit.c</a>
+</li>
+<li>dmxScreenInit()
+: <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxscrinit.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxscrinit.c</a>
+</li>
+<li>dmxSetCursor()
+: <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxcursor.c</a>
+</li>
+<li>dmxSetDefaultFontPath()
+: <a class="el" href="dmxinit_8c.html#a18cb12b28844e363b3f43b3b3582d214">dmxinit.c</a>
+</li>
+<li>dmxSetDesktopAttribute()
+: <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmx.c</a>
+</li>
+<li>dmxSetErrorHandler()
+: <a class="el" href="dmxinit_8h.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxinit.h</a>
+, <a class="el" href="dmxinit_8c.html#a2f19c6c0750ea1defb702c2d6231e4a8">dmxinit.c</a>
+</li>
+<li>dmxSetFontPath()
+: <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxfont.c</a>
+</li>
+<li>dmxSetInputAttribute()
+: <a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmx.c</a>
+</li>
+<li>dmxSetLogLevel()
+: <a class="el" href="dmxlog_8h.html#a1fb44232c682fab283ef2726255e8759">dmxlog.h</a>
+, <a class="el" href="dmxlog_8c.html#a1fb44232c682fab283ef2726255e8759">dmxlog.c</a>
+</li>
+<li>dmxSetPixmapFormats()
+: <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxinit.c</a>
+</li>
+<li>dmxSetScreenAttribute()
+: <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmx.c</a>
+</li>
+<li>dmxSetShape()
+: <a class="el" href="dmxwindow_8c.html#aa14e289855150f41c4f574afea427bb0">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxwindow.h</a>
+</li>
+<li>dmxSetSpans()
+: <a class="el" href="dmxgcops_8c.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxgcops.c</a>
+, <a class="el" href="dmxgcops_8h.html#a5fa3b658c712aa8a4f48a27eca05730d">dmxgcops.h</a>
+</li>
+<li>dmxSetWidthHeight()
+: <a class="el" href="dmxcb_8h.html#aaafedb53a138b81ebb62eeff391f1115">dmxcb.h</a>
+, <a class="el" href="dmxcb_8c.html#aaafedb53a138b81ebb62eeff391f1115">dmxcb.c</a>
+</li>
+<li>dmxShadowUpdateProc()
+: <a class="el" href="dmxshadow_8c.html#af2e3c9fd493e63137db512ab54bf1327">dmxshadow.c</a>
+, <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxshadow.h</a>
+</li>
+<li>dmxSigioAdd()
+: <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxsigio.c</a>
+</li>
+<li>dmxSigioBlock()
+: <a class="el" href="dmxsigio_8h.html#a0ab74a514a7e18842b085aa001553137">dmxsigio.h</a>
+, <a class="el" href="dmxsigio_8c.html#a0ab74a514a7e18842b085aa001553137">dmxsigio.c</a>
+</li>
+<li>dmxSigioDisableInput()
+: <a class="el" href="dmxsigio_8c.html#aea86e1800e644fac954c6bbf6012c7aa">dmxsigio.c</a>
+, <a class="el" href="dmxsigio_8h.html#aea86e1800e644fac954c6bbf6012c7aa">dmxsigio.h</a>
+</li>
+<li>dmxSigioEnableInput()
+: <a class="el" href="dmxsigio_8c.html#a86b07a489751508e422ce60fc4ad332d">dmxsigio.c</a>
+, <a class="el" href="dmxsigio_8h.html#a86b07a489751508e422ce60fc4ad332d">dmxsigio.h</a>
+</li>
+<li>dmxSigioHandler()
+: <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxsigio.c</a>
+</li>
+<li>dmxSigioHook()
+: <a class="el" href="dmxsigio_8c.html#a71472c553212e8de00f36e072c378a6c">dmxsigio.c</a>
+</li>
+<li>dmxSigioRegister()
+: <a class="el" href="dmxsigio_8c.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxsigio.c</a>
+, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxsigio.h</a>
+</li>
+<li>dmxSigioRemove()
+: <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxsigio.c</a>
+</li>
+<li>dmxSigioUnblock()
+: <a class="el" href="dmxsigio_8h.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxsigio.h</a>
+, <a class="el" href="dmxsigio_8c.html#aadc7d1d3b885b68d326ccc8ae1c17d11">dmxsigio.c</a>
+</li>
+<li>dmxSigioUnhook()
+: <a class="el" href="dmxsigio_8c.html#a0092cc73f6beb3d16b542a8527f1cbf6">dmxsigio.c</a>
+</li>
+<li>dmxSigioUnregister()
+: <a class="el" href="dmxsigio_8h.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxsigio.h</a>
+, <a class="el" href="dmxsigio_8c.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxsigio.c</a>
+</li>
+<li>dmxSLCreate()
+: <a class="el" href="dmxcursor_8c.html#aaf8a9878f12b6653247fc27d960beccf">dmxcursor.c</a>
+</li>
+<li>dmxSLFindNext()
+: <a class="el" href="dmxcursor_8c.html#ab4dcb11cad339e72d843356841ffd203">dmxcursor.c</a>
+</li>
+<li>dmxSLFree()
+: <a class="el" href="dmxcursor_8c.html#a565fbb8c3754a14c1aed13b741705b91">dmxcursor.c</a>
+</li>
+<li>dmxStatActivate()
+: <a class="el" href="dmxstat_8h.html#a3d01ce5487317c131c32e31f05489c58">dmxstat.h</a>
+, <a class="el" href="dmxstat_8c.html#a3d01ce5487317c131c32e31f05489c58">dmxstat.c</a>
+</li>
+<li>dmxStatAlloc()
+: <a class="el" href="dmxstat_8c.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a5637440dfb18ba8ccf47bde3037d93aa">dmxstat.h</a>
+</li>
+<li>dmxStatCallback()
+: <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxstat.c</a>
+</li>
+<li>dmxStatFree()
+: <a class="el" href="dmxstat_8c.html#a23687b91d203902bb293ba64c391cee4">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a33d0c28b9f5f129f4328a714f1da1db7">dmxstat.h</a>
+</li>
+<li>dmxStatInit()
+: <a class="el" href="dmxstat_8h.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxstat.h</a>
+, <a class="el" href="dmxstat_8c.html#a48ed41878576dd3ff9212deaecb2cc1f">dmxstat.c</a>
+</li>
+<li>dmxStatSync()
+: <a class="el" href="dmxstat_8c.html#a1098a195e40df685aaf2fbc238884027">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxstat.h</a>
+</li>
+<li>dmxStatValue()
+: <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxstat.c</a>
+</li>
+<li>dmxStoreColors()
+: <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxcmap.h</a>
+, <a class="el" href="dmxcmap_8c.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxcmap.c</a>
+</li>
+<li>dmxSwitchReturn()
+: <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxinputinit.c</a>
+</li>
+<li>dmxSync()
+: <a class="el" href="dmxsync_8c.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxsync.c</a>
+, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxsync.h</a>
+</li>
+<li>dmxSyncActivate()
+: <a class="el" href="dmxsync_8h.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxsync.h</a>
+, <a class="el" href="dmxsync_8c.html#ae0a769161d6f8d88067a9cac16f9cf6f">dmxsync.c</a>
+</li>
+<li>dmxSyncBlockHandler()
+: <a class="el" href="dmxsync_8c.html#aa5bb6eee83aba5bedf3c93fbb85af049">dmxsync.c</a>
+</li>
+<li>dmxSyncCallback()
+: <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxsync.c</a>
+</li>
+<li>dmxSyncInit()
+: <a class="el" href="dmxsync_8h.html#a0b349896e58d4291d712e31121fdc0ac">dmxsync.h</a>
+, <a class="el" href="dmxsync_8c.html#a0b349896e58d4291d712e31121fdc0ac">dmxsync.c</a>
+</li>
+<li>dmxSyncWakeupHandler()
+: <a class="el" href="dmxsync_8c.html#a9329ae45fff6668caaca1fb93792b0b9">dmxsync.c</a>
+</li>
+<li>dmxTestSameDisplay()
+: <a class="el" href="dmxcursor_8c.html#a3beed7bb0f6999879936b2f47751d125">dmxcursor.c</a>
+</li>
+<li>dmxTranslateAndEnqueueExtEvent()
+: <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxevents.c</a>
+</li>
+<li>dmxTrapezoids()
+: <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#ae54f217c222944bb10731d73e05ed4b2">dmxpict.c</a>
+</li>
+<li>dmxTriangles()
+: <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a401f568feed789ffc0bb1cc52573f707">dmxpict.c</a>
+</li>
+<li>dmxTriFan()
+: <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a11d3beb5f92c982f9383bb7e606e3157">dmxpict.c</a>
+</li>
+<li>dmxTriStrip()
+: <a class="el" href="dmxpict_8c.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxpict.h</a>
+</li>
+<li>dmxTryComputeScreenOrigins()
+: <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxcursor.c</a>
+</li>
+<li>dmxUnrealizeCursor()
+: <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxcursor.c</a>
+</li>
+<li>dmxUnrealizeFont()
+: <a class="el" href="dmxfont_8c.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxfont.c</a>
+, <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxfont.h</a>
+</li>
+<li>dmxUnrealizeWindow()
+: <a class="el" href="dmxwindow_8c.html#aeab9f468cc2c9374658213ee90a234a0">dmxwindow.c</a>
+, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxwindow.h</a>
+</li>
+<li>dmxUpdateIndexed()
+: <a class="el" href="dmxpict_8h.html#a05292dc07650c6fb40e13640cfce0df6">dmxpict.h</a>
+, <a class="el" href="dmxpict_8c.html#a05292dc07650c6fb40e13640cfce0df6">dmxpict.c</a>
+</li>
+<li>dmxUpdateScreenResources()
+: <a class="el" href="dmxextension_8c.html#a602b3c05cd619a8b00d91315009ebc5d">dmxextension.c</a>
+, <a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxextension.h</a>
+</li>
+<li>dmxUpdateWindowInfo()
+: <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxinput.h</a>
+, <a class="el" href="dmxinput_8c.html#a122b762a283b031348730294d3aa1319">dmxinput.c</a>
+</li>
+<li>dmxUpdateWindowInformation()
+: <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxinputinit.c</a>
+</li>
+<li>dmxValidateGC()
+: <a class="el" href="dmxgc_8c.html#ad34a918e727baa65bea235ac16b5e08f">dmxgc.c</a>
+, <a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxgc.h</a>
+</li>
+<li>dmxValidatePicture()
+: <a class="el" href="dmxpict_8c.html#a3a9285c518b050130e40b7e147309350">dmxpict.c</a>
+, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxpict.h</a>
+</li>
+<li>dmxVDLCount()
+: <a class="el" href="dmxcompat_8c.html#a2bfb19f15e4e2fab177d050423dfd478">dmxcompat.c</a>
+</li>
+<li>dmxVDLDisplayEntry()
+: <a class="el" href="dmxcompat_8c.html#a48a37477c3206396f646511a64e8b7c9">dmxcompat.c</a>
+</li>
+<li>dmxVDLRead()
+: <a class="el" href="dmxcompat_8h.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxcompat.h</a>
+, <a class="el" href="dmxcompat_8c.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxcompat.c</a>
+</li>
+<li>dmxVDLReadLine()
+: <a class="el" href="dmxcompat_8c.html#a186cebe5d2ccba23be8ed5184ec0b27d">dmxcompat.c</a>
+</li>
+<li>dmxVDLVirtualEntry()
+: <a class="el" href="dmxcompat_8c.html#a0f960866400da9b168f15d8e738bf864">dmxcompat.c</a>
+</li>
+<li>dmxWakeupHandler()
+: <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxinputinit.c</a>
+</li>
+<li>dmxWarpCursor()
+: <a class="el" href="dmxcursor_8c.html#af80076061e55521b62a7cfd8e66bf3e6">dmxcursor.c</a>
+</li>
+<li>dmxWindowExposurePredicate()
+: <a class="el" href="dmxwindow_8c.html#a2d44bd3ba7edbd43508cca91982ce572">dmxwindow.c</a>
+</li>
+<li>dmxWindowExposures()
+: <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxwindow.h</a>
+, <a class="el" href="dmxwindow_8c.html#a02a6991e5248012e287fe4be3a985926">dmxwindow.c</a>
+</li>
+<li>dmxXInputEventName()
+: <a class="el" href="dmxlog_8c.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxlog.c</a>
+, <a class="el" href="dmxlog_8h.html#a57b865e3469d22f9dedb3cf7dc97ed2e">dmxlog.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x65.html b/hw/dmx/doc/html/globals_func_0x65.html
new file mode 100644
index 0000000..e4b5bae
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x65.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li class="current"><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>enqueueMotion()
+: <a class="el" href="dmxevents_8c.html#ad423328e9c289737154464bd6830a1ad">dmxevents.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x67.html b/hw/dmx/doc/html/globals_func_0x67.html
new file mode 100644
index 0000000..7e37ca7
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x67.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li class="current"><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>GetGLXFBConfigs()
+: <a class="el" href="dmx__glxvisuals_8c.html#a0ec26db964e7f051b0c53fa80f0ca64f">dmx_glxvisuals.c</a>
+, <a class="el" href="dmx__glxvisuals_8h.html#a0ec26db964e7f051b0c53fa80f0ca64f">dmx_glxvisuals.h</a>
+</li>
+<li>GetGLXVisualConfigs()
+: <a class="el" href="dmx__glxvisuals_8h.html#abe57e7081e90397658ffe52225891023">dmx_glxvisuals.h</a>
+, <a class="el" href="dmx__glxvisuals_8c.html#abe57e7081e90397658ffe52225891023">dmx_glxvisuals.c</a>
+</li>
+<li>GetGLXVisualConfigsFromFBConfigs()
+: <a class="el" href="dmx__glxvisuals_8h.html#a8c817583455230eb81b38c9fcdf3d363">dmx_glxvisuals.h</a>
+, <a class="el" href="dmx__glxvisuals_8c.html#a8c817583455230eb81b38c9fcdf3d363">dmx_glxvisuals.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x69.html b/hw/dmx/doc/html/globals_func_0x69.html
new file mode 100644
index 0000000..8386b4e
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x69.html
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li class="current"><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>InitInput()
+: <a class="el" href="dmxinput_8c.html#a1ffd49de15b6ee0cafe5e83740c7a316">dmxinput.c</a>
+</li>
+<li>InitOutput()
+: <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">dmxinit.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x6b.html b/hw/dmx/doc/html/globals_func_0x6b.html
new file mode 100644
index 0000000..1c7d6bc
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x6b.html
@@ -0,0 +1,212 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li class="current"><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kbdLinuxActivate()
+: <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxBell()
+: <a class="el" href="lnx-keyboard_8c.html#a0acb8c77b4bd032bda9aeb87a656b9e7">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a0acb8c77b4bd032bda9aeb87a656b9e7">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxCloseConsole()
+: <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxConvert()
+: <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxCreatePrivate()
+: <a class="el" href="lnx-keyboard_8c.html#aaeba8e3220761201a64b5da3e2f85e52">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#aaeba8e3220761201a64b5da3e2f85e52">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxCtrl()
+: <a class="el" href="lnx-keyboard_8c.html#a278d93f44fccf1e642fa58c05bb2d06a">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a278d93f44fccf1e642fa58c05bb2d06a">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxDestroyPrivate()
+: <a class="el" href="lnx-keyboard_8c.html#a5c9ddc88a9a5d989ce49a071eadcec87">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a71f565aa8f6824d52f817dc4a5e504f7">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxGetCurrentVTNumber()
+: <a class="el" href="lnx-keyboard_8c.html#aefe715d8634268857806b5655cb70466">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxGetFreeVTNumber()
+: <a class="el" href="lnx-keyboard_8c.html#a198a0f886cb4a350bfe714c16e92c44d">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxGetInfo()
+: <a class="el" href="lnx-keyboard_8c.html#ae65b4fd1c456532a438479b35228d4cf">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxGetMap()
+: <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxInit()
+: <a class="el" href="lnx-keyboard_8c.html#a24c8cbb95ad1f21d590f57cdb22c25f4">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a24c8cbb95ad1f21d590f57cdb22c25f4">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxKeyDown()
+: <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxKeyState()
+: <a class="el" href="lnx-keyboard_8c.html#a0667fd33b8b30b74319818c9e1752950">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxOff()
+: <a class="el" href="lnx-keyboard_8c.html#a2f0498bfb85d9301b7bab802844b047d">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a2f0498bfb85d9301b7bab802844b047d">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxOn()
+: <a class="el" href="lnx-keyboard_8c.html#a541096c9032b400b6f7f8cc76c36f716">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a541096c9032b400b6f7f8cc76c36f716">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxOpenConsole()
+: <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxOpenVT()
+: <a class="el" href="lnx-keyboard_8c.html#af405cce5d5bbc25171b425782f6e0b92">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxPrefix0Mapping()
+: <a class="el" href="lnx-keyboard_8c.html#a582fe5af774d898b85edb42116598890">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxPrefixMapping()
+: <a class="el" href="lnx-keyboard_8c.html#a67b95ff06cbdb5de12cc01954aa7b67e">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxRead()
+: <a class="el" href="lnx-keyboard_8c.html#aa7781cedb743039542090faf43d9423f">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a5c9ea7d8bd36c991d67988615ac57328">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxReadKernelMapping()
+: <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxVTPostSwitch()
+: <a class="el" href="lnx-keyboard_8c.html#a8c0e2439e4991b78f99c79e90f5e474d">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a8c0e2439e4991b78f99c79e90f5e474d">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxVTPreSwitch()
+: <a class="el" href="lnx-keyboard_8c.html#a50fd258e64aa03fd197af2a1a8306b32">lnx-keyboard.c</a>
+, <a class="el" href="lnx-keyboard_8h.html#a50fd258e64aa03fd197af2a1a8306b32">lnx-keyboard.h</a>
+</li>
+<li>kbdLinuxVTSignalHandler()
+: <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">lnx-keyboard.c</a>
+</li>
+<li>kbdLinuxVTSwitch()
+: <a class="el" href="lnx-keyboard_8h.html#a11eda88b5082b0adaad1bbc723dae485">lnx-keyboard.h</a>
+, <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">lnx-keyboard.c</a>
+</li>
+<li>kbdUSBConvert()
+: <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">usb-keyboard.c</a>
+</li>
+<li>kbdUSBCtrl()
+: <a class="el" href="usb-keyboard_8c.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">usb-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8h.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">usb-keyboard.h</a>
+</li>
+<li>kbdUSBGetInfo()
+: <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">usb-keyboard.h</a>
+, <a class="el" href="usb-keyboard_8c.html#a2513592fe5b9c9f0cafcb299c6531d50">usb-keyboard.c</a>
+</li>
+<li>kbdUSBGetMap()
+: <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">usb-keyboard.c</a>
+</li>
+<li>kbdUSBInit()
+: <a class="el" href="usb-keyboard_8h.html#a294cdaa0f31f5f463562c72107b569f2">usb-keyboard.h</a>
+, <a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">usb-keyboard.c</a>
+</li>
+<li>kbdUSBKeyDown()
+: <a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">usb-keyboard.c</a>
+</li>
+<li>kbdUSBKeyState()
+: <a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">usb-keyboard.c</a>
+</li>
+<li>kbdUSBOn()
+: <a class="el" href="usb-keyboard_8c.html#ab1326e68df2758918fd0e9aa06387424">usb-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">usb-keyboard.h</a>
+</li>
+<li>kbdUSBRead()
+: <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">usb-keyboard.c</a>
+, <a class="el" href="usb-keyboard_8h.html#a2f9f160c14e7911c167f03c9eab139e7">usb-keyboard.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x6c.html b/hw/dmx/doc/html/globals_func_0x6c.html
new file mode 100644
index 0000000..f354f5a
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x6c.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li class="current"><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>LegalModifier()
+: <a class="el" href="dmxinput_8c.html#a794cad8ab41d42457e19090e38c5b338">dmxinput.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x6d.html b/hw/dmx/doc/html/globals_func_0x6d.html
new file mode 100644
index 0000000..6c03ad5
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x6d.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li class="current"><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>main()
+: <a class="el" href="dmxtodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">dmxtodmx.c</a>
+, <a class="el" href="vdltodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">vdltodmx.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">xdmxconfig.c</a>
+</li>
+<li>mouUSBCtrl()
+: <a class="el" href="usb-mouse_8h.html#a62cd25ae1a19bea910edcbf10c2d8686">usb-mouse.h</a>
+</li>
+<li>mouUSBGetInfo()
+: <a class="el" href="usb-mouse_8c.html#a422205f883732c44c29093a832254579">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">usb-mouse.h</a>
+</li>
+<li>mouUSBGetMap()
+: <a class="el" href="usb-mouse_8c.html#a006f4bb1b13582dc5d54ba662b84a4d7">usb-mouse.c</a>
+</li>
+<li>mouUSBInit()
+: <a class="el" href="usb-mouse_8c.html#a6c0a19ce4ec02df96f781152a8cc5d36">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#a6c0a19ce4ec02df96f781152a8cc5d36">usb-mouse.h</a>
+</li>
+<li>mouUSBOn()
+: <a class="el" href="usb-mouse_8c.html#a919a8e16f26a0742cda7c9824270501b">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#a919a8e16f26a0742cda7c9824270501b">usb-mouse.h</a>
+</li>
+<li>mouUSBRead()
+: <a class="el" href="usb-mouse_8c.html#ae823cb66bf7678148ffadf3202034921">usb-mouse.c</a>
+, <a class="el" href="usb-mouse_8h.html#afb9d774d978b63fed427dc72d94f632d">usb-mouse.h</a>
+</li>
+<li>msLinuxButton()
+: <a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">lnx-ms.c</a>
+</li>
+<li>msLinuxCreatePrivate()
+: <a class="el" href="lnx-ms_8h.html#a7d7777681993bc701468245e42c04282">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#a7d7777681993bc701468245e42c04282">lnx-ms.c</a>
+</li>
+<li>msLinuxCtrl()
+: <a class="el" href="lnx-ms_8h.html#a760648b944ddf26eafb81cf9b54dd976">lnx-ms.h</a>
+</li>
+<li>msLinuxDestroyPrivate()
+: <a class="el" href="lnx-ms_8c.html#a570d96862061388c5649972b2fa22d75">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#a570d96862061388c5649972b2fa22d75">lnx-ms.h</a>
+</li>
+<li>msLinuxGetInfo()
+: <a class="el" href="lnx-ms_8c.html#ad650b3779315db603085a045405c9d9a">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">lnx-ms.h</a>
+</li>
+<li>msLinuxGetMap()
+: <a class="el" href="lnx-ms_8c.html#a04f66d21af929f125fa7d524883700d5">lnx-ms.c</a>
+</li>
+<li>msLinuxInit()
+: <a class="el" href="lnx-ms_8h.html#a0afb23673c5b1bc695c09f3f3bd75a4b">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#a0afb23673c5b1bc695c09f3f3bd75a4b">lnx-ms.c</a>
+</li>
+<li>msLinuxOff()
+: <a class="el" href="lnx-ms_8h.html#a834a356a0e28d90699a8178154588e09">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#a834a356a0e28d90699a8178154588e09">lnx-ms.c</a>
+</li>
+<li>msLinuxOn()
+: <a class="el" href="lnx-ms_8c.html#ad8f116275f80b5143bc6fe8806cf1298">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">lnx-ms.h</a>
+</li>
+<li>msLinuxRead()
+: <a class="el" href="lnx-ms_8h.html#a9212626ca3092129b094b014e92e0630">lnx-ms.h</a>
+, <a class="el" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">lnx-ms.c</a>
+</li>
+<li>msLinuxReadBytes()
+: <a class="el" href="lnx-ms_8c.html#a71addb6f47215d1e4bf1452fdeeb5081">lnx-ms.c</a>
+</li>
+<li>msLinuxVTPostSwitch()
+: <a class="el" href="lnx-ms_8c.html#af83993c8cc498cbd9f91737beefb5ea3">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#af83993c8cc498cbd9f91737beefb5ea3">lnx-ms.h</a>
+</li>
+<li>msLinuxVTPreSwitch()
+: <a class="el" href="lnx-ms_8c.html#a1ce83df54082f3196ac29e36dea47fc5">lnx-ms.c</a>
+, <a class="el" href="lnx-ms_8h.html#a1ce83df54082f3196ac29e36dea47fc5">lnx-ms.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x6e.html b/hw/dmx/doc/html/globals_func_0x6e.html
new file mode 100644
index 0000000..b32c2f6
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x6e.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li class="current"><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NewInputDeviceRequest()
+: <a class="el" href="dmxinput_8c.html#a8e64d097682947120de17cf9ff43586a">dmxinput.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x6f.html b/hw/dmx/doc/html/globals_func_0x6f.html
new file mode 100644
index 0000000..4114a22
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x6f.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li class="current"><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>OsVendorFatalError()
+: <a class="el" href="dmxinit_8c.html#adaf9384688ad8a12254ccb5ce594c3e1">dmxinit.c</a>
+</li>
+<li>OsVendorInit()
+: <a class="el" href="dmxinit_8c.html#a01064ddfa83f5ae5440a15e6d4121af6">dmxinit.c</a>
+</li>
+<li>othUSBCtrl()
+: <a class="el" href="usb-other_8h.html#a968e84db8d818b0fdd455cf61a1da058">usb-other.h</a>
+</li>
+<li>othUSBGetInfo()
+: <a class="el" href="usb-other_8c.html#a35a421bfc49015d8ed37cac84746ba78">usb-other.c</a>
+, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">usb-other.h</a>
+</li>
+<li>othUSBInit()
+: <a class="el" href="usb-other_8h.html#ad1b551c84928693ea1b2edebf6c4fcff">usb-other.h</a>
+, <a class="el" href="usb-other_8c.html#ad1b551c84928693ea1b2edebf6c4fcff">usb-other.c</a>
+</li>
+<li>othUSBOn()
+: <a class="el" href="usb-other_8h.html#a1f1af19f36fcccfc6b67c814fb360573">usb-other.h</a>
+, <a class="el" href="usb-other_8c.html#a1f1af19f36fcccfc6b67c814fb360573">usb-other.c</a>
+</li>
+<li>othUSBRead()
+: <a class="el" href="usb-other_8c.html#a3c2a6d36c58f4372068d019364831151">usb-other.c</a>
+, <a class="el" href="usb-other_8h.html#a901d4789dd6f963fb642427bc6816033">usb-other.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x70.html b/hw/dmx/doc/html/globals_func_0x70.html
new file mode 100644
index 0000000..15fdee8
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x70.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li class="current"><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>ProcDMXAddInput()
+: <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">dmx.c</a>
+</li>
+<li>ProcDMXAddScreen()
+: <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">dmx.c</a>
+</li>
+<li>ProcDMXChangeDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">dmx.c</a>
+</li>
+<li>ProcDMXChangeScreensAttributes()
+: <a class="el" href="dmx_8c.html#ab3846af767ac6d0a706e7e1bfdf44e80">dmx.c</a>
+</li>
+<li>ProcDMXDispatch()
+: <a class="el" href="dmx_8c.html#a72bbaba90154096af6b485e4e393298c">dmx.c</a>
+</li>
+<li>ProcDMXForceWindowCreation()
+: <a class="el" href="dmx_8c.html#a8fe8ab1c536a67c59078b1aeebcac575">dmx.c</a>
+</li>
+<li>ProcDMXGetDesktopAttributes()
+: <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">dmx.c</a>
+</li>
+<li>ProcDMXGetInputAttributes()
+: <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">dmx.c</a>
+</li>
+<li>ProcDMXGetInputCount()
+: <a class="el" href="dmx_8c.html#a6ec2738f7ae01995d771a88cfae7203b">dmx.c</a>
+</li>
+<li>ProcDMXGetScreenAttributes()
+: <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">dmx.c</a>
+</li>
+<li>ProcDMXGetScreenCount()
+: <a class="el" href="dmx_8c.html#a8af993133b301bc15bd1773d4877aab2">dmx.c</a>
+</li>
+<li>ProcDMXGetWindowAttributes()
+: <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">dmx.c</a>
+</li>
+<li>ProcDMXQueryVersion()
+: <a class="el" href="dmx_8c.html#a4e75f7427a3c89b10c98c0fcbde1d736">dmx.c</a>
+</li>
+<li>ProcDMXRemoveInput()
+: <a class="el" href="dmx_8c.html#a903af5587586cb2c047d44e2304c008f">dmx.c</a>
+</li>
+<li>ProcDMXRemoveScreen()
+: <a class="el" href="dmx_8c.html#a2271d588de5ed20d6924f04ce699342f">dmx.c</a>
+</li>
+<li>ProcDMXSync()
+: <a class="el" href="dmx_8c.html#add80dfbbe612e58c424f04f668e1de9e">dmx.c</a>
+</li>
+<li>ProcessInputEvents()
+: <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">dmxinput.c</a>
+</li>
+<li>ps2LinuxButton()
+: <a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxCreatePrivate()
+: <a class="el" href="lnx-ps2_8c.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxCtrl()
+: <a class="el" href="lnx-ps2_8h.html#a2c7781cb76c926b5a9648e05bc3a1b59">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxDestroyPrivate()
+: <a class="el" href="lnx-ps2_8h.html#af67bcdd060164de0c3a0d3e69c8483ac">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#af67bcdd060164de0c3a0d3e69c8483ac">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxGetInfo()
+: <a class="el" href="lnx-ps2_8c.html#ab914e24acbae5ce49174e06842ac684b">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxGetMap()
+: <a class="el" href="lnx-ps2_8c.html#a0f65c382ff39d64cd881a919eb566964">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxInit()
+: <a class="el" href="lnx-ps2_8c.html#aa0f0b690de9e5c3a958909000c7f787d">lnx-ps2.c</a>
+, <a class="el" href="lnx-ps2_8h.html#aa0f0b690de9e5c3a958909000c7f787d">lnx-ps2.h</a>
+</li>
+<li>ps2LinuxOff()
+: <a class="el" href="lnx-ps2_8h.html#af955e539213ec85f5b6d5d7b38dae89e">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#af955e539213ec85f5b6d5d7b38dae89e">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxOn()
+: <a class="el" href="lnx-ps2_8h.html#aaf9aaca79e044d91f072901ad3be1863">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#aaf9aaca79e044d91f072901ad3be1863">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxRead()
+: <a class="el" href="lnx-ps2_8h.html#a0cde2ad6c3aad19be778fc97bb7286a7">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxReadBytes()
+: <a class="el" href="lnx-ps2_8c.html#ad806e9804e49f47d75f252ab0b14c075">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxVTPostSwitch()
+: <a class="el" href="lnx-ps2_8h.html#a11a5bfc4866f86dfe3ea5acb788c4afe">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#a11a5bfc4866f86dfe3ea5acb788c4afe">lnx-ps2.c</a>
+</li>
+<li>ps2LinuxVTPreSwitch()
+: <a class="el" href="lnx-ps2_8h.html#a3a9ac063b46a191b38d92881367d74d4">lnx-ps2.h</a>
+, <a class="el" href="lnx-ps2_8c.html#a3a9ac063b46a191b38d92881367d74d4">lnx-ps2.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x73.html b/hw/dmx/doc/html/globals_func_0x73.html
new file mode 100644
index 0000000..47a960b
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x73.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li class="current"><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>scalex()
+: <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">dmxconsole.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a3bc158b6dffde7c1880143b39a5cdd45">xdmxconfig.c</a>
+</li>
+<li>scaley()
+: <a class="el" href="xdmxconfig_8c.html#aa2d08afe50deaa3274b6b1006795cf30">xdmxconfig.c</a>
+, <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">dmxconsole.c</a>
+</li>
+<li>SetDeviceMode()
+: <a class="el" href="dmxxinput_8c.html#aa4b20aa4795f3a94339e1748d5a4d1fb">dmxxinput.c</a>
+</li>
+<li>SetDeviceValuators()
+: <a class="el" href="dmxxinput_8c.html#a1175b57fa9f8cba2b233ffb9e81ed066">dmxxinput.c</a>
+</li>
+<li>SProcDMXAddInput()
+: <a class="el" href="dmx_8c.html#ab430383da03ac7476c5c59fd52c25d07">dmx.c</a>
+</li>
+<li>SProcDMXAddScreen()
+: <a class="el" href="dmx_8c.html#ab1dd1e3ff17ee8ea90bf41e15366edfd">dmx.c</a>
+</li>
+<li>SProcDMXChangeDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a6c6656e72d8e4ecf7879e1b5981f4ba7">dmx.c</a>
+</li>
+<li>SProcDMXChangeScreensAttributes()
+: <a class="el" href="dmx_8c.html#ab0857e8373d5f2824e40b99399e53a52">dmx.c</a>
+</li>
+<li>SProcDMXDispatch()
+: <a class="el" href="dmx_8c.html#afc36d15cef602b7f993df1d80b934983">dmx.c</a>
+</li>
+<li>SProcDMXForceWindowCreation()
+: <a class="el" href="dmx_8c.html#ac6ee42ca6657daec84d10aaac5e07ac2">dmx.c</a>
+</li>
+<li>SProcDMXGetDesktopAttributes()
+: <a class="el" href="dmx_8c.html#a1e068cbd512e5db1582004f3374247dc">dmx.c</a>
+</li>
+<li>SProcDMXGetInputAttributes()
+: <a class="el" href="dmx_8c.html#ae9d3545f7127fd2762839e66a1dbf623">dmx.c</a>
+</li>
+<li>SProcDMXGetInputCount()
+: <a class="el" href="dmx_8c.html#af7394899aba8296b835babef42773422">dmx.c</a>
+</li>
+<li>SProcDMXGetScreenAttributes()
+: <a class="el" href="dmx_8c.html#aaf773356a5c4ea879a7ae2c414955a4e">dmx.c</a>
+</li>
+<li>SProcDMXGetScreenCount()
+: <a class="el" href="dmx_8c.html#ab3ba38ff5f0a57f0f01313e6b0894eea">dmx.c</a>
+</li>
+<li>SProcDMXGetWindowAttributes()
+: <a class="el" href="dmx_8c.html#aa1e51336c38f55cfd52955ea633e6595">dmx.c</a>
+</li>
+<li>SProcDMXQueryVersion()
+: <a class="el" href="dmx_8c.html#a40d9e691d399f0ac5d79b70de13cb725">dmx.c</a>
+</li>
+<li>SProcDMXRemoveInput()
+: <a class="el" href="dmx_8c.html#ae2f98f4b6a0e8fed67460294b6b6978d">dmx.c</a>
+</li>
+<li>SProcDMXRemoveScreen()
+: <a class="el" href="dmx_8c.html#a71bba4cfda826375e2b491a24fbea193">dmx.c</a>
+</li>
+<li>SProcDMXSync()
+: <a class="el" href="dmx_8c.html#a9cf92503721755b9945d9ae242203e4f">dmx.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x75.html b/hw/dmx/doc/html/globals_func_0x75.html
new file mode 100644
index 0000000..1923105
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x75.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li class="current"><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>unscalex()
+: <a class="el" href="dmxconsole_8c.html#a8d0da535d8543184dd5c418d123806ec">dmxconsole.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a4a62777857ee3d909f62c658676d616f">xdmxconfig.c</a>
+</li>
+<li>unscaley()
+: <a class="el" href="xdmxconfig_8c.html#a96116525a27fadda21e883223f4b35b7">xdmxconfig.c</a>
+, <a class="el" href="dmxconsole_8c.html#abbad6ed54f9edf3c3a92321eb2d6b424">dmxconsole.c</a>
+</li>
+<li>usbCreatePrivate()
+: <a class="el" href="usb-common_8c.html#a580f9f4ac56071b925cbf63d8b9dc706">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#a580f9f4ac56071b925cbf63d8b9dc706">usb-common.h</a>
+</li>
+<li>usbDestroyPrivate()
+: <a class="el" href="usb-common_8h.html#a0eca0051ed4a3a117d504d6a82c65313">usb-common.h</a>
+, <a class="el" href="usb-common_8c.html#a0eca0051ed4a3a117d504d6a82c65313">usb-common.c</a>
+</li>
+<li>usbInit()
+: <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usb-common.h</a>
+</li>
+<li>usbOff()
+: <a class="el" href="usb-common_8c.html#aa86d87cabbc0971c51452970b7dc879f">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#aa86d87cabbc0971c51452970b7dc879f">usb-common.h</a>
+</li>
+<li>usbPrint()
+: <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usb-common.c</a>
+</li>
+<li>usbRead()
+: <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usb-common.c</a>
+, <a class="el" href="usb-common_8h.html#aea8c9cef438c8851ef7f47d7167152cb">usb-common.h</a>
+</li>
+<li>usec()
+: <a class="el" href="dmxstat_8c.html#a1a534cc2274afee02c883ac10ea9435f">dmxstat.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x76.html b/hw/dmx/doc/html/globals_func_0x76.html
new file mode 100644
index 0000000..1e7d3fa
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x76.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li class="current"><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>VFatalError()
+: <a class="el" href="dmxlog_8c.html#af1c88ef4a6df132f586cf7605ca8192a">dmxlog.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x78.html b/hw/dmx/doc/html/globals_func_0x78.html
new file mode 100644
index 0000000..10110e7
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x78.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li class="current"><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>XCheckNotMaskEvent()
+: <a class="el" href="ChkNotMaskEv_8c.html#a492aa70992c986ae525318a29678c4bb">ChkNotMaskEv.c</a>
+, <a class="el" href="ChkNotMaskEv_8h.html#a492aa70992c986ae525318a29678c4bb">ChkNotMaskEv.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_func_0x79.html b/hw/dmx/doc/html/globals_func_0x79.html
new file mode 100644
index 0000000..3ba4605
--- /dev/null
+++ b/hw/dmx/doc/html/globals_func_0x79.html
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="globals_func.html#index__"><span>_</span></a></li>
+ <li><a href="globals_func_0x61.html#index_a"><span>a</span></a></li>
+ <li><a href="globals_func_0x63.html#index_c"><span>c</span></a></li>
+ <li><a href="globals_func_0x64.html#index_d"><span>d</span></a></li>
+ <li><a href="globals_func_0x65.html#index_e"><span>e</span></a></li>
+ <li><a href="globals_func_0x67.html#index_g"><span>g</span></a></li>
+ <li><a href="globals_func_0x69.html#index_i"><span>i</span></a></li>
+ <li><a href="globals_func_0x6b.html#index_k"><span>k</span></a></li>
+ <li><a href="globals_func_0x6c.html#index_l"><span>l</span></a></li>
+ <li><a href="globals_func_0x6d.html#index_m"><span>m</span></a></li>
+ <li><a href="globals_func_0x6e.html#index_n"><span>n</span></a></li>
+ <li><a href="globals_func_0x6f.html#index_o"><span>o</span></a></li>
+ <li><a href="globals_func_0x70.html#index_p"><span>p</span></a></li>
+ <li><a href="globals_func_0x73.html#index_s"><span>s</span></a></li>
+ <li><a href="globals_func_0x75.html#index_u"><span>u</span></a></li>
+ <li><a href="globals_func_0x76.html#index_v"><span>v</span></a></li>
+ <li><a href="globals_func_0x78.html#index_x"><span>x</span></a></li>
+ <li class="current"><a href="globals_func_0x79.html#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>yyerror()
+: <a class="el" href="dmxparse_8h.html#a87640c870f7c3d90c830a68620e48de4">dmxparse.h</a>
+</li>
+<li>yylex()
+: <a class="el" href="dmxparse_8h.html#a9a7bd1b3d14701eb97c03f3ef34deff1">dmxparse.h</a>
+</li>
+<li>yyparse()
+: <a class="el" href="dmxtodmx_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">dmxtodmx.c</a>
+, <a class="el" href="dmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">dmxconfig.c</a>
+, <a class="el" href="xdmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">xdmxconfig.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_type.html b/hw/dmx/doc/html/globals_type.html
new file mode 100644
index 0000000..d1b24c8
--- /dev/null
+++ b/hw/dmx/doc/html/globals_type.html
@@ -0,0 +1,358 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_u"><span>u</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dmxArg
+: <a class="el" href="dmxarg_8h.html#a7f310ec1f9d20311533a2a142a0b92b8">dmxarg.h</a>
+</li>
+<li>dmxCheckSpecialProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxinputinit.h</a>
+</li>
+<li>dmxCollectEventsProcPtr
+: <a class="el" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxinputinit.h</a>
+</li>
+<li>dmxColormapPrivPtr
+: <a class="el" href="dmxcmap_8h.html#aec71fbb492f3a3ce7e6b2b083a8b0978">dmxcmap.h</a>
+</li>
+<li>dmxColormapPrivRec
+: <a class="el" href="dmxcmap_8h.html#a9b220494b52f982d4dcfa437d34d628b">dmxcmap.h</a>
+</li>
+<li>DMXConfigCmd
+: <a class="el" href="dmxconfig_8c.html#ab9c66f76ee551600df2b3fc9ce6f4d33">dmxconfig.c</a>
+</li>
+<li>DMXConfigCmdPtr
+: <a class="el" href="dmxconfig_8c.html#a5a96d2434004ba9bddaf2b62b5ca9f39">dmxconfig.c</a>
+</li>
+<li>DMXConfigComment
+: <a class="el" href="dmxparse_8h.html#ac53f3a487c56877ce84e621b93c75e63">dmxparse.h</a>
+</li>
+<li>DMXConfigCommentPtr
+: <a class="el" href="dmxparse_8h.html#a3eaf8193499e4474fa2f2c8363ff9558">dmxparse.h</a>
+</li>
+<li>DMXConfigDisplay
+: <a class="el" href="dmxparse_8h.html#a31b5941021484d5b5ae6c905dca6f35a">dmxparse.h</a>
+</li>
+<li>DMXConfigDisplayPtr
+: <a class="el" href="dmxparse_8h.html#a77569967e2f40e3e3f05d8e49a4e81f7">dmxparse.h</a>
+</li>
+<li>DMXConfigEntry
+: <a class="el" href="dmxparse_8h.html#a8cb4fa1fa814f09a1cad1712894a8207">dmxparse.h</a>
+</li>
+<li>DMXConfigEntryPtr
+: <a class="el" href="dmxparse_8h.html#ab46cf3c98a49f9dbf90120e8afd65e81">dmxparse.h</a>
+</li>
+<li>DMXConfigFullDim
+: <a class="el" href="dmxparse_8h.html#a8ad44f7990920ef85b4bdb51c98be380">dmxparse.h</a>
+</li>
+<li>DMXConfigFullDimPtr
+: <a class="el" href="dmxparse_8h.html#af1018551e3cc9ec6836d0d605216e611">dmxparse.h</a>
+</li>
+<li>DMXConfigList
+: <a class="el" href="dmxconfig_8c.html#a3dfd693067cad9597343923410b0372e">dmxconfig.c</a>
+</li>
+<li>DMXConfigListPtr
+: <a class="el" href="dmxconfig_8c.html#a1e7e0db8e8b8c4ea8068d57243bb94b9">dmxconfig.c</a>
+</li>
+<li>DMXConfigNumber
+: <a class="el" href="dmxparse_8h.html#a09ee4bfd4fb105b8d12a3debde0bedd9">dmxparse.h</a>
+</li>
+<li>DMXConfigNumberPtr
+: <a class="el" href="dmxparse_8h.html#a0595f026bf3e261dda1479c3c3664ed7">dmxparse.h</a>
+</li>
+<li>DMXConfigOption
+: <a class="el" href="dmxparse_8h.html#a9d47b44af4d217c2e6da2d4678611376">dmxparse.h</a>
+</li>
+<li>DMXConfigOptionPtr
+: <a class="el" href="dmxparse_8h.html#a8671db1fd961dbb11df3f83d1fab8227">dmxparse.h</a>
+</li>
+<li>DMXConfigPair
+: <a class="el" href="dmxparse_8h.html#a67fb30fb9b3f930220aeea0e7258e5d1">dmxparse.h</a>
+</li>
+<li>DMXConfigPairPtr
+: <a class="el" href="dmxparse_8h.html#a311865c935a9669ca901705d5b28db02">dmxparse.h</a>
+</li>
+<li>DMXConfigParam
+: <a class="el" href="dmxparse_8h.html#a5f7052d0d09e5bd5415f5fb9924c799e">dmxparse.h</a>
+</li>
+<li>DMXConfigParamPtr
+: <a class="el" href="dmxparse_8h.html#a5af8bd2f2624df3b2fa6e36560f2b0a3">dmxparse.h</a>
+</li>
+<li>DMXConfigPartDim
+: <a class="el" href="dmxparse_8h.html#a0040a762f091a14803e78efa90c2b3aa">dmxparse.h</a>
+</li>
+<li>DMXConfigPartDimPtr
+: <a class="el" href="dmxparse_8h.html#a62dde6c86a1db2e243c3d5804770ac98">dmxparse.h</a>
+</li>
+<li>DMXConfigString
+: <a class="el" href="dmxparse_8h.html#a997735bb2e5362d670bd0eaf006e1336">dmxparse.h</a>
+</li>
+<li>DMXConfigStringPtr
+: <a class="el" href="dmxparse_8h.html#a163965084bb791376852afc3c8e2a3cd">dmxparse.h</a>
+</li>
+<li>DMXConfigSub
+: <a class="el" href="dmxparse_8h.html#a2eeff7f31b82f02916abfddeac619406">dmxparse.h</a>
+</li>
+<li>DMXConfigSubPtr
+: <a class="el" href="dmxparse_8h.html#aaeef2cb474e931950e496db8005654ff">dmxparse.h</a>
+</li>
+<li>DMXConfigToken
+: <a class="el" href="dmxparse_8h.html#aa553d8e6837818d31707e48941f2c755">dmxparse.h</a>
+</li>
+<li>DMXConfigTokenPtr
+: <a class="el" href="dmxparse_8h.html#aa54f2be8a82814626992b0e2c2fd76ab">dmxparse.h</a>
+</li>
+<li>DMXConfigVirtual
+: <a class="el" href="dmxparse_8h.html#ac88a2d841fca93f81e6412228570134d">dmxparse.h</a>
+</li>
+<li>DMXConfigVirtualPtr
+: <a class="el" href="dmxparse_8h.html#a7df6222bb31e29b3b6d98cc9d765c70f">dmxparse.h</a>
+</li>
+<li>DMXConfigWall
+: <a class="el" href="dmxparse_8h.html#a09a530a073d8e23f78a3fdd3cdaa16c6">dmxparse.h</a>
+</li>
+<li>DMXConfigWallPtr
+: <a class="el" href="dmxparse_8h.html#a176e5216b55fbc5ed7adb856501826a0">dmxparse.h</a>
+</li>
+<li>dmxCreatePrivateProcPtr
+: <a class="el" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxinputinit.h</a>
+</li>
+<li>dmxCursorPrivPtr
+: <a class="el" href="dmxcursor_8h.html#ae93d2b5a8714fcf2714f03b6cdeadc07">dmxcursor.h</a>
+</li>
+<li>dmxCursorPrivRec
+: <a class="el" href="dmxcursor_8h.html#a78a877b8bee68809063112fb5286e2db">dmxcursor.h</a>
+</li>
+<li>DMXDesktopAttributesPtr
+: <a class="el" href="dmxextension_8h.html#a96ae1d459f8d65cbc2204f324cbe8b72">dmxextension.h</a>
+</li>
+<li>dmxDestroyPrivateProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxinputinit.h</a>
+</li>
+<li>dmxEnqueueProcPtr
+: <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxinputinit.h</a>
+</li>
+<li>DMXEventMap
+: <a class="el" href="dmxinputinit_8h.html#a8143582d36de7cbdda4cca97cc4fb4f8">dmxinputinit.h</a>
+</li>
+<li>dmxFontPrivPtr
+: <a class="el" href="dmxfont_8h.html#a79b4c89f92d4b1c88343b39bc681ef2a">dmxfont.h</a>
+</li>
+<li>dmxFontPrivRec
+: <a class="el" href="dmxfont_8h.html#a06305f429e61106b149a71e28db42541">dmxfont.h</a>
+</li>
+<li>dmxFunctionsProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxinputinit.h</a>
+</li>
+<li>dmxGCPrivPtr
+: <a class="el" href="dmxgc_8h.html#a234db372824505de585d75173374f566">dmxgc.h</a>
+</li>
+<li>dmxGCPrivRec
+: <a class="el" href="dmxgc_8h.html#a2d7a664f045bba899390f66832c1ccf8">dmxgc.h</a>
+</li>
+<li>dmxGetInfoProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxinputinit.h</a>
+</li>
+<li>dmxGlyphPrivPtr
+: <a class="el" href="dmxpict_8h.html#a269ea3cc32b511169336925123d1558d">dmxpict.h</a>
+</li>
+<li>dmxGlyphPrivRec
+: <a class="el" href="dmxpict_8h.html#a9861086a35576e59fe0f9306c4e2588d">dmxpict.h</a>
+</li>
+<li>dmxInitProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxinputinit.h</a>
+</li>
+<li>DMXInputAttributesPtr
+: <a class="el" href="dmxextension_8h.html#af665732621edf76f4bd259d14eb99164">dmxextension.h</a>
+</li>
+<li>DMXInputInfo
+: <a class="el" href="dmx_8h.html#a175903acd588f450ac6325e17355f8ca">dmx.h</a>
+</li>
+<li>dmxKBBellProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxinputinit.h</a>
+</li>
+<li>dmxKBCtrlProcPtr
+: <a class="el" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxinputinit.h</a>
+</li>
+<li>dmxLateReInitProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInitInfo
+: <a class="el" href="dmxinputinit_8h.html#a3c9d38c22c8aff8456167d8990cbded0">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInitInfoPtr
+: <a class="el" href="dmxinputinit_8h.html#a6f7eba570368d4ee72420f0cdb70f5c5">dmxinputinit.h</a>
+</li>
+<li>DMXLocalInputInfoPtr
+: <a class="el" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">dmxinput.h</a>
+</li>
+<li>DMXLocalInputInfoRec
+: <a class="el" href="dmxinputinit_8h.html#a18d50c3ccca9422952b75ceed4e26e8e">dmxinputinit.h</a>
+</li>
+<li>dmxMCtrlProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxinputinit.h</a>
+</li>
+<li>dmxMotionProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxinputinit.h</a>
+</li>
+<li>dmxOffProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxinputinit.h</a>
+</li>
+<li>dmxOnProcPtr
+: <a class="el" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxinputinit.h</a>
+</li>
+<li>dmxPictPrivPtr
+: <a class="el" href="dmxpict_8h.html#af8d6ee7f8278532ad8b810f448d1cca3">dmxpict.h</a>
+</li>
+<li>dmxPictPrivRec
+: <a class="el" href="dmxpict_8h.html#ab9d490e5079b84da8b60bf0aadd4b10e">dmxpict.h</a>
+</li>
+<li>dmxPixPrivPtr
+: <a class="el" href="dmxpixmap_8h.html#a33d23370f4af28113332cd6112de22f1">dmxpixmap.h</a>
+</li>
+<li>dmxPixPrivRec
+: <a class="el" href="dmxpixmap_8h.html#af881d895a7a1cac8c226aa3aff5678c7">dmxpixmap.h</a>
+</li>
+<li>dmxProcessInputProcPtr
+: <a class="el" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxinputinit.h</a>
+</li>
+<li>dmxReInitProcPtr
+: <a class="el" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxinputinit.h</a>
+</li>
+<li>DMXScreenAttributesPtr
+: <a class="el" href="dmxextension_8h.html#a0e47929486368da1a7513c7d2305f24f">dmxextension.h</a>
+</li>
+<li>DMXScreenInfo
+: <a class="el" href="dmx_8h.html#a093c967353474b26640284f89d78e204">dmx.h</a>
+</li>
+<li>DMXStatAvg
+: <a class="el" href="dmxstat_8c.html#a75a8942c042ee0a2c387e61a28a59b94">dmxstat.c</a>
+</li>
+<li>DMXStatInfo
+: <a class="el" href="dmx_8h.html#aac7b710f9533f3b984574f1403488673">dmx.h</a>
+</li>
+<li>dmxUpdateInfoProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxinputinit.h</a>
+</li>
+<li>dmxUpdatePositionProcPtr
+: <a class="el" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxinputinit.h</a>
+</li>
+<li>dmxVTPostSwitchProcPtr
+: <a class="el" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxinputinit.h</a>
+</li>
+<li>dmxVTPreSwitchProcPtr
+: <a class="el" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxinputinit.h</a>
+</li>
+<li>dmxVTSwitchProcPtr
+: <a class="el" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxinputinit.h</a>
+</li>
+<li>dmxVTSwitchReturnProcPtr
+: <a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxinputinit.h</a>
+</li>
+<li>DMXWindowAttributesPtr
+: <a class="el" href="dmxextension_8h.html#ad22f823435ccab00deb798c2e080fbe1">dmxextension.h</a>
+</li>
+<li>dmxWinPrivPtr
+: <a class="el" href="dmxwindow_8h.html#a3024ab3c0220000ce6ed1e93fd4880cc">dmxwindow.h</a>
+</li>
+<li>dmxWinPrivRec
+: <a class="el" href="dmxwindow_8h.html#a5f9a6e44e1c8fbd89cf1d50b50fee122">dmxwindow.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>myPrivate
+: <a class="el" href="dmxbackend_8c.html#a25692217bddf2b6c089525b325afccf1">dmxbackend.c</a>
+, <a class="el" href="usb-private_8h.html#a25692217bddf2b6c089525b325afccf1">usb-private.h</a>
+, <a class="el" href="lnx-ps2_8c.html#a25692217bddf2b6c089525b325afccf1">lnx-ps2.c</a>
+, <a class="el" href="lnx-ms_8c.html#a25692217bddf2b6c089525b325afccf1">lnx-ms.c</a>
+, <a class="el" href="lnx-keyboard_8c.html#a25692217bddf2b6c089525b325afccf1">lnx-keyboard.c</a>
+, <a class="el" href="dmxconsole_8c.html#a25692217bddf2b6c089525b325afccf1">dmxconsole.c</a>
+, <a class="el" href="dmxcommon_8c.html#a25692217bddf2b6c089525b325afccf1">dmxcommon.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>ProcessInputEventsProc
+: <a class="el" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">dmxinput.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_u"></a>- u -</h3><ul>
+<li>UpdateWindowInfoProc
+: <a class="el" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">dmxinput.h</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/globals_vars.html b/hw/dmx/doc/html/globals_vars.html
new file mode 100644
index 0000000..9c3c46b
--- /dev/null
+++ b/hw/dmx/doc/html/globals_vars.html
@@ -0,0 +1,609 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li class="current"><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow3" class="tabs2">
+ <ul class="tablist">
+ <li><a href="globals.html"><span>All</span></a></li>
+ <li><a href="globals_func.html"><span>Functions</span></a></li>
+ <li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
+ <li><a href="globals_type.html"><span>Typedefs</span></a></li>
+ <li><a href="globals_enum.html"><span>Enumerations</span></a></li>
+ <li><a href="globals_eval.html"><span>Enumerator</span></a></li>
+ <li><a href="globals_defs.html"><span>Defines</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow4" class="tabs3">
+ <ul class="tablist">
+ <li><a href="#index__"><span>_</span></a></li>
+ <li><a href="#index_a"><span>a</span></a></li>
+ <li><a href="#index_b"><span>b</span></a></li>
+ <li><a href="#index_c"><span>c</span></a></li>
+ <li><a href="#index_d"><span>d</span></a></li>
+ <li><a href="#index_e"><span>e</span></a></li>
+ <li><a href="#index_i"><span>i</span></a></li>
+ <li><a href="#index_l"><span>l</span></a></li>
+ <li><a href="#index_m"><span>m</span></a></li>
+ <li><a href="#index_n"><span>n</span></a></li>
+ <li><a href="#index_o"><span>o</span></a></li>
+ <li><a href="#index_p"><span>p</span></a></li>
+ <li><a href="#index_q"><span>q</span></a></li>
+ <li><a href="#index_r"><span>r</span></a></li>
+ <li><a href="#index_s"><span>s</span></a></li>
+ <li><a href="#index_y"><span>y</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('globals.html','');
+</script>
+<div id="doc-content">
+<div class="contents">
+&#160;
+
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_Xevent_to_mask
+: <a class="el" href="ChkNotMaskEv_8c.html#a653c12c824c0297b32b16e69fdc6b1a5">ChkNotMaskEv.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
+<li>aboutpopup
+: <a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">xdmxconfig.c</a>
+</li>
+<li>at2lnx
+: <a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">lnx-keyboard.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>buttonpopup
+: <a class="el" href="xdmxconfig_8c.html#acad0e44da558823cb3c1d09d76652bb0">xdmxconfig.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>canvas
+: <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">xdmxconfig.c</a>
+</li>
+<li>cdimbox
+: <a class="el" href="xdmxconfig_8c.html#ade389d0f04ea208e93527bb1d8bd8a1c">xdmxconfig.c</a>
+</li>
+<li>ChangeDeviceNotify
+: <a class="el" href="dmxclient_8h.html#a9cdf1d1f5958572f162e6c5d5c19d4a4">dmxclient.h</a>
+</li>
+<li>cnamebox
+: <a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">xdmxconfig.c</a>
+</li>
+<li>connBlockScreenStart
+: <a class="el" href="dmxcb_8c.html#a21fd58c4d3a6b5bba84476c314a6d657">dmxcb.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>dcbutton
+: <a class="el" href="xdmxconfig_8c.html#aa702bb96d419e4b93256107f61f54b96">xdmxconfig.c</a>
+</li>
+<li>ddbutton
+: <a class="el" href="xdmxconfig_8c.html#a43d831fb3dc9d33f8f6732e9407a3fa6">xdmxconfig.c</a>
+</li>
+<li>defaultFont
+: <a class="el" href="dmxextension_8c.html#a7decb269dc8674114f44964a88a68063">dmxextension.c</a>
+</li>
+<li>DeviceFocusIn
+: <a class="el" href="dmxclient_8h.html#a83d9bb79d3ddadf36469794bf2563482">dmxclient.h</a>
+</li>
+<li>DeviceFocusOut
+: <a class="el" href="dmxclient_8h.html#a5da5340a54a4f158c507ee002c4b3824">dmxclient.h</a>
+</li>
+<li>DeviceMappingNotify
+: <a class="el" href="dmxclient_8h.html#a232c73ad30bfc3116842076bd6fc1151">dmxclient.h</a>
+</li>
+<li>DeviceMotionNotify
+: <a class="el" href="dmxclient_8h.html#a989f862a42e735c00e8c23a239920772">dmxclient.h</a>
+</li>
+<li>DeviceStateNotify
+: <a class="el" href="dmxclient_8h.html#a7212800e5b127f95425fb860bb2dcbdf">dmxclient.h</a>
+</li>
+<li>DeviceValuator
+: <a class="el" href="dmxclient_8h.html#a7008cfdcc3748585492b12a9658278b9">dmxclient.h</a>
+</li>
+<li>dimbox
+: <a class="el" href="xdmxconfig_8c.html#ad5d5209613aeed1c3d40068bd107bf56">xdmxconfig.c</a>
+</li>
+<li>display
+: <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">dmxprop.c</a>
+</li>
+<li>dmxAddRemoveScreens
+: <a class="el" href="dmx_8h.html#a8d53c22ed93cbef2684016d3c7638671">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a8d53c22ed93cbef2684016d3c7638671">dmxinit.c</a>
+</li>
+<li>DMXBackendKbd
+: <a class="el" href="dmxinputinit_8c.html#a4ad947489cdc8cae1835dbd5604e0cde">dmxinputinit.c</a>
+</li>
+<li>DMXBackendMou
+: <a class="el" href="dmxinputinit_8c.html#a420b4847b9c9f9992e042754c9a5d9c9">dmxinputinit.c</a>
+</li>
+<li>DMXCode
+: <a class="el" href="dmx_8c.html#a358d781b37da0527044c0cc8213097d2">dmx.c</a>
+</li>
+<li>dmxColormapPrivateKeyRec
+: <a class="el" href="dmx_8h.html#af033a68c176abdaf96f094922d15d359">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#af033a68c176abdaf96f094922d15d359">dmxscrinit.c</a>
+</li>
+<li>dmxConfigCmd
+: <a class="el" href="dmxconfig_8c.html#a9d2aa7477b1176f8ee206f47e03c29da">dmxconfig.c</a>
+</li>
+<li>dmxConfigCurrent
+: <a class="el" href="xdmxconfig_8c.html#a7d0525177e2bcd01130c2d88219eaea7">xdmxconfig.c</a>
+</li>
+<li>dmxConfigCurrentDisplay
+: <a class="el" href="xdmxconfig_8c.html#ae7d68549ff5ad989a28258671bf1a007">xdmxconfig.c</a>
+</li>
+<li>dmxConfigEntry
+: <a class="el" href="dmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxconfig.c</a>
+, <a class="el" href="dmxparse_8h.html#af1733e9f6f810a355a158f16f8bc7899">dmxparse.h</a>
+, <a class="el" href="xdmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">xdmxconfig.c</a>
+</li>
+<li>dmxConfigFilename
+: <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGC
+: <a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGCHL
+: <a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGCInit
+: <a class="el" href="xdmxconfig_8c.html#a759c2efde7d196076ce7af7e02c720d3">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGCRev
+: <a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbed
+: <a class="el" href="xdmxconfig_8c.html#a9d4629bf6b66304ec1dae9aefcb8e690">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbedFine
+: <a class="el" href="xdmxconfig_8c.html#a71a96fb97110e965bceec5e6a5e8c082">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbedX
+: <a class="el" href="xdmxconfig_8c.html#a68f7d459bce6cc9feb1f45d161080379">xdmxconfig.c</a>
+</li>
+<li>dmxConfigGrabbedY
+: <a class="el" href="xdmxconfig_8c.html#afd652683b9230abcc541aba117ec13fe">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNewDisplay
+: <a class="el" href="xdmxconfig_8c.html#a5b85ce4267bf51937e8f8873fcd0f898">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNewVirtual
+: <a class="el" href="xdmxconfig_8c.html#ae231cf2b287cec0f4b9dce3f5bcb4870">xdmxconfig.c</a>
+</li>
+<li>dmxConfigNotSaved
+: <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">xdmxconfig.c</a>
+</li>
+<li>dmxConfigScaleX
+: <a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">xdmxconfig.c</a>
+</li>
+<li>dmxConfigScaleY
+: <a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">xdmxconfig.c</a>
+</li>
+<li>dmxConfigState
+: <a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWallHeight
+: <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWallWidth
+: <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWidgetHeight
+: <a class="el" href="xdmxconfig_8c.html#ae8e507a8ffea650807baebab3b720027">xdmxconfig.c</a>
+</li>
+<li>dmxConfigWidgetWidth
+: <a class="el" href="xdmxconfig_8c.html#ad159f52770b5cc4224709338a4fd3f8c">xdmxconfig.c</a>
+</li>
+<li>DMXConsoleKbd
+: <a class="el" href="dmxinputinit_8c.html#a3c213f84d74e74751787f916f509581f">dmxinputinit.c</a>
+</li>
+<li>DMXConsoleMou
+: <a class="el" href="dmxinputinit_8c.html#a3a58ba39e104b23698ca8ef19789caf3">dmxinputinit.c</a>
+</li>
+<li>dmxCurrentLogLevel
+: <a class="el" href="dmxlog_8c.html#adec7b3dba0fe95f6ff8c96575cbd29b1">dmxlog.c</a>
+</li>
+<li>dmxCursorDoMultiCursors
+: <a class="el" href="dmxcursor_8c.html#a4d792c0cb9ce0c21787d3cd88d774fa6">dmxcursor.c</a>
+</li>
+<li>dmxCursorGeneration
+: <a class="el" href="dmxscrinit_8c.html#a1bed5fde9231f820a1aa25228649575b">dmxscrinit.c</a>
+</li>
+<li>dmxDepth
+: <a class="el" href="dmx_8h.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#ad2d0e8e1a260d9fdb7ea3a980d5fce8b">dmxinit.c</a>
+</li>
+<li>dmxDisplaysFromCommandLine
+: <a class="el" href="dmxconfig_8c.html#a574577536ff981870613b67021f61930">dmxconfig.c</a>
+</li>
+<li>DMXDummyKbd
+: <a class="el" href="dmxinputinit_8c.html#af0b33ec9267eea9d58f6792e33e02295">dmxinputinit.c</a>
+</li>
+<li>DMXDummyMou
+: <a class="el" href="dmxinputinit_8c.html#a3041e526ae9e56b4a2d0a99f030af71f">dmxinputinit.c</a>
+</li>
+<li>dmxErrorOccurred
+: <a class="el" href="dmx_8h.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a9a817996c23e8669c5d9a8dc25e8cb51">dmxinit.c</a>
+</li>
+<li>dmxFdCount
+: <a class="el" href="dmxsigio_8c.html#ac926cb5aa8d124192f381a9e05d49cb8">dmxsigio.c</a>
+</li>
+<li>dmxFontLastError
+: <a class="el" href="dmxfont_8c.html#a9c9ed2980702f901796479788b6b8f66">dmxfont.c</a>
+</li>
+<li>dmxFontPath
+: <a class="el" href="dmx_8h.html#a10581b0cb51e730e26cbc08913a76c5f">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a10581b0cb51e730e26cbc08913a76c5f">dmxinit.c</a>
+</li>
+<li>dmxFontPrivateIndex
+: <a class="el" href="dmx_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmx.h</a>
+, <a class="el" href="dmxfont_8h.html#a4e2a5b2ae34073156aef6b406552657f">dmxfont.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a4e2a5b2ae34073156aef6b406552657f">dmxscrinit.c</a>
+</li>
+<li>dmxGCFuncs
+: <a class="el" href="dmxgc_8c.html#a3c6b012a9ca843b7f1083a151030c400">dmxgc.c</a>
+</li>
+<li>dmxGCOps
+: <a class="el" href="dmxgc_8c.html#a4688e83670c13b303cba5309eaf23424">dmxgc.c</a>
+</li>
+<li>dmxGCPrivateKeyRec
+: <a class="el" href="dmx_8h.html#a9aef85f2d27fb4a444c0a24ff953db57">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a9aef85f2d27fb4a444c0a24ff953db57">dmxscrinit.c</a>
+</li>
+<li>dmxGeneration
+: <a class="el" href="dmxscrinit_8c.html#a4f7aaf448bb3a6c12bccf07600bb1d52">dmxscrinit.c</a>
+</li>
+<li>dmxGlobalHeight
+: <a class="el" href="dmxcb_8c.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a7c8270dd4b1ef6cd953a30cdcae548de">dmxcb.h</a>
+</li>
+<li>dmxGlobalInvalid
+: <a class="el" href="dmxevents_8c.html#a1ae34b930e721372a403fbbe2111a221">dmxevents.c</a>
+</li>
+<li>dmxGlobalWidth
+: <a class="el" href="dmxcb_8c.html#a738220b78d864fe9317683a1ff425c75">dmxcb.c</a>
+, <a class="el" href="dmxcb_8h.html#a738220b78d864fe9317683a1ff425c75">dmxcb.h</a>
+</li>
+<li>dmxGlobalX
+: <a class="el" href="dmxevents_8c.html#a6f6d88e8d30622451b8e9fe4ba22c811">dmxevents.c</a>
+</li>
+<li>dmxGlobalY
+: <a class="el" href="dmxevents_8c.html#abbf8898981b5b2ac573e68e1a9386f08">dmxevents.c</a>
+</li>
+<li>dmxGLXProxy
+: <a class="el" href="dmxinit_8c.html#ae0253d9b4aa523bbdee8aaafbe63c1a4">dmxinit.c</a>
+</li>
+<li>dmxGlyphLastError
+: <a class="el" href="dmxpict_8c.html#a80081bafc7043ef16f07b96b9322264c">dmxpict.c</a>
+</li>
+<li>dmxGlyphSetPrivateKeyRec
+: <a class="el" href="dmx_8h.html#a82e1e514bdfabd9d2d898a5938018b06">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#a82e1e514bdfabd9d2d898a5938018b06">dmxscrinit.c</a>
+</li>
+<li>dmxIgnoreBadFontPaths
+: <a class="el" href="dmxinit_8c.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#a2eb1403caea1e0c8ac3cb9d1edc8d3c6">dmx.h</a>
+</li>
+<li>dmxInputEnabled
+: <a class="el" href="dmxsigio_8c.html#ace65587735b6bff523a064f6ad1f978f">dmxsigio.c</a>
+</li>
+<li>dmxInputs
+: <a class="el" href="dmxinit_8c.html#a067017d9e67716c251357e9edf917e59">dmxinit.c</a>
+, <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxinput.h</a>
+</li>
+<li>dmxLastErrorEvent
+: <a class="el" href="dmx_8h.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#aacf5b80f46b3ba1e46d7f1f12cfb158f">dmxinit.c</a>
+</li>
+<li>dmxLazyWindowCreation
+: <a class="el" href="dmx_8h.html#af266e8dde07901ede60eaa822b3e945a">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#af266e8dde07901ede60eaa822b3e945a">dmxinit.c</a>
+</li>
+<li>dmxLocalCoreKeyboard
+: <a class="el" href="dmxinputinit_8c.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxinputinit.c</a>
+, <a class="el" href="dmxinputinit_8h.html#afbf8cd02f52e073392a645f6ef0bcf78">dmxinputinit.h</a>
+</li>
+<li>dmxLocalCorePointer
+: <a class="el" href="dmxinputinit_8h.html#ab34ec11967377e32bc0817fb3a8b939e">dmxinputinit.h</a>
+, <a class="el" href="dmxinputinit_8c.html#ab34ec11967377e32bc0817fb3a8b939e">dmxinputinit.c</a>
+</li>
+<li>DMXLocalDevices
+: <a class="el" href="dmxinputinit_8c.html#a74cb9ef11048e61ab91acd98613210b8">dmxinputinit.c</a>
+</li>
+<li>dmxNumInputs
+: <a class="el" href="dmxinput_8h.html#a7c8f7f00098aec51d56c188a26747d9f">dmxinput.h</a>
+, <a class="el" href="dmxinit_8c.html#a7c8f7f00098aec51d56c188a26747d9f">dmxinit.c</a>
+</li>
+<li>dmxNumScreens
+: <a class="el" href="dmx_8h.html#a5a881109fe1e32c74cda4a280b09a7c4">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a5a881109fe1e32c74cda4a280b09a7c4">dmxinit.c</a>
+</li>
+<li>dmxOffScreenOpt
+: <a class="el" href="dmx_8h.html#aa8987e6ecde1821c659e8fe22336fd20">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#aa8987e6ecde1821c659e8fe22336fd20">dmxinit.c</a>
+</li>
+<li>dmxPictPrivateKeyRec
+: <a class="el" href="dmx_8h.html#abf05e9930ee1c563f28664a2e425eabe">dmx.h</a>
+, <a class="el" href="dmxscrinit_8c.html#abf05e9930ee1c563f28664a2e425eabe">dmxscrinit.c</a>
+</li>
+<li>dmxPixPrivateKeyRec
+: <a class="el" href="dmxscrinit_8c.html#af773380733836d74aa67be0d75614fe4">dmxscrinit.c</a>
+, <a class="el" href="dmx_8h.html#af773380733836d74aa67be0d75614fe4">dmx.h</a>
+</li>
+<li>dmxPointerCursorFuncs
+: <a class="el" href="dmxcursor_8c.html#aacf8d4857dd965073f62f10a53edcaa3">dmxcursor.c</a>
+, <a class="el" href="dmxcursor_8h.html#aacf8d4857dd965073f62f10a53edcaa3">dmxcursor.h</a>
+</li>
+<li>dmxPointerSpriteFuncs
+: <a class="el" href="dmxcursor_8h.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxcursor.h</a>
+, <a class="el" href="dmxcursor_8c.html#a7bf2f59a6c5d381aea975cd78dd1f9dc">dmxcursor.c</a>
+</li>
+<li>dmxSaveProcVector
+: <a class="el" href="dmxfont_8c.html#a306f6e316020fcda44fb35e1c96f2bd3">dmxfont.c</a>
+</li>
+<li>dmxSaveRenderVector
+: <a class="el" href="dmxpict_8c.html#aeba9d541daf04470813b176723c857e8">dmxpict.c</a>
+</li>
+<li>dmxScreenPrivateKeyRec
+: <a class="el" href="dmxscrinit_8c.html#a28f509d7976acb88156303dd4231b463">dmxscrinit.c</a>
+, <a class="el" href="dmx_8h.html#a28f509d7976acb88156303dd4231b463">dmx.h</a>
+</li>
+<li>dmxScreens
+: <a class="el" href="dmx_8h.html#a3e242a6818df05e547a4776919e3827f">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxinit.c</a>
+</li>
+<li>dmxShadowFB
+: <a class="el" href="dmx_8h.html#a97d09d0d46e9e7df451072def499e4fe">dmx.h</a>
+, <a class="el" href="dmxinit_8c.html#a97d09d0d46e9e7df451072def499e4fe">dmxinit.c</a>
+</li>
+<li>dmxStatDisplays
+: <a class="el" href="dmxstat_8c.html#a9994506527c1e7aac2f30d4ed67ea4a5">dmxstat.c</a>
+</li>
+<li>dmxStatInterval
+: <a class="el" href="dmxstat_8c.html#abe67369da5135f53f058261d3c173927">dmxstat.c</a>
+, <a class="el" href="dmxstat_8h.html#abe67369da5135f53f058261d3c173927">dmxstat.h</a>
+</li>
+<li>dmxStatTimer
+: <a class="el" href="dmxstat_8c.html#a4b07a4c989d24e5cad8f85a24d24406c">dmxstat.c</a>
+</li>
+<li>dmxSubdividePrimitives
+: <a class="el" href="dmxinit_8c.html#a8207510b34c9871015d1e9378c31c568">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#a8207510b34c9871015d1e9378c31c568">dmx.h</a>
+</li>
+<li>dmxSyncInterval
+: <a class="el" href="dmxsync_8c.html#a01c45efcf0b2d9242b06e1e0fe42bd76">dmxsync.c</a>
+</li>
+<li>dmxSyncPending
+: <a class="el" href="dmxsync_8c.html#a6fb7fbcbe509b8ffb8637691925d46f2">dmxsync.c</a>
+</li>
+<li>dmxSyncTimer
+: <a class="el" href="dmxsync_8c.html#a9466911712aef6631a5b88d1bcb1afad">dmxsync.c</a>
+</li>
+<li>dmxUseXKB
+: <a class="el" href="dmxinit_8c.html#ab5b999218612af4136983694943737aa">dmxinit.c</a>
+, <a class="el" href="dmx_8h.html#ab5b999218612af4136983694943737aa">dmx.h</a>
+</li>
+<li>dmxWinPrivateKeyRec
+: <a class="el" href="dmxscrinit_8c.html#acb038e21fd8e5d160e62e63b339f27af">dmxscrinit.c</a>
+, <a class="el" href="dmx_8h.html#acb038e21fd8e5d160e62e63b339f27af">dmx.h</a>
+</li>
+<li>dmxXkbLayout
+: <a class="el" href="dmxconfig_8c.html#a70d750a10d2cda84bbb9e009c8cdbdda">dmxconfig.c</a>
+</li>
+<li>dmxXkbModel
+: <a class="el" href="dmxconfig_8c.html#a03f1affbcf5042cf537cffc8ce9d47f4">dmxconfig.c</a>
+</li>
+<li>dmxXkbOptions
+: <a class="el" href="dmxconfig_8c.html#aba9019237c80bcabbbbd9afffc723c22">dmxconfig.c</a>
+</li>
+<li>dmxXkbRules
+: <a class="el" href="dmxconfig_8c.html#aae9b4e8aa3f950c6e12e792d6940a852">dmxconfig.c</a>
+</li>
+<li>dmxXkbVariant
+: <a class="el" href="dmxconfig_8c.html#a9237687e93253996897e0e0d584222ed">dmxconfig.c</a>
+</li>
+<li>dpmsGeneration
+: <a class="el" href="dmxdpms_8c.html#a7bb06fe7454077ecfbfae62ac9cba1e0">dmxdpms.c</a>
+</li>
+<li>dpmsSupported
+: <a class="el" href="dmxdpms_8c.html#a2d45a784084cd5cdef646499d5298254">dmxdpms.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>ecbutton
+: <a class="el" href="xdmxconfig_8c.html#a655e2589b88ef8902e7c022e496d8170">xdmxconfig.c</a>
+</li>
+<li>ecdialog0
+: <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">xdmxconfig.c</a>
+</li>
+<li>ecdialog1
+: <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">xdmxconfig.c</a>
+</li>
+<li>ecpopup
+: <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">xdmxconfig.c</a>
+</li>
+<li>edbutton
+: <a class="el" href="xdmxconfig_8c.html#a7cd605cfca87d28f931794de0132fb91">xdmxconfig.c</a>
+</li>
+<li>eddialog0
+: <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">xdmxconfig.c</a>
+</li>
+<li>eddialog1
+: <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">xdmxconfig.c</a>
+</li>
+<li>eddialog2
+: <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">xdmxconfig.c</a>
+</li>
+<li>edpopup
+: <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">xdmxconfig.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>indent
+: <a class="el" href="dmxprint_8c.html#a913a30aaae68bab9c263fd5208679335">dmxprint.c</a>
+</li>
+<li>initialStack
+: <a class="el" href="dmxprint_8c.html#a32dfc14ba99dbdf0241b5e2e42553fec">dmxprint.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
+<li>linux_to_x
+: <a class="el" href="lnx-keyboard_8c.html#a8448907727701c5b1fd1001458ccd62c">lnx-keyboard.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
+<li>map
+: <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">usb-keyboard.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>namebox
+: <a class="el" href="xdmxconfig_8c.html#aeb035d7eb4ec0fd86074b4729a1bcb1e">xdmxconfig.c</a>
+</li>
+<li>ndbutton0
+: <a class="el" href="xdmxconfig_8c.html#a210a7f8748e7ac28c44be94bb607840d">xdmxconfig.c</a>
+</li>
+<li>ndbutton1
+: <a class="el" href="xdmxconfig_8c.html#a191091047c7a786b2994aa7cabbf9d19">xdmxconfig.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>okbutton
+: <a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">xdmxconfig.c</a>
+</li>
+<li>opendialog
+: <a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">xdmxconfig.c</a>
+</li>
+<li>openpopup
+: <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">xdmxconfig.c</a>
+</li>
+<li>origbox
+: <a class="el" href="xdmxconfig_8c.html#ac277ca719048235d195e2fe39e16e280">xdmxconfig.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>pos
+: <a class="el" href="dmxprint_8c.html#a1910d262855b71da353ed0d07a6c7823">dmxprint.c</a>
+</li>
+<li>PRIV
+: <a class="el" href="lnx-keyboard_8c.html#a4feca68f31d2c2170bef7d62f747dd88">lnx-keyboard.c</a>
+</li>
+<li>ProcRenderVector
+: <a class="el" href="dmxpict_8c.html#a04fe5f379830ee6515c7af277f3a7908">dmxpict.c</a>
+</li>
+<li>ProximityIn
+: <a class="el" href="dmxclient_8h.html#ac1fa54a853b3edb8cbf6378dfaa962a6">dmxclient.h</a>
+</li>
+<li>ProximityOut
+: <a class="el" href="dmxclient_8h.html#a606f455d31c949b7f57a51a0e0b5f351">dmxclient.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>quitpopup
+: <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">xdmxconfig.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>RenderErrBase
+: <a class="el" href="dmxpict_8c.html#a2a976139e942aa64e03b8f5357ba82ca">dmxpict.c</a>
+</li>
+<li>rtbox
+: <a class="el" href="xdmxconfig_8c.html#acb241369adbfdc70fec382d0d306e012">xdmxconfig.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>stack
+: <a class="el" href="dmxprint_8c.html#a85981501fbd26d90c517d5b98c76d6ec">dmxprint.c</a>
+</li>
+<li>str
+: <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">dmxprint.c</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>yydebug
+: <a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">dmxparse.h</a>
+</li>
+<li>yyin
+: <a class="el" href="xdmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">xdmxconfig.c</a>
+, <a class="el" href="dmxtodmx_8c.html#a46af646807e0797e72b6e8945e7ea88b">dmxtodmx.c</a>
+, <a class="el" href="dmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">dmxconfig.c</a>
+</li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/index.html b/hw/dmx/doc/html/index.html
new file mode 100644
index 0000000..bd248df
--- /dev/null
+++ b/hw/dmx/doc/html/index.html
@@ -0,0 +1,57 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li class="current"><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('index.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>Distributed Multihead X Documentation</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><ul>
+<li><a href="http://dmx.sourceforge.net">DMX Home Page</a></li>
+<li><a href="http://sourceforge.net/projects/dmx">DMX Project Page (on Source Forge)</a></li>
+<li><a href="http://dmx.sourceforge.net/dmx.html">Distributed Multihead X design</a>, the design document for DMX</li>
+<li><a href="http://dmx.sourceforge.net/DMXSpec.txt">Client-to-Server DMX Extension to the X Protocol</a> </li>
+</ul>
+</div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/jquery.js b/hw/dmx/doc/html/jquery.js
new file mode 100644
index 0000000..c052173
--- /dev/null
+++ b/hw/dmx/doc/html/jquery.js
@@ -0,0 +1,54 @@
+/*
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){
+var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
+/*
+ * Sizzle CSS Selector Engine - v0.9.3
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0)
+{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function()
+{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
+/*
+ * jQuery UI 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2
+ *
+ * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * ui.core.js
+ */
+(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0))
+{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
+ * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
+ * Date: 2/8/2008
+ * @author Ariel Flesler
+ * @version 1.3.2
+ */
+;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
+
diff --git a/hw/dmx/doc/html/lnx-keyboard_8c.html b/hw/dmx/doc/html/lnx-keyboard_8c.html
new file mode 100644
index 0000000..2b61451
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-keyboard_8c.html
@@ -0,0 +1,1296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-keyboard_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>lnx-keyboard.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="lnx-keyboard_8h_source.html">lnx-keyboard.h</a>&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &lt;X11/Xos.h&gt;</code><br/>
+<code>#include &lt;sys/ioctl.h&gt;</code><br/>
+<code>#include &lt;errno.h&gt;</code><br/>
+<code>#include &lt;signal.h&gt;</code><br/>
+<code>#include &lt;sys/vt.h&gt;</code><br/>
+<code>#include &lt;sys/kd.h&gt;</code><br/>
+<code>#include &lt;termios.h&gt;</code><br/>
+<code>#include &quot;atKeynames.h&quot;</code><br/>
+<code>#include &lt;linux/keyboard.h&gt;</code><br/>
+<code>#include &lt;xkbsrv.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a3463151de078a8c7b6bfcae492b9e5f9">SWITCHRETPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#af8a3e30cb4858ca8a098acae107286c0">MESSAGE</a>&#160;&#160;&#160;&quot;\033c\n\n\nDMX taking input from this console...&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#ad71b1ebcfa90278a27073d2c0cb4dad4">FINALMESSAGE</a>&#160;&#160;&#160;&quot;\033cDMX terminated.&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aa472fa3dc86eaccfc92bb0caf47bdcd9">NUM_AT2LNX</a>&#160;&#160;&#160;(sizeof(<a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a>) / sizeof(<a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a>[0]))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>&#160;&#160;&#160;(256/32)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#acdc80f4d45e1276e533490146d014bde">SYSCALL</a>(call)&#160;&#160;&#160;while(((call) == -1) &amp;&amp; (errno == EINTR))</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">kbdLinuxKeyDown</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int keyCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a0667fd33b8b30b74319818c9e1752950">kbdLinuxKeyState</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int type, int keyCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aaeba8e3220761201a64b5da3e2f85e52">kbdLinuxCreatePrivate</a> (DeviceIntPtr pKeyboard)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a5c9ddc88a9a5d989ce49a071eadcec87">kbdLinuxDestroyPrivate</a> (pointer priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a0acb8c77b4bd032bda9aeb87a656b9e7">kbdLinuxBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a278d93f44fccf1e642fa58c05bb2d06a">kbdLinuxCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a198a0f886cb4a350bfe714c16e92c44d">kbdLinuxGetFreeVTNumber</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#af405cce5d5bbc25171b425782f6e0b92">kbdLinuxOpenVT</a> (int vtno)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aefe715d8634268857806b5655cb70466">kbdLinuxGetCurrentVTNumber</a> (int fd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate</a> (int fd, int vtno, int setSig)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a50fd258e64aa03fd197af2a1a8306b32">kbdLinuxVTPreSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a8c0e2439e4991b78f99c79e90f5e474d">kbdLinuxVTPostSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch</a> (pointer p, int vt, void(*switch_return)(pointer), pointer switch_return_data)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler</a> (int sig)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a24c8cbb95ad1f21d590f57cdb22c25f4">kbdLinuxInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a582fe5af774d898b85edb42116598890">kbdLinuxPrefix0Mapping</a> (unsigned char *scanCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a67b95ff06cbdb5de12cc01954aa7b67e">kbdLinuxPrefixMapping</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, unsigned char *scanCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert</a> (DevicePtr pDev, unsigned char scanCode, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#aa7781cedb743039542090faf43d9423f">kbdLinuxRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a541096c9032b400b6f7f8cc76c36f716">kbdLinuxOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a2f0498bfb85d9301b7bab802844b047d">kbdLinuxOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping</a> (int fd, KeySymsPtr pKeySyms)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a4feca68f31d2c2170bef7d62f747dd88">PRIV</a> = NULL</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static KeySym&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a8448907727701c5b1fd1001458ccd62c">linux_to_x</a> [256]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a> [NUM_KEYCODES]</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code implements a low-level device driver for the Linux keyboard. The code is derived from code by Thomas Roell, Orest Zborowski, and David Dawes (see the source code for complete references). </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="lnx&#45;keyboard.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="lnx&#45;keyboard.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="lnx&#45;keyboard.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="lnx&#45;keyboard.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate()</a>, <a class="el" href="lnx-keyboard_8c.html#a198a0f886cb4a350bfe714c16e92c44d">kbdLinuxGetFreeVTNumber()</a>, and <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="lnx&#45;keyboard.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a198a0f886cb4a350bfe714c16e92c44d">kbdLinuxGetFreeVTNumber()</a>, <a class="el" href="lnx-keyboard_8h.html#a24c8cbb95ad1f21d590f57cdb22c25f4">kbdLinuxInit()</a>, and <a class="el" href="lnx-keyboard_8h.html#a541096c9032b400b6f7f8cc76c36f716">kbdLinuxOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="lnx&#45;keyboard.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#af405cce5d5bbc25171b425782f6e0b92">kbdLinuxOpenVT()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad71b1ebcfa90278a27073d2c0cb4dad4"></a><!-- doxytag: member="lnx&#45;keyboard.c::FINALMESSAGE" ref="ad71b1ebcfa90278a27073d2c0cb4dad4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FINALMESSAGE&#160;&#160;&#160;&quot;\033cDMX terminated.&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="lnx&#45;keyboard.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="lnx-keyboard_8h.html#a0acb8c77b4bd032bda9aeb87a656b9e7">kbdLinuxBell()</a>, <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole()</a>, <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>, <a class="el" href="lnx-keyboard_8h.html#a278d93f44fccf1e642fa58c05bb2d06a">kbdLinuxCtrl()</a>, <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="lnx-keyboard_8h.html#a24c8cbb95ad1f21d590f57cdb22c25f4">kbdLinuxInit()</a>, <a class="el" href="lnx-keyboard_8h.html#a2f0498bfb85d9301b7bab802844b047d">kbdLinuxOff()</a>, <a class="el" href="lnx-keyboard_8h.html#a541096c9032b400b6f7f8cc76c36f716">kbdLinuxOn()</a>, <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>, and <a class="el" href="lnx-keyboard_8c.html#aa7781cedb743039542090faf43d9423f">kbdLinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="lnx&#45;keyboard.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="lnx&#45;keyboard.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="lnx&#45;keyboard.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>, and <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="lnx&#45;keyboard.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af8a3e30cb4858ca8a098acae107286c0"></a><!-- doxytag: member="lnx&#45;keyboard.c::MESSAGE" ref="af8a3e30cb4858ca8a098acae107286c0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MESSAGE&#160;&#160;&#160;&quot;\033c\n\n\nDMX taking input from this console...&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="lnx&#45;keyboard.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa472fa3dc86eaccfc92bb0caf47bdcd9"></a><!-- doxytag: member="lnx&#45;keyboard.c::NUM_AT2LNX" ref="aa472fa3dc86eaccfc92bb0caf47bdcd9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NUM_AT2LNX&#160;&#160;&#160;(sizeof(<a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a>) / sizeof(<a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a>[0]))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4551482d17e969e4de70a669be3afc74"></a><!-- doxytag: member="lnx&#45;keyboard.c::NUM_STATE_ENTRIES" ref="a4551482d17e969e4de70a669be3afc74" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NUM_STATE_ENTRIES&#160;&#160;&#160;(256/32)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">kbdLinuxKeyDown()</a>, <a class="el" href="lnx-keyboard_8c.html#a0667fd33b8b30b74319818c9e1752950">kbdLinuxKeyState()</a>, <a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">kbdUSBKeyDown()</a>, and <a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">kbdUSBKeyState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3463151de078a8c7b6bfcae492b9e5f9"></a><!-- doxytag: member="lnx&#45;keyboard.c::SWITCHRETPROC" ref="a3463151de078a8c7b6bfcae492b9e5f9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SWITCHRETPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="acdc80f4d45e1276e533490146d014bde"></a><!-- doxytag: member="lnx&#45;keyboard.c::SYSCALL" ref="acdc80f4d45e1276e533490146d014bde" args="(call)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SYSCALL</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">call</td><td>)</td>
+ <td>&#160;&#160;&#160;while(((call) == -1) &amp;&amp; (errno == EINTR))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="lnx&#45;keyboard.c::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a49faeb3e9d06f702f1bd45ffc6f7c8b7"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxActivate" ref="a49faeb3e9d06f702f1bd45ffc6f7c8b7" args="(int fd, int vtno, int setSig)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxActivate </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>vtno</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>setSig</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>, <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>, and <a class="el" href="lnx-keyboard_8c.html#acdc80f4d45e1276e533490146d014bde">SYSCALL</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole()</a>, <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>, and <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0acb8c77b4bd032bda9aeb87a656b9e7"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxBell" ref="a0acb8c77b4bd032bda9aeb87a656b9e7" args="(DevicePtr pDev, int percent, int volume, int pitch, int duration)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxBell </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>volume</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>duration</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Ring the bell.</p>
+<p>Note: we completely ignore the <em>volume</em>, since Linux's ioctl() interface does not provide a way to control it. If it did, the XBell manpage tells how the actual volume is a function of the percent and the (base) volume.</p>
+<p>Note that most of the other PC-based bell drivers compute the duration for KDMKTONE as a function of the volume and the duration. For some drivers, the duration is only measured in mS if the volume is 50, and is scaled by the volume for other values. This seems confusing and possibly incorrect (the xset man page says that the bell will be "as closely as it can to the user's specifications" -- if we ignore the volume and set the duration correctly, then we'll get one parameter "wrong" -- but if we use the volume to scale the duration, then we'll get both parameters "wrong"). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4263fa687463ddbe1622bdb82a44b08"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxCloseConsole" ref="ac4263fa687463ddbe1622bdb82a44b08" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxCloseConsole </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#ad71b1ebcfa90278a27073d2c0cb4dad4">FINALMESSAGE</a>, <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate()</a>, and <a class="el" href="lnx-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8h.html#a2f0498bfb85d9301b7bab802844b047d">kbdLinuxOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6338eb254610cdbf7942ad91f23c36fe"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxConvert" ref="a6338eb254610cdbf7942ad91f23c36fe" args="(DevicePtr pDev, unsigned char scanCode, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxConvert </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char&#160;</td>
+ <td class="paramname"><em>scanCode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">kbdLinuxKeyDown()</a>, <a class="el" href="lnx-keyboard_8c.html#a0667fd33b8b30b74319818c9e1752950">kbdLinuxKeyState()</a>, <a class="el" href="lnx-keyboard_8c.html#a67b95ff06cbdb5de12cc01954aa7b67e">kbdLinuxPrefixMapping()</a>, and <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#aa7781cedb743039542090faf43d9423f">kbdLinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaeba8e3220761201a64b5da3e2f85e52"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxCreatePrivate" ref="aaeba8e3220761201a64b5da3e2f85e52" args="(DeviceIntPtr pKeyboard)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer kbdLinuxCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pKeyboard</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">_myPrivate::pKeyboard</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a278d93f44fccf1e642fa58c05bb2d06a"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxCtrl" ref="a278d93f44fccf1e642fa58c05bb2d06a" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the LEDs. </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5c9ddc88a9a5d989ce49a071eadcec87"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxDestroyPrivate" ref="a5c9ddc88a9a5d989ce49a071eadcec87" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="aefe715d8634268857806b5655cb70466"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxGetCurrentVTNumber" ref="aefe715d8634268857806b5655cb70466" args="(int fd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxGetCurrentVTNumber </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a198a0f886cb4a350bfe714c16e92c44d"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxGetFreeVTNumber" ref="a198a0f886cb4a350bfe714c16e92c44d" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxGetFreeVTNumber </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>, and <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae65b4fd1c456532a438479b35228d4cf"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxGetInfo" ref="ae65b4fd1c456532a438479b35228d4cf" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad3e8695c18469949e1ed00f7cd8055a5"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxGetMap" ref="ad3e8695c18469949e1ed00f7cd8055a5" args="(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySymsPtr&#160;</td>
+ <td class="paramname"><em>pKeySyms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD8 *&#160;</td>
+ <td class="paramname"><em>pModMap</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">GLYPHS_PER_KEY</a>, <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>, <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, <a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">MAX_KEYCODE</a>, <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>, and <a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">NUM_KEYCODES</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a24c8cbb95ad1f21d590f57cdb22c25f4"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxInit" ref="a24c8cbb95ad1f21d590f57cdb22c25f4" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the <em>pDev</em> as a Linux keyboard. </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a508da29b3082d7901ebf5c7397bd1a88"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxKeyDown" ref="a508da29b3082d7901ebf5c7397bd1a88" args="(myPrivate *priv, int keyCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxKeyDown </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>keyCode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a>, and <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>, and <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0667fd33b8b30b74319818c9e1752950"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxKeyState" ref="a0667fd33b8b30b74319818c9e1752950" args="(myPrivate *priv, int type, int keyCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxKeyState </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>keyCode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a>, and <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2f0498bfb85d9301b7bab802844b047d"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxOff" ref="a2f0498bfb85d9301b7bab802844b047d" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a541096c9032b400b6f7f8cc76c36f716"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxOn" ref="a541096c9032b400b6f7f8cc76c36f716" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int kbdLinuxOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, and <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a583121fb5591debead8398c1626f2385"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxOpenConsole" ref="a583121fb5591debead8398c1626f2385" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxOpenConsole </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate()</a>, <a class="el" href="lnx-keyboard_8c.html#aefe715d8634268857806b5655cb70466">kbdLinuxGetCurrentVTNumber()</a>, <a class="el" href="lnx-keyboard_8c.html#a198a0f886cb4a350bfe714c16e92c44d">kbdLinuxGetFreeVTNumber()</a>, <a class="el" href="lnx-keyboard_8c.html#af405cce5d5bbc25171b425782f6e0b92">kbdLinuxOpenVT()</a>, <a class="el" href="lnx-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>, and <a class="el" href="lnx-keyboard_8c.html#af8a3e30cb4858ca8a098acae107286c0">MESSAGE</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8h.html#a24c8cbb95ad1f21d590f57cdb22c25f4">kbdLinuxInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af405cce5d5bbc25171b425782f6e0b92"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxOpenVT" ref="af405cce5d5bbc25171b425782f6e0b92" args="(int vtno)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxOpenVT </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>vtno</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>, and <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a582fe5af774d898b85edb42116598890"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxPrefix0Mapping" ref="a582fe5af774d898b85edb42116598890" args="(unsigned char *scanCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxPrefix0Mapping </td>
+ <td>(</td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>scanCode</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a67b95ff06cbdb5de12cc01954aa7b67e">kbdLinuxPrefixMapping()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a67b95ff06cbdb5de12cc01954aa7b67e"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxPrefixMapping" ref="a67b95ff06cbdb5de12cc01954aa7b67e" args="(myPrivate *priv, unsigned char *scanCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdLinuxPrefixMapping </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>scanCode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a582fe5af774d898b85edb42116598890">kbdLinuxPrefix0Mapping()</a>, and <a class="el" href="struct__myPrivate.html#a35c7eda9702b723812312689bf412424">_myPrivate::prefix</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7781cedb743039542090faf43d9423f"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxRead" ref="aa7781cedb743039542090faf43d9423f" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function. </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acc3cbed3f7e836f032b2e131baeb4800"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxReadKernelMapping" ref="acc3cbed3f7e836f032b2e131baeb4800" args="(int fd, KeySymsPtr pKeySyms)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxReadKernelMapping </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySymsPtr&#160;</td>
+ <td class="paramname"><em>pKeySyms</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a>, <a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">GLYPHS_PER_KEY</a>, <a class="el" href="lnx-keyboard_8c.html#a8448907727701c5b1fd1001458ccd62c">linux_to_x</a>, <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, and <a class="el" href="lnx-keyboard_8c.html#aa472fa3dc86eaccfc92bb0caf47bdcd9">NUM_AT2LNX</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8c0e2439e4991b78f99c79e90f5e474d"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxVTPostSwitch" ref="a8c0e2439e4991b78f99c79e90f5e474d" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxVTPostSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called after returning from a VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a50fd258e64aa03fd197af2a1a8306b32"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxVTPreSwitch" ref="a50fd258e64aa03fd197af2a1a8306b32" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxVTPreSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called prior to an VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a93a481bcaf8d735c29c8b8114cf68eba"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxVTSignalHandler" ref="a93a481bcaf8d735c29c8b8114cf68eba" args="(int sig)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdLinuxVTSignalHandler </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>sig</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, <a class="el" href="lnx-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>, <a class="el" href="lnx-keyboard_8c.html#a4feca68f31d2c2170bef7d62f747dd88">PRIV</a>, <a class="el" href="struct__myPrivate.html#ab4797772b07f0fc6aca12ca15bf58b26">_myPrivate::switch_return</a>, <a class="el" href="struct__myPrivate.html#a263e4371987e44a409cae181d97ce60b">_myPrivate::switch_return_data</a>, and <a class="el" href="struct__myPrivate.html#a7b46718db81521ae01ffbbe8f32a0203">_myPrivate::switched</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7e6977d8d414fb1b62710835ca763af4"></a><!-- doxytag: member="lnx&#45;keyboard.c::kbdLinuxVTSwitch" ref="a7e6977d8d414fb1b62710835ca763af4" args="(pointer p, int vt, void(*switch_return)(pointer), pointer switch_return_data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int kbdLinuxVTSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>vt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void(*)(pointer)&#160;</td>
+ <td class="paramname"><em>switch_return</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>switch_return_data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Tell the operating system to switch to <em>vt</em>. The <em>switch_return</em> function is called with the <em>switch_return_data</em> when the VT is switched back to the pre-switch VT (i.e., the user returns to the DMX session). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>, <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, <a class="el" href="lnx-keyboard_8c.html#a49faeb3e9d06f702f1bd45ffc6f7c8b7">kbdLinuxActivate()</a>, <a class="el" href="struct__myPrivate.html#ab4797772b07f0fc6aca12ca15bf58b26">_myPrivate::switch_return</a>, <a class="el" href="struct__myPrivate.html#a263e4371987e44a409cae181d97ce60b">_myPrivate::switch_return_data</a>, <a class="el" href="struct__myPrivate.html#a7b46718db81521ae01ffbbe8f32a0203">_myPrivate::switched</a>, and <a class="el" href="struct__myPrivate.html#a463f3cda6fa6032ea0d976d35cd11c30">_myPrivate::vtno</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a87773afe2af683304ea3a365f360b624"></a><!-- doxytag: member="lnx&#45;keyboard.c::at2lnx" ref="a87773afe2af683304ea3a365f360b624" args="[NUM_KEYCODES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="lnx-keyboard_8c.html#a87773afe2af683304ea3a365f360b624">at2lnx</a>[NUM_KEYCODES]<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8448907727701c5b1fd1001458ccd62c"></a><!-- doxytag: member="lnx&#45;keyboard.c::linux_to_x" ref="a8448907727701c5b1fd1001458ccd62c" args="[256]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">KeySym <a class="el" href="lnx-keyboard_8c.html#a8448907727701c5b1fd1001458ccd62c">linux_to_x</a>[256]<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4feca68f31d2c2170bef7d62f747dd88"></a><!-- doxytag: member="lnx&#45;keyboard.c::PRIV" ref="a4feca68f31d2c2170bef7d62f747dd88" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__myPrivate.html">myPrivate</a>* <a class="el" href="lnx-keyboard_8c.html#a4feca68f31d2c2170bef7d62f747dd88">PRIV</a> = NULL<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-keyboard_8c.html">lnx-keyboard.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-keyboard_8h.html b/hw/dmx/doc/html/lnx-keyboard_8h.html
new file mode 100644
index 0000000..42caa92
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-keyboard_8h.html
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-keyboard_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>lnx-keyboard.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="lnx-keyboard_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#aaeba8e3220761201a64b5da3e2f85e52">kbdLinuxCreatePrivate</a> (DeviceIntPtr pKeyboard)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a71f565aa8f6824d52f817dc4a5e504f7">kbdLinuxDestroyPrivate</a> (pointer private)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a24c8cbb95ad1f21d590f57cdb22c25f4">kbdLinuxInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a541096c9032b400b6f7f8cc76c36f716">kbdLinuxOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a2f0498bfb85d9301b7bab802844b047d">kbdLinuxOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a50fd258e64aa03fd197af2a1a8306b32">kbdLinuxVTPreSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a8c0e2439e4991b78f99c79e90f5e474d">kbdLinuxVTPostSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a11eda88b5082b0adaad1bbc723dae485">kbdLinuxVTSwitch</a> (pointer p, int vt, <a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a> switch_return, pointer switch_return_data)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a5c9ea7d8bd36c991d67988615ac57328">kbdLinuxRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a278d93f44fccf1e642fa58c05bb2d06a">kbdLinuxCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-keyboard_8h.html#a0acb8c77b4bd032bda9aeb87a656b9e7">kbdLinuxBell</a> (DevicePtr pDev, int percent, int volume, int pitch, int duration)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to Linux keyboard driver. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="lnx-keyboard_8c.html">lnx-keyboard.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0acb8c77b4bd032bda9aeb87a656b9e7"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxBell" ref="a0acb8c77b4bd032bda9aeb87a656b9e7" args="(DevicePtr pDev, int percent, int volume, int pitch, int duration)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxBell </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>percent</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>volume</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>pitch</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>duration</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Ring the bell.</p>
+<p>Note: we completely ignore the <em>volume</em>, since Linux's ioctl() interface does not provide a way to control it. If it did, the XBell manpage tells how the actual volume is a function of the percent and the (base) volume.</p>
+<p>Note that most of the other PC-based bell drivers compute the duration for KDMKTONE as a function of the volume and the duration. For some drivers, the duration is only measured in mS if the volume is 50, and is scaled by the volume for other values. This seems confusing and possibly incorrect (the xset man page says that the bell will be "as closely as it can to the user's specifications" -- if we ignore the volume and set the duration correctly, then we'll get one parameter "wrong" -- but if we use the volume to scale the duration, then we'll get both parameters "wrong"). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaeba8e3220761201a64b5da3e2f85e52"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxCreatePrivate" ref="aaeba8e3220761201a64b5da3e2f85e52" args="(DeviceIntPtr pKeyboard)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer kbdLinuxCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pKeyboard</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">_myPrivate::pKeyboard</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a278d93f44fccf1e642fa58c05bb2d06a"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxCtrl" ref="a278d93f44fccf1e642fa58c05bb2d06a" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the LEDs. </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71f565aa8f6824d52f817dc4a5e504f7"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxDestroyPrivate" ref="a71f565aa8f6824d52f817dc4a5e504f7" args="(pointer private)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="ae65b4fd1c456532a438479b35228d4cf"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxGetInfo" ref="ae65b4fd1c456532a438479b35228d4cf" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a24c8cbb95ad1f21d590f57cdb22c25f4"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxInit" ref="a24c8cbb95ad1f21d590f57cdb22c25f4" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize the <em>pDev</em> as a Linux keyboard. </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-keyboard_8c.html#a583121fb5591debead8398c1626f2385">kbdLinuxOpenConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2f0498bfb85d9301b7bab802844b047d"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxOff" ref="a2f0498bfb85d9301b7bab802844b047d" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-keyboard_8c.html#ac4263fa687463ddbe1622bdb82a44b08">kbdLinuxCloseConsole()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a541096c9032b400b6f7f8cc76c36f716"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxOn" ref="a541096c9032b400b6f7f8cc76c36f716" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int kbdLinuxOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, and <a class="el" href="lnx-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5c9ea7d8bd36c991d67988615ac57328"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxRead" ref="a5c9ea7d8bd36c991d67988615ac57328" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8c0e2439e4991b78f99c79e90f5e474d"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxVTPostSwitch" ref="a8c0e2439e4991b78f99c79e90f5e474d" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxVTPostSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called after returning from a VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a50fd258e64aa03fd197af2a1a8306b32"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxVTPreSwitch" ref="a50fd258e64aa03fd197af2a1a8306b32" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdLinuxVTPreSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called prior to an VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a11eda88b5082b0adaad1bbc723dae485"></a><!-- doxytag: member="lnx&#45;keyboard.h::kbdLinuxVTSwitch" ref="a11eda88b5082b0adaad1bbc723dae485" args="(pointer p, int vt, dmxVTSwitchReturnProcPtr switch_return, pointer switch_return_data)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int kbdLinuxVTSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>vt</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a>&#160;</td>
+ <td class="paramname"><em>switch_return</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>switch_return_data</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-keyboard_8h.html">lnx-keyboard.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-keyboard_8h_source.html b/hw/dmx/doc/html/lnx-keyboard_8h_source.html
new file mode 100644
index 0000000..d79090f
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-keyboard_8h_source.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-keyboard_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>lnx-keyboard.h</h1> </div>
+</div>
+<div class="contents">
+<a href="lnx-keyboard_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _LNX_KEYBOARD_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _LNX_KEYBOARD_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> pointer <a class="code" href="lnx-keyboard_8c.html#aaeba8e3220761201a64b5da3e2f85e52">kbdLinuxCreatePrivate</a>(DeviceIntPtr pKeyboard);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a5c9ddc88a9a5d989ce49a071eadcec87">kbdLinuxDestroyPrivate</a>(pointer <span class="keyword">private</span>);
+<a name="l00042"></a>00042
+<a name="l00043"></a>00043 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a24c8cbb95ad1f21d590f57cdb22c25f4">kbdLinuxInit</a>(DevicePtr pDev);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="lnx-keyboard_8c.html#a541096c9032b400b6f7f8cc76c36f716">kbdLinuxOn</a>(DevicePtr pDev);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a2f0498bfb85d9301b7bab802844b047d">kbdLinuxOff</a>(DevicePtr pDev);
+<a name="l00047"></a>00047
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a50fd258e64aa03fd197af2a1a8306b32">kbdLinuxVTPreSwitch</a>(pointer p);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a8c0e2439e4991b78f99c79e90f5e474d">kbdLinuxVTPostSwitch</a>(pointer p);
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch</a>(pointer p, <span class="keywordtype">int</span> vt,
+<a name="l00051"></a>00051 <a class="code" href="dmxinputinit_8h.html#adb9019a46004e627338bfb4a02800636">dmxVTSwitchReturnProcPtr</a> switch_return,
+<a name="l00052"></a>00052 pointer switch_return_data);
+<a name="l00053"></a>00053
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#aa7781cedb743039542090faf43d9423f">kbdLinuxRead</a>(DevicePtr pDev,
+<a name="l00055"></a>00055 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00056"></a>00056 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00057"></a>00057 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00058"></a>00058 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00059"></a>00059
+<a name="l00060"></a>00060 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a278d93f44fccf1e642fa58c05bb2d06a">kbdLinuxCtrl</a>(DevicePtr pDev, KeybdCtrl *ctrl);
+<a name="l00061"></a>00061 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-keyboard_8c.html#a0acb8c77b4bd032bda9aeb87a656b9e7">kbdLinuxBell</a>(DevicePtr pDev, <span class="keywordtype">int</span> percent,
+<a name="l00062"></a>00062 <span class="keywordtype">int</span> volume, <span class="keywordtype">int</span> pitch, <span class="keywordtype">int</span> duration);
+<a name="l00063"></a>00063 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-keyboard_8h.html">lnx-keyboard.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-ms_8c.html b/hw/dmx/doc/html/lnx-ms_8c.html
new file mode 100644
index 0000000..db410e5
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-ms_8c.html
@@ -0,0 +1,766 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-ms_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>lnx-ms.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &lt;X11/Xos.h&gt;</code><br/>
+<code>#include &lt;errno.h&gt;</code><br/>
+<code>#include &lt;termios.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="lnx-ms_8h_source.html">lnx-ms.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a7581da9bfd7ebf4fe3703352df521931">PRESS</a>(b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a2b4d2480737f9eb52f80998518486f01">RELEASE</a>(b)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a71addb6f47215d1e4bf1452fdeeb5081">msLinuxReadBytes</a> (int fd, unsigned char *buf, int len, int min)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">msLinuxButton</a> (DevicePtr pDev, ENQUEUEPROC enqueue, int buttons, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">msLinuxRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a834a356a0e28d90699a8178154588e09">msLinuxOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a04f66d21af929f125fa7d524883700d5">msLinuxGetMap</a> (DevicePtr pDev, unsigned char *<a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, int *nButtons)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a1ce83df54082f3196ac29e36dea47fc5">msLinuxVTPreSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#af83993c8cc498cbd9f91737beefb5ea3">msLinuxVTPostSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a7d7777681993bc701468245e42c04282">msLinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#a570d96862061388c5649972b2fa22d75">msLinuxDestroyPrivate</a> (pointer priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8c.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code implements a low-level device driver for a serial MS mouse. The code is derived from code by Juliusz Chroboczek and Keith Packard (see the source code for complete references). </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="lnx&#45;ms.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="lnx&#45;ms.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="lnx&#45;ms.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="lnx&#45;ms.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="lnx&#45;ms.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ms_8h.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit()</a>, and <a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="lnx&#45;ms.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="lnx&#45;ms.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">msLinuxButton()</a>, <a class="el" href="lnx-ms_8h.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit()</a>, <a class="el" href="lnx-ms_8h.html#a834a356a0e28d90699a8178154588e09">msLinuxOff()</a>, <a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn()</a>, and <a class="el" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">msLinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="lnx&#45;ms.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="lnx&#45;ms.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="lnx&#45;ms.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="lnx&#45;ms.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="lnx&#45;ms.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7581da9bfd7ebf4fe3703352df521931"></a><!-- doxytag: member="lnx&#45;ms.c::PRESS" ref="a7581da9bfd7ebf4fe3703352df521931" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PRESS</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ enqueue(pDev, ButtonPress, 0, 0, NULL, block); \
+ } <span class="keywordflow">while</span> (0)
+</pre></div>
+<p>Referenced by <a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">msLinuxButton()</a>, <a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">ps2LinuxButton()</a>, and <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2b4d2480737f9eb52f80998518486f01"></a><!-- doxytag: member="lnx&#45;ms.c::RELEASE" ref="a2b4d2480737f9eb52f80998518486f01" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define RELEASE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ enqueue(pDev, ButtonRelease, 0, 0, NULL, block); \
+ } <span class="keywordflow">while</span> (0)
+</pre></div>
+<p>Referenced by <a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">msLinuxButton()</a>, <a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">ps2LinuxButton()</a>, and <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="lnx&#45;ms.c::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a40d253404cd0db2e90bf9e3e6957d2a5"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxButton" ref="a40d253404cd0db2e90bf9e3e6957d2a5" args="(DevicePtr pDev, ENQUEUEPROC enqueue, int buttons, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void msLinuxButton </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>buttons</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-ms_8c.html#a7581da9bfd7ebf4fe3703352df521931">PRESS</a>, and <a class="el" href="lnx-ms_8c.html#a2b4d2480737f9eb52f80998518486f01">RELEASE</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">msLinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d7777681993bc701468245e42c04282"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxCreatePrivate" ref="a7d7777681993bc701468245e42c04282" args="(DeviceIntPtr pMouse)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer msLinuxCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pMouse</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate::pMouse</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a570d96862061388c5649972b2fa22d75"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxDestroyPrivate" ref="a570d96862061388c5649972b2fa22d75" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad650b3779315db603085a045405c9d9a"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxGetInfo" ref="ad650b3779315db603085a045405c9d9a" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="lnx-ms_8c.html#a04f66d21af929f125fa7d524883700d5">msLinuxGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a04f66d21af929f125fa7d524883700d5"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxGetMap" ref="a04f66d21af929f125fa7d524883700d5" args="(DevicePtr pDev, unsigned char *map, int *nButtons)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void msLinuxGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>map</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nButtons</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0afb23673c5b1bc695c09f3f3bd75a4b"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxInit" ref="a0afb23673c5b1bc695c09f3f3bd75a4b" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a834a356a0e28d90699a8178154588e09"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxOff" ref="a834a356a0e28d90699a8178154588e09" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad8f116275f80b5143bc6fe8806cf1298"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxOn" ref="ad8f116275f80b5143bc6fe8806cf1298" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int msLinuxOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-ms_8c.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abad8a6240d6769094e70b92f5d8b72d4"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxRead" ref="abad8a6240d6769094e70b92f5d8b72d4" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function. </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-ms_8c.html#a40d253404cd0db2e90bf9e3e6957d2a5">msLinuxButton()</a>, and <a class="el" href="lnx-ms_8c.html#a71addb6f47215d1e4bf1452fdeeb5081">msLinuxReadBytes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71addb6f47215d1e4bf1452fdeeb5081"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxReadBytes" ref="a71addb6f47215d1e4bf1452fdeeb5081" args="(int fd, unsigned char *buf, int len, int min)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int msLinuxReadBytes </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>min</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">msLinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af83993c8cc498cbd9f91737beefb5ea3"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxVTPostSwitch" ref="af83993c8cc498cbd9f91737beefb5ea3" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxVTPostSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called after returning from a VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1ce83df54082f3196ac29e36dea47fc5"></a><!-- doxytag: member="lnx&#45;ms.c::msLinuxVTPreSwitch" ref="a1ce83df54082f3196ac29e36dea47fc5" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxVTPreSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called prior to an VT switch. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-ms_8c.html">lnx-ms.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-ms_8h.html b/hw/dmx/doc/html/lnx-ms_8h.html
new file mode 100644
index 0000000..d1fce95
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-ms_8h.html
@@ -0,0 +1,318 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-ms_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>lnx-ms.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="lnx-ms_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a7d7777681993bc701468245e42c04282">msLinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a570d96862061388c5649972b2fa22d75">msLinuxDestroyPrivate</a> (pointer priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a9212626ca3092129b094b014e92e0630">msLinuxRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a834a356a0e28d90699a8178154588e09">msLinuxOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a760648b944ddf26eafb81cf9b54dd976">msLinuxCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#a1ce83df54082f3196ac29e36dea47fc5">msLinuxVTPreSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ms_8h.html#af83993c8cc498cbd9f91737beefb5ea3">msLinuxVTPostSwitch</a> (pointer p)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to Linux MS mouse driver. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="lnx-ms_8c.html">lnx-ms.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a7d7777681993bc701468245e42c04282"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxCreatePrivate" ref="a7d7777681993bc701468245e42c04282" args="(DeviceIntPtr pMouse)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer msLinuxCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pMouse</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate::pMouse</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a760648b944ddf26eafb81cf9b54dd976"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxCtrl" ref="a760648b944ddf26eafb81cf9b54dd976" args="(DevicePtr pDev, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a570d96862061388c5649972b2fa22d75"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxDestroyPrivate" ref="a570d96862061388c5649972b2fa22d75" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="ad650b3779315db603085a045405c9d9a"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxGetInfo" ref="ad650b3779315db603085a045405c9d9a" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="lnx-ms_8c.html#a04f66d21af929f125fa7d524883700d5">msLinuxGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0afb23673c5b1bc695c09f3f3bd75a4b"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxInit" ref="a0afb23673c5b1bc695c09f3f3bd75a4b" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-ms_8h.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a834a356a0e28d90699a8178154588e09"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxOff" ref="a834a356a0e28d90699a8178154588e09" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad8f116275f80b5143bc6fe8806cf1298"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxOn" ref="ad8f116275f80b5143bc6fe8806cf1298" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int msLinuxOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ms_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-ms_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-ms_8c.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9212626ca3092129b094b014e92e0630"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxRead" ref="a9212626ca3092129b094b014e92e0630" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af83993c8cc498cbd9f91737beefb5ea3"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxVTPostSwitch" ref="af83993c8cc498cbd9f91737beefb5ea3" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxVTPostSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called after returning from a VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a1ce83df54082f3196ac29e36dea47fc5"></a><!-- doxytag: member="lnx&#45;ms.h::msLinuxVTPreSwitch" ref="a1ce83df54082f3196ac29e36dea47fc5" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void msLinuxVTPreSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called prior to an VT switch. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-ms_8h.html">lnx-ms.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-ms_8h_source.html b/hw/dmx/doc/html/lnx-ms_8h_source.html
new file mode 100644
index 0000000..688c9be
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-ms_8h_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-ms_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>lnx-ms.h</h1> </div>
+</div>
+<div class="contents">
+<a href="lnx-ms_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _LNX_MS_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _LNX_MS_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> pointer <a class="code" href="lnx-ms_8c.html#a7d7777681993bc701468245e42c04282">msLinuxCreatePrivate</a>(DeviceIntPtr pMouse);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#a570d96862061388c5649972b2fa22d75">msLinuxDestroyPrivate</a>(pointer priv);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#abad8a6240d6769094e70b92f5d8b72d4">msLinuxRead</a>(DevicePtr pDev,
+<a name="l00043"></a>00043 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00044"></a>00044 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00045"></a>00045 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00046"></a>00046 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#a0afb23673c5b1bc695c09f3f3bd75a4b">msLinuxInit</a>(DevicePtr pDev);
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="lnx-ms_8c.html#ad8f116275f80b5143bc6fe8806cf1298">msLinuxOn</a>(DevicePtr pDev);
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#a834a356a0e28d90699a8178154588e09">msLinuxOff</a>(DevicePtr pDev);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8h.html#a760648b944ddf26eafb81cf9b54dd976">msLinuxCtrl</a>(DevicePtr pDev, PtrCtrl *ctrl);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#a1ce83df54082f3196ac29e36dea47fc5">msLinuxVTPreSwitch</a>(pointer p);
+<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ms_8c.html#af83993c8cc498cbd9f91737beefb5ea3">msLinuxVTPostSwitch</a>(pointer p);
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-ms_8h.html">lnx-ms.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-ps2_8c.html b/hw/dmx/doc/html/lnx-ps2_8c.html
new file mode 100644
index 0000000..350eaee
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-ps2_8c.html
@@ -0,0 +1,762 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-ps2_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>lnx-ps2.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &lt;X11/Xos.h&gt;</code><br/>
+<code>#include &lt;errno.h&gt;</code><br/>
+<code>#include &lt;termios.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="lnx-ps2_8h_source.html">lnx-ps2.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a7581da9bfd7ebf4fe3703352df521931">PRESS</a>(b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a2b4d2480737f9eb52f80998518486f01">RELEASE</a>(b)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#ad806e9804e49f47d75f252ab0b14c075">ps2LinuxReadBytes</a> (int fd, unsigned char *buf, int len, int min)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">ps2LinuxButton</a> (DevicePtr pDev, ENQUEUEPROC enqueue, int buttons, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">ps2LinuxRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#aaf9aaca79e044d91f072901ad3be1863">ps2LinuxOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#af955e539213ec85f5b6d5d7b38dae89e">ps2LinuxOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a0f65c382ff39d64cd881a919eb566964">ps2LinuxGetMap</a> (DevicePtr pDev, unsigned char *<a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, int *nButtons)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a3a9ac063b46a191b38d92881367d74d4">ps2LinuxVTPreSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#a11a5bfc4866f86dfe3ea5acb788c4afe">ps2LinuxVTPostSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">ps2LinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#af67bcdd060164de0c3a0d3e69c8483ac">ps2LinuxDestroyPrivate</a> (pointer priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8c.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code implements a low-level device driver for a serial MS mouse. The code is derived from code by Keith Packard (see the source code for complete references). </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="lnx&#45;ps2.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="lnx&#45;ps2.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="lnx&#45;ps2.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="lnx&#45;ps2.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="lnx&#45;ps2.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ps2_8h.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="lnx&#45;ps2.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="lnx&#45;ps2.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">ps2LinuxButton()</a>, <a class="el" href="lnx-ps2_8h.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit()</a>, <a class="el" href="lnx-ps2_8h.html#af955e539213ec85f5b6d5d7b38dae89e">ps2LinuxOff()</a>, <a class="el" href="lnx-ps2_8h.html#aaf9aaca79e044d91f072901ad3be1863">ps2LinuxOn()</a>, and <a class="el" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">ps2LinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="lnx&#45;ps2.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="lnx&#45;ps2.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="lnx&#45;ps2.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="lnx&#45;ps2.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="lnx&#45;ps2.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7581da9bfd7ebf4fe3703352df521931"></a><!-- doxytag: member="lnx&#45;ps2.c::PRESS" ref="a7581da9bfd7ebf4fe3703352df521931" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PRESS</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ enqueue(pDev, ButtonPress, 0, 0, NULL, block); \
+ } <span class="keywordflow">while</span> (0)
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a2b4d2480737f9eb52f80998518486f01"></a><!-- doxytag: member="lnx&#45;ps2.c::RELEASE" ref="a2b4d2480737f9eb52f80998518486f01" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define RELEASE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ enqueue(pDev, ButtonRelease, 0, 0, NULL, block); \
+ } <span class="keywordflow">while</span> (0)
+</pre></div>
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="lnx&#45;ps2.c::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="af3ff29bf7e70049ca978bc8fbff4aab6"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxButton" ref="af3ff29bf7e70049ca978bc8fbff4aab6" args="(DevicePtr pDev, ENQUEUEPROC enqueue, int buttons, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void ps2LinuxButton </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>buttons</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-ms_8c.html#a7581da9bfd7ebf4fe3703352df521931">PRESS</a>, and <a class="el" href="lnx-ms_8c.html#a2b4d2480737f9eb52f80998518486f01">RELEASE</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">ps2LinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab6e438a481e24f8c6ef7d731b8ee4fb8"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxCreatePrivate" ref="ab6e438a481e24f8c6ef7d731b8ee4fb8" args="(DeviceIntPtr pMouse)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer ps2LinuxCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pMouse</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate::pMouse</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af67bcdd060164de0c3a0d3e69c8483ac"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxDestroyPrivate" ref="af67bcdd060164de0c3a0d3e69c8483ac" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab914e24acbae5ce49174e06842ac684b"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxGetInfo" ref="ab914e24acbae5ce49174e06842ac684b" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="lnx-ps2_8c.html#a0f65c382ff39d64cd881a919eb566964">ps2LinuxGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0f65c382ff39d64cd881a919eb566964"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxGetMap" ref="a0f65c382ff39d64cd881a919eb566964" args="(DevicePtr pDev, unsigned char *map, int *nButtons)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void ps2LinuxGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>map</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nButtons</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa0f0b690de9e5c3a958909000c7f787d"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxInit" ref="aa0f0b690de9e5c3a958909000c7f787d" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-ps2_8h.html#aaf9aaca79e044d91f072901ad3be1863">ps2LinuxOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af955e539213ec85f5b6d5d7b38dae89e"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxOff" ref="af955e539213ec85f5b6d5d7b38dae89e" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf9aaca79e044d91f072901ad3be1863"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxOn" ref="aaf9aaca79e044d91f072901ad3be1863" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ps2LinuxOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-ps2_8c.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a373ac6b94ea32ce3f7329404ba1ae382"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxRead" ref="a373ac6b94ea32ce3f7329404ba1ae382" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function. </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-ps2_8c.html#af3ff29bf7e70049ca978bc8fbff4aab6">ps2LinuxButton()</a>, and <a class="el" href="lnx-ps2_8c.html#ad806e9804e49f47d75f252ab0b14c075">ps2LinuxReadBytes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad806e9804e49f47d75f252ab0b14c075"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxReadBytes" ref="ad806e9804e49f47d75f252ab0b14c075" args="(int fd, unsigned char *buf, int len, int min)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int ps2LinuxReadBytes </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>min</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">ps2LinuxRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11a5bfc4866f86dfe3ea5acb788c4afe"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxVTPostSwitch" ref="a11a5bfc4866f86dfe3ea5acb788c4afe" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxVTPostSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called after returning from a VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3a9ac063b46a191b38d92881367d74d4"></a><!-- doxytag: member="lnx&#45;ps2.c::ps2LinuxVTPreSwitch" ref="a3a9ac063b46a191b38d92881367d74d4" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxVTPreSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called prior to an VT switch. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-ps2_8c.html">lnx-ps2.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-ps2_8h.html b/hw/dmx/doc/html/lnx-ps2_8h.html
new file mode 100644
index 0000000..25599c0
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-ps2_8h.html
@@ -0,0 +1,318 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-ps2_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>lnx-ps2.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="lnx-ps2_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">ps2LinuxCreatePrivate</a> (DeviceIntPtr pMouse)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#af67bcdd060164de0c3a0d3e69c8483ac">ps2LinuxDestroyPrivate</a> (pointer priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#a0cde2ad6c3aad19be778fc97bb7286a7">ps2LinuxRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#aaf9aaca79e044d91f072901ad3be1863">ps2LinuxOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#af955e539213ec85f5b6d5d7b38dae89e">ps2LinuxOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#a2c7781cb76c926b5a9648e05bc3a1b59">ps2LinuxCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#a3a9ac063b46a191b38d92881367d74d4">ps2LinuxVTPreSwitch</a> (pointer p)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lnx-ps2_8h.html#a11a5bfc4866f86dfe3ea5acb788c4afe">ps2LinuxVTPostSwitch</a> (pointer p)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to Linux PS/2 mouse driver. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="lnx-ps2_8c.html">lnx-ps2.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="ab6e438a481e24f8c6ef7d731b8ee4fb8"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxCreatePrivate" ref="ab6e438a481e24f8c6ef7d731b8ee4fb8" args="(DeviceIntPtr pMouse)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer ps2LinuxCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pMouse</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate::pMouse</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2c7781cb76c926b5a9648e05bc3a1b59"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxCtrl" ref="a2c7781cb76c926b5a9648e05bc3a1b59" args="(DevicePtr pDev, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af67bcdd060164de0c3a0d3e69c8483ac"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxDestroyPrivate" ref="af67bcdd060164de0c3a0d3e69c8483ac" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="ab914e24acbae5ce49174e06842ac684b"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxGetInfo" ref="ab914e24acbae5ce49174e06842ac684b" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="lnx-ps2_8c.html#a0f65c382ff39d64cd881a919eb566964">ps2LinuxGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa0f0b690de9e5c3a958909000c7f787d"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxInit" ref="aa0f0b690de9e5c3a958909000c7f787d" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>.</p>
+
+<p>Referenced by <a class="el" href="lnx-ps2_8h.html#aaf9aaca79e044d91f072901ad3be1863">ps2LinuxOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af955e539213ec85f5b6d5d7b38dae89e"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxOff" ref="af955e539213ec85f5b6d5d7b38dae89e" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaf9aaca79e044d91f072901ad3be1863"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxOn" ref="aaf9aaca79e044d91f072901ad3be1863" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int ps2LinuxOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="lnx-ps2_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="lnx-ps2_8c.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0cde2ad6c3aad19be778fc97bb7286a7"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxRead" ref="a0cde2ad6c3aad19be778fc97bb7286a7" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11a5bfc4866f86dfe3ea5acb788c4afe"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxVTPostSwitch" ref="a11a5bfc4866f86dfe3ea5acb788c4afe" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxVTPostSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called after returning from a VT switch. </p>
+
+</div>
+</div>
+<a class="anchor" id="a3a9ac063b46a191b38d92881367d74d4"></a><!-- doxytag: member="lnx&#45;ps2.h::ps2LinuxVTPreSwitch" ref="a3a9ac063b46a191b38d92881367d74d4" args="(pointer p)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void ps2LinuxVTPreSwitch </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>p</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Currently unused hook called prior to an VT switch. </p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-ps2_8h.html">lnx-ps2.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/lnx-ps2_8h_source.html b/hw/dmx/doc/html/lnx-ps2_8h_source.html
new file mode 100644
index 0000000..f1da6df
--- /dev/null
+++ b/hw/dmx/doc/html/lnx-ps2_8h_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('lnx-ps2_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>lnx-ps2.h</h1> </div>
+</div>
+<div class="contents">
+<a href="lnx-ps2_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2001 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _LNX_PS2_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _LNX_PS2_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a>00040 <span class="keyword">extern</span> pointer <a class="code" href="lnx-ps2_8c.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">ps2LinuxCreatePrivate</a>(DeviceIntPtr pMouse);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#af67bcdd060164de0c3a0d3e69c8483ac">ps2LinuxDestroyPrivate</a>(pointer priv);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#a373ac6b94ea32ce3f7329404ba1ae382">ps2LinuxRead</a>(DevicePtr pDev,
+<a name="l00043"></a>00043 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00044"></a>00044 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00045"></a>00045 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00046"></a>00046 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#aa0f0b690de9e5c3a958909000c7f787d">ps2LinuxInit</a>(DevicePtr pDev);
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00049"></a>00049 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="lnx-ps2_8c.html#aaf9aaca79e044d91f072901ad3be1863">ps2LinuxOn</a>(DevicePtr pDev);
+<a name="l00050"></a>00050 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#af955e539213ec85f5b6d5d7b38dae89e">ps2LinuxOff</a>(DevicePtr pDev);
+<a name="l00051"></a>00051 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8h.html#a2c7781cb76c926b5a9648e05bc3a1b59">ps2LinuxCtrl</a>(DevicePtr pDev, PtrCtrl *ctrl);
+<a name="l00052"></a>00052 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#a3a9ac063b46a191b38d92881367d74d4">ps2LinuxVTPreSwitch</a>(pointer p);
+<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="lnx-ps2_8c.html#a11a5bfc4866f86dfe3ea5acb788c4afe">ps2LinuxVTPostSwitch</a>(pointer p);
+<a name="l00054"></a>00054
+<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="lnx-ps2_8h.html">lnx-ps2.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/nav_f.png b/hw/dmx/doc/html/nav_f.png
new file mode 100644
index 0000000..1b07a16
--- /dev/null
+++ b/hw/dmx/doc/html/nav_f.png
Binary files differ
diff --git a/hw/dmx/doc/html/nav_h.png b/hw/dmx/doc/html/nav_h.png
new file mode 100644
index 0000000..01f5fa6
--- /dev/null
+++ b/hw/dmx/doc/html/nav_h.png
Binary files differ
diff --git a/hw/dmx/doc/html/navtree.css b/hw/dmx/doc/html/navtree.css
new file mode 100644
index 0000000..e46ffcd
--- /dev/null
+++ b/hw/dmx/doc/html/navtree.css
@@ -0,0 +1,123 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ padding:2px;
+ margin:0px;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: 300px;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background:url("ftv2splitbar.png") repeat scroll right center transparent;
+ cursor:e-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+}
+
+
+
diff --git a/hw/dmx/doc/html/navtree.js b/hw/dmx/doc/html/navtree.js
new file mode 100644
index 0000000..13af1f5
--- /dev/null
+++ b/hw/dmx/doc/html/navtree.js
@@ -0,0 +1,394 @@
+var NAVTREE =
+[
+ [ "Distributed Multihead X", "index.html", [
+ [ "Main Page", "index.html", null ],
+ [ "Data Structures", "annotated.html", [
+ [ "_dmxArg", "struct__dmxArg.html", null ],
+ [ "_dmxColormapPriv", "struct__dmxColormapPriv.html", null ],
+ [ "_DMXConfigComment", "struct__DMXConfigComment.html", null ],
+ [ "_DMXConfigDisplay", "struct__DMXConfigDisplay.html", null ],
+ [ "_DMXConfigEntry", "struct__DMXConfigEntry.html", null ],
+ [ "_DMXConfigFullDim", "struct__DMXConfigFullDim.html", null ],
+ [ "_DMXConfigNumber", "struct__DMXConfigNumber.html", null ],
+ [ "_DMXConfigOption", "struct__DMXConfigOption.html", null ],
+ [ "_DMXConfigPair", "struct__DMXConfigPair.html", null ],
+ [ "_DMXConfigParam", "struct__DMXConfigParam.html", null ],
+ [ "_DMXConfigPartDim", "struct__DMXConfigPartDim.html", null ],
+ [ "_DMXConfigString", "struct__DMXConfigString.html", null ],
+ [ "_DMXConfigSub", "struct__DMXConfigSub.html", null ],
+ [ "_DMXConfigToken", "struct__DMXConfigToken.html", null ],
+ [ "_DMXConfigVirtual", "struct__DMXConfigVirtual.html", null ],
+ [ "_DMXConfigWall", "struct__DMXConfigWall.html", null ],
+ [ "_dmxCursorPriv", "struct__dmxCursorPriv.html", null ],
+ [ "_DMXEventMap", "struct__DMXEventMap.html", null ],
+ [ "_dmxFontPriv", "struct__dmxFontPriv.html", null ],
+ [ "_dmxGCPriv", "struct__dmxGCPriv.html", null ],
+ [ "_dmxGlyphPriv", "struct__dmxGlyphPriv.html", null ],
+ [ "_DMXInputInfo", "struct__DMXInputInfo.html", null ],
+ [ "_DMXLocalInitInfo", "struct__DMXLocalInitInfo.html", null ],
+ [ "_DMXLocalInputInfo", "struct__DMXLocalInputInfo.html", null ],
+ [ "_dmxPictPriv", "struct__dmxPictPriv.html", null ],
+ [ "_dmxPixPriv", "struct__dmxPixPriv.html", null ],
+ [ "_DMXScreenInfo", "struct__DMXScreenInfo.html", null ],
+ [ "_DMXStatAvg", "struct__DMXStatAvg.html", null ],
+ [ "_DMXStatInfo", "struct__DMXStatInfo.html", null ],
+ [ "_dmxWinPriv", "struct__dmxWinPriv.html", null ],
+ [ "_myPrivate", "struct__myPrivate.html", null ],
+ [ "DMXConfigCmdStruct", "structDMXConfigCmdStruct.html", null ],
+ [ "DMXConfigListStruct", "structDMXConfigListStruct.html", null ],
+ [ "DMXDesktopAttributesRec", "structDMXDesktopAttributesRec.html", null ],
+ [ "dmxGlxVisualPrivate", "structdmxGlxVisualPrivate.html", null ],
+ [ "DMXInputAttributesRec", "structDMXInputAttributesRec.html", null ],
+ [ "DMXScreenAttributesRec", "structDMXScreenAttributesRec.html", null ],
+ [ "DMXWindowAttributesRec", "structDMXWindowAttributesRec.html", null ],
+ [ "stack", "structstack.html", null ]
+ ] ],
+ [ "Data Structure Index", "classes.html", null ],
+ [ "Data Fields", "functions.html", null ],
+ [ "File List", "files.html", [
+ [ "ChkNotMaskEv.c", "ChkNotMaskEv_8c.html", null ],
+ [ "ChkNotMaskEv.h", "ChkNotMaskEv_8h.html", null ],
+ [ "dmx-config.h", "dmx-config_8h.html", null ],
+ [ "dmx.c", "dmx_8c.html", null ],
+ [ "dmx.h", "dmx_8h.html", null ],
+ [ "dmx_glxvisuals.c", "dmx__glxvisuals_8c.html", null ],
+ [ "dmx_glxvisuals.h", "dmx__glxvisuals_8h.html", null ],
+ [ "dmxarg.c", "dmxarg_8c.html", null ],
+ [ "dmxarg.h", "dmxarg_8h.html", null ],
+ [ "dmxbackend.c", "dmxbackend_8c.html", null ],
+ [ "dmxbackend.h", "dmxbackend_8h.html", null ],
+ [ "dmxcb.c", "dmxcb_8c.html", null ],
+ [ "dmxcb.h", "dmxcb_8h.html", null ],
+ [ "dmxclient.h", "dmxclient_8h.html", null ],
+ [ "dmxcmap.c", "dmxcmap_8c.html", null ],
+ [ "dmxcmap.h", "dmxcmap_8h.html", null ],
+ [ "dmxcommon.c", "dmxcommon_8c.html", null ],
+ [ "dmxcommon.h", "dmxcommon_8h.html", null ],
+ [ "dmxcompat.c", "dmxcompat_8c.html", null ],
+ [ "dmxcompat.h", "dmxcompat_8h.html", null ],
+ [ "dmxconfig.c", "dmxconfig_8c.html", null ],
+ [ "dmxconfig.h", "dmxconfig_8h.html", null ],
+ [ "dmxconsole.c", "dmxconsole_8c.html", null ],
+ [ "dmxconsole.h", "dmxconsole_8h.html", null ],
+ [ "dmxcursor.c", "dmxcursor_8c.html", null ],
+ [ "dmxcursor.h", "dmxcursor_8h.html", null ],
+ [ "dmxdetach.c", "dmxdetach_8c.html", null ],
+ [ "dmxdpms.c", "dmxdpms_8c.html", null ],
+ [ "dmxdpms.h", "dmxdpms_8h.html", null ],
+ [ "dmxdummy.c", "dmxdummy_8c.html", null ],
+ [ "dmxdummy.h", "dmxdummy_8h.html", null ],
+ [ "dmxevents.c", "dmxevents_8c.html", null ],
+ [ "dmxevents.h", "dmxevents_8h.html", null ],
+ [ "dmxextension.c", "dmxextension_8c.html", null ],
+ [ "dmxextension.h", "dmxextension_8h.html", null ],
+ [ "dmxfont.c", "dmxfont_8c.html", null ],
+ [ "dmxfont.h", "dmxfont_8h.html", null ],
+ [ "dmxgc.c", "dmxgc_8c.html", null ],
+ [ "dmxgc.h", "dmxgc_8h.html", null ],
+ [ "dmxgcops.c", "dmxgcops_8c.html", null ],
+ [ "dmxgcops.h", "dmxgcops_8h.html", null ],
+ [ "dmxinit.c", "dmxinit_8c.html", null ],
+ [ "dmxinit.h", "dmxinit_8h.html", null ],
+ [ "dmxinput.c", "dmxinput_8c.html", null ],
+ [ "dmxinput.h", "dmxinput_8h.html", null ],
+ [ "dmxinputinit.c", "dmxinputinit_8c.html", null ],
+ [ "dmxinputinit.h", "dmxinputinit_8h.html", null ],
+ [ "dmxlog.c", "dmxlog_8c.html", null ],
+ [ "dmxlog.h", "dmxlog_8h.html", null ],
+ [ "dmxmap.c", "dmxmap_8c.html", null ],
+ [ "dmxmap.h", "dmxmap_8h.html", null ],
+ [ "dmxmotion.c", "dmxmotion_8c.html", null ],
+ [ "dmxmotion.h", "dmxmotion_8h.html", null ],
+ [ "dmxparse.c", "dmxparse_8c.html", null ],
+ [ "dmxparse.h", "dmxparse_8h.html", null ],
+ [ "dmxpict.c", "dmxpict_8c.html", null ],
+ [ "dmxpict.h", "dmxpict_8h.html", null ],
+ [ "dmxpixmap.c", "dmxpixmap_8c.html", null ],
+ [ "dmxpixmap.h", "dmxpixmap_8h.html", null ],
+ [ "dmxprint.c", "dmxprint_8c.html", null ],
+ [ "dmxprint.h", "dmxprint_8h.html", null ],
+ [ "dmxprop.c", "dmxprop_8c.html", null ],
+ [ "dmxprop.h", "dmxprop_8h.html", null ],
+ [ "dmxscrinit.c", "dmxscrinit_8c.html", null ],
+ [ "dmxscrinit.h", "dmxscrinit_8h.html", null ],
+ [ "dmxshadow.c", "dmxshadow_8c.html", null ],
+ [ "dmxshadow.h", "dmxshadow_8h.html", null ],
+ [ "dmxsigio.c", "dmxsigio_8c.html", null ],
+ [ "dmxsigio.h", "dmxsigio_8h.html", null ],
+ [ "dmxstat.c", "dmxstat_8c.html", null ],
+ [ "dmxstat.h", "dmxstat_8h.html", null ],
+ [ "dmxsync.c", "dmxsync_8c.html", null ],
+ [ "dmxsync.h", "dmxsync_8h.html", null ],
+ [ "dmxtodmx.c", "dmxtodmx_8c.html", null ],
+ [ "dmxvisual.c", "dmxvisual_8c.html", null ],
+ [ "dmxvisual.h", "dmxvisual_8h.html", null ],
+ [ "dmxwindow.c", "dmxwindow_8c.html", null ],
+ [ "dmxwindow.h", "dmxwindow_8h.html", null ],
+ [ "dmxxinput.c", "dmxxinput_8c.html", null ],
+ [ "lnx-keyboard.c", "lnx-keyboard_8c.html", null ],
+ [ "lnx-keyboard.h", "lnx-keyboard_8h.html", null ],
+ [ "lnx-ms.c", "lnx-ms_8c.html", null ],
+ [ "lnx-ms.h", "lnx-ms_8h.html", null ],
+ [ "lnx-ps2.c", "lnx-ps2_8c.html", null ],
+ [ "lnx-ps2.h", "lnx-ps2_8h.html", null ],
+ [ "usb-common.c", "usb-common_8c.html", null ],
+ [ "usb-common.h", "usb-common_8h.html", null ],
+ [ "usb-keyboard.c", "usb-keyboard_8c.html", null ],
+ [ "usb-keyboard.h", "usb-keyboard_8h.html", null ],
+ [ "usb-mouse.c", "usb-mouse_8c.html", null ],
+ [ "usb-mouse.h", "usb-mouse_8h.html", null ],
+ [ "usb-other.c", "usb-other_8c.html", null ],
+ [ "usb-other.h", "usb-other_8h.html", null ],
+ [ "usb-private.h", "usb-private_8h.html", null ],
+ [ "vdltodmx.c", "vdltodmx_8c.html", null ],
+ [ "xdmxconfig.c", "xdmxconfig_8c.html", null ]
+ ] ],
+ [ "Globals", "globals.html", null ]
+ ] ]
+];
+
+function createIndent(o,domNode,node,level)
+{
+ if (node.parentNode && node.parentNode.parentNode)
+ {
+ createIndent(o,domNode,node.parentNode,level+1);
+ }
+ var imgNode = document.createElement("img");
+ if (level==0 && node.childrenData)
+ {
+ node.plus_img = imgNode;
+ node.expandToggle = document.createElement("a");
+ node.expandToggle.href = "javascript:void(0)";
+ node.expandToggle.onclick = function()
+ {
+ if (node.expanded)
+ {
+ $(node.getChildrenUL()).slideUp("fast");
+ if (node.isLast)
+ {
+ node.plus_img.src = node.relpath+"ftv2plastnode.png";
+ }
+ else
+ {
+ node.plus_img.src = node.relpath+"ftv2pnode.png";
+ }
+ node.expanded = false;
+ }
+ else
+ {
+ expandNode(o, node, false);
+ }
+ }
+ node.expandToggle.appendChild(imgNode);
+ domNode.appendChild(node.expandToggle);
+ }
+ else
+ {
+ domNode.appendChild(imgNode);
+ }
+ if (level==0)
+ {
+ if (node.isLast)
+ {
+ if (node.childrenData)
+ {
+ imgNode.src = node.relpath+"ftv2plastnode.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2lastnode.png";
+ domNode.appendChild(imgNode);
+ }
+ }
+ else
+ {
+ if (node.childrenData)
+ {
+ imgNode.src = node.relpath+"ftv2pnode.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2node.png";
+ domNode.appendChild(imgNode);
+ }
+ }
+ }
+ else
+ {
+ if (node.isLast)
+ {
+ imgNode.src = node.relpath+"ftv2blank.png";
+ }
+ else
+ {
+ imgNode.src = node.relpath+"ftv2vertline.png";
+ }
+ }
+ imgNode.border = "0";
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ a.appendChild(node.label);
+ if (link)
+ {
+ a.href = node.relpath+link;
+ }
+ else
+ {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ node.expanded = false;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function()
+ {
+ if (!node.childrenUL)
+ {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+}
+
+function expandNode(o, node, imm)
+{
+ if (node.childrenData && !node.expanded)
+ {
+ if (!node.childrenVisited)
+ {
+ getNode(o, node);
+ }
+ if (imm)
+ {
+ $(node.getChildrenUL()).show();
+ }
+ else
+ {
+ $(node.getChildrenUL()).slideDown("fast",showRoot);
+ }
+ if (node.isLast)
+ {
+ node.plus_img.src = node.relpath+"ftv2mlastnode.png";
+ }
+ else
+ {
+ node.plus_img.src = node.relpath+"ftv2mnode.png";
+ }
+ node.expanded = true;
+ }
+}
+
+function getNode(o, po)
+{
+ po.childrenVisited = true;
+ var l = po.childrenData.length-1;
+ for (var i in po.childrenData)
+ {
+ var nodeData = po.childrenData[i];
+ po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+ i==l);
+ }
+}
+
+function findNavTreePage(url, data)
+{
+ var nodes = data;
+ var result = null;
+ for (var i in nodes)
+ {
+ var d = nodes[i];
+ if (d[1] == url)
+ {
+ return new Array(i);
+ }
+ else if (d[2] != null) // array of children
+ {
+ result = findNavTreePage(url, d[2]);
+ if (result != null)
+ {
+ return (new Array(i).concat(result));
+ }
+ }
+ }
+ return null;
+}
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ o.node.relpath = relpath;
+
+ getNode(o, o.node);
+
+ o.breadcrumbs = findNavTreePage(toroot, NAVTREE);
+ if (o.breadcrumbs == null)
+ {
+ o.breadcrumbs = findNavTreePage("index.html",NAVTREE);
+ }
+ if (o.breadcrumbs != null && o.breadcrumbs.length>0)
+ {
+ var p = o.node;
+ for (var i in o.breadcrumbs)
+ {
+ var j = o.breadcrumbs[i];
+ p = p.children[j];
+ expandNode(o,p,true);
+ }
+ p.itemDiv.className = p.itemDiv.className + " selected";
+ p.itemDiv.id = "selected";
+ $(window).load(showRoot);
+ }
+}
+
diff --git a/hw/dmx/doc/html/open.png b/hw/dmx/doc/html/open.png
new file mode 100644
index 0000000..7b35d2c
--- /dev/null
+++ b/hw/dmx/doc/html/open.png
Binary files differ
diff --git a/hw/dmx/doc/html/resize.js b/hw/dmx/doc/html/resize.js
new file mode 100644
index 0000000..04fa95c
--- /dev/null
+++ b/hw/dmx/doc/html/resize.js
@@ -0,0 +1,81 @@
+var cookie_namespace = 'doxygen';
+var sidenav,navtree,content,header;
+
+function readCookie(cookie)
+{
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie)
+ {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1)
+ {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1)
+ {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+}
+
+function writeCookie(cookie, val, expiration)
+{
+ if (val==undefined) return;
+ if (expiration == null)
+ {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+}
+
+function resizeWidth()
+{
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).width();
+ content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar
+ writeCookie('width',sidenavWidth, null);
+}
+
+function restoreWidth(navWidth)
+{
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+6+"px"});
+ sidenav.css({width:navWidth + "px"});
+}
+
+function resizeHeight()
+{
+ var headerHeight = header.height();
+ var footerHeight = footer.height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ content.css({height:windowHeight + "px"});
+ navtree.css({height:windowHeight + "px"});
+ sidenav.css({height:windowHeight + "px",top: headerHeight+"px"});
+}
+
+function initResizable()
+{
+ header = $("#top");
+ sidenav = $("#side-nav");
+ content = $("#doc-content");
+ navtree = $("#nav-tree");
+ footer = $("#nav-path");
+ $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(window).resize(function() { resizeHeight(); });
+ var width = readCookie('width');
+ if (width) { restoreWidth(width); } else { resizeWidth(); }
+ resizeHeight();
+ var url = location.href;
+ var i=url.indexOf("#");
+ if (i>=0) window.location.hash=url.substr(i);
+ var _preventDefault = function(evt) { evt.preventDefault(); };
+ $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+}
+
+
diff --git a/hw/dmx/doc/html/structDMXConfigCmdStruct.html b/hw/dmx/doc/html/structDMXConfigCmdStruct.html
new file mode 100644
index 0000000..90d5fb3
--- /dev/null
+++ b/hw/dmx/doc/html/structDMXConfigCmdStruct.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structDMXConfigCmdStruct.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>DMXConfigCmdStruct Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="DMXConfigCmdStruct" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">filename</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">config</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">displays</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">inputs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">xinputs</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This stucture stores the parsed configuration information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ad80f9e2045d2548ba872b12b1e2c7b91"></a><!-- doxytag: member="DMXConfigCmdStruct::config" ref="ad80f9e2045d2548ba872b12b1e2c7b91" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structDMXConfigCmdStruct.html#ad80f9e2045d2548ba872b12b1e2c7b91">DMXConfigCmdStruct::config</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxConfigMatch()</a>, and <a class="el" href="dmxconfig_8h.html#a224cf25e04e43ce049574c10ce39b597">dmxConfigStoreConfig()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab530ed54ea672cadf1ed228219a601de"></a><!-- doxytag: member="DMXConfigCmdStruct::displays" ref="ab530ed54ea672cadf1ed228219a601de" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a>* <a class="el" href="structDMXConfigCmdStruct.html#ab530ed54ea672cadf1ed228219a601de">DMXConfigCmdStruct::displays</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, and <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a79e992244c72cd0aa3e4ed3c9a82c380"></a><!-- doxytag: member="DMXConfigCmdStruct::filename" ref="a79e992244c72cd0aa3e4ed3c9a82c380" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structDMXConfigCmdStruct.html#a79e992244c72cd0aa3e4ed3c9a82c380">DMXConfigCmdStruct::filename</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8h.html#a826f729e29c8737ac9bbb9416505cd74">dmxConfigConfigure()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="dmxconfig_8h.html#a41ff0900fb1b1056b02014bf39bee02f">dmxConfigSetMaxScreens()</a>, and <a class="el" href="dmxconfig_8h.html#a6d2a898606f3b373c5a6ebd07d288e53">dmxConfigStoreFile()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af39f2b3673fba1458fe5b95186489b3f"></a><!-- doxytag: member="DMXConfigCmdStruct::inputs" ref="af39f2b3673fba1458fe5b95186489b3f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a>* <a class="el" href="structDMXConfigCmdStruct.html#af39f2b3673fba1458fe5b95186489b3f">DMXConfigCmdStruct::inputs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, and <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1f0051365f3eae01159f34a9fa96dfeb"></a><!-- doxytag: member="DMXConfigCmdStruct::xinputs" ref="a1f0051365f3eae01159f34a9fa96dfeb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="structDMXConfigListStruct.html">DMXConfigList</a>* <a class="el" href="structDMXConfigCmdStruct.html#a1f0051365f3eae01159f34a9fa96dfeb">DMXConfigCmdStruct::xinputs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, and <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structDMXConfigCmdStruct.html">DMXConfigCmdStruct</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structDMXConfigListStruct.html b/hw/dmx/doc/html/structDMXConfigListStruct.html
new file mode 100644
index 0000000..9b03617
--- /dev/null
+++ b/hw/dmx/doc/html/structDMXConfigListStruct.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structDMXConfigListStruct.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>DMXConfigListStruct Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="DMXConfigListStruct" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">next</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores lists of configuration information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ac089d9827a37331a0993cec9e541ba7b"></a><!-- doxytag: member="DMXConfigListStruct::name" ref="ac089d9827a37331a0993cec9e541ba7b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structDMXConfigListStruct.html#ac089d9827a37331a0993cec9e541ba7b">DMXConfigListStruct::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>, <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput()</a>, and <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8ee70f1d27ada33a44e89f2ec31f01a3"></a><!-- doxytag: member="DMXConfigListStruct::next" ref="a8ee70f1d27ada33a44e89f2ec31f01a3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a>* <a class="el" href="structDMXConfigListStruct.html#a8ee70f1d27ada33a44e89f2ec31f01a3">DMXConfigListStruct::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aea3cce9591f89ab89cc581abc6521eee">dmxConfigConfigInputs()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxconfig_8h.html#ac372c2ded30d6c82cc7973f7891d2363">dmxConfigStoreDisplay()</a>, <a class="el" href="dmxconfig_8h.html#aa591f4e1846bc6e6d78c68d77879c900">dmxConfigStoreInput()</a>, and <a class="el" href="dmxconfig_8h.html#ac116ffa05f76ddb8f5920cf3a262e2e5">dmxConfigStoreXInput()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxconfig_8c.html">dmxconfig.c</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structDMXConfigListStruct.html">DMXConfigListStruct</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structDMXDesktopAttributesRec.html b/hw/dmx/doc/html/structDMXDesktopAttributesRec.html
new file mode 100644
index 0000000..2bd87ad
--- /dev/null
+++ b/hw/dmx/doc/html/structDMXDesktopAttributesRec.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structDMXDesktopAttributesRec.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>DMXDesktopAttributesRec Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="DMXDesktopAttributesRec" -->
+<p><code>#include &lt;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">width</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">height</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">shiftX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">shiftY</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Desktop attributes. Used by <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes</a> and <a class="el" href="dmx_8c.html#a021e70d07efcd1a832476c5b225e6cd7">ProcDMXChangeDesktopAttributes</a>. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a7385888bade151dfb3cf953f2b3952ad"></a><!-- doxytag: member="DMXDesktopAttributesRec::height" ref="a7385888bade151dfb3cf953f2b3952ad" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXDesktopAttributesRec.html#a7385888bade151dfb3cf953f2b3952ad">DMXDesktopAttributesRec::height</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmxSetDesktopAttribute()</a>, and <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6d3460904e38d14e4c857164901dd0ff"></a><!-- doxytag: member="DMXDesktopAttributesRec::shiftX" ref="a6d3460904e38d14e4c857164901dd0ff" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXDesktopAttributesRec.html#a6d3460904e38d14e4c857164901dd0ff">DMXDesktopAttributesRec::shiftX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmxSetDesktopAttribute()</a>, and <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a66acb1156ef40a2bc377943d50e0f52f"></a><!-- doxytag: member="DMXDesktopAttributesRec::shiftY" ref="a66acb1156ef40a2bc377943d50e0f52f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXDesktopAttributesRec.html#a66acb1156ef40a2bc377943d50e0f52f">DMXDesktopAttributesRec::shiftY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmxSetDesktopAttribute()</a>, and <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af1d25c0a82bd838fa97b22333892321f"></a><!-- doxytag: member="DMXDesktopAttributesRec::width" ref="af1d25c0a82bd838fa97b22333892321f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXDesktopAttributesRec.html#af1d25c0a82bd838fa97b22333892321f">DMXDesktopAttributesRec::width</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a314e23c5608a9bdaa5f8b8846f7458fc">dmxGetDesktopAttributes()</a>, <a class="el" href="dmx_8c.html#ac34d34dfe1419f4b97f13d9cdf103655">dmxSetDesktopAttribute()</a>, and <a class="el" href="dmx_8c.html#aabe6419a28240a533ea3407a85025e9b">ProcDMXGetDesktopAttributes()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxextension_8h_source.html">dmxextension.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structDMXDesktopAttributesRec.html">DMXDesktopAttributesRec</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structDMXInputAttributesRec.html b/hw/dmx/doc/html/structDMXInputAttributesRec.html
new file mode 100644
index 0000000..0e6fdd0
--- /dev/null
+++ b/hw/dmx/doc/html/structDMXInputAttributesRec.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structDMXInputAttributesRec.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>DMXInputAttributesRec Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="DMXInputAttributesRec" -->
+<p><code>#include &lt;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">inputType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">physicalScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">physicalId</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">isCore</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">sendsCore</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">detached</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Input attributes. Used by <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes</a>. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a114bb5da1e75bd500655a17cbfb99f1f"></a><!-- doxytag: member="DMXInputAttributesRec::detached" ref="a114bb5da1e75bd500655a17cbfb99f1f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXInputAttributesRec.html#a114bb5da1e75bd500655a17cbfb99f1f">DMXInputAttributesRec::detached</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aba63d1a444ff736beababf9ca1f00ec3"></a><!-- doxytag: member="DMXInputAttributesRec::inputType" ref="aba63d1a444ff736beababf9ca1f00ec3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXInputAttributesRec.html#aba63d1a444ff736beababf9ca1f00ec3">DMXInputAttributesRec::inputType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmxSetInputAttribute()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adb896b223fa01c660fa71a4911993d63"></a><!-- doxytag: member="DMXInputAttributesRec::isCore" ref="adb896b223fa01c660fa71a4911993d63" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXInputAttributesRec.html#adb896b223fa01c660fa71a4911993d63">DMXInputAttributesRec::isCore</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ace2798f784b97234c901ef3380f06b93"></a><!-- doxytag: member="DMXInputAttributesRec::name" ref="ace2798f784b97234c901ef3380f06b93" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structDMXInputAttributesRec.html#ace2798f784b97234c901ef3380f06b93">DMXInputAttributesRec::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmx_8c.html#a7e8fccaf7cddc1caba42f0c1307be9a2">ProcDMXAddInput()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aecefabab0214492770a1eaaf7659cd1c"></a><!-- doxytag: member="DMXInputAttributesRec::physicalId" ref="aecefabab0214492770a1eaaf7659cd1c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXInputAttributesRec.html#aecefabab0214492770a1eaaf7659cd1c">DMXInputAttributesRec::physicalId</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3eb115af0ab845d41902894d6de3bb20"></a><!-- doxytag: member="DMXInputAttributesRec::physicalScreen" ref="a3eb115af0ab845d41902894d6de3bb20" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXInputAttributesRec.html#a3eb115af0ab845d41902894d6de3bb20">DMXInputAttributesRec::physicalScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmxSetInputAttribute()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7628a7913aa4f69220807605442fa4ca"></a><!-- doxytag: member="DMXInputAttributesRec::sendsCore" ref="a7628a7913aa4f69220807605442fa4ca" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXInputAttributesRec.html#a7628a7913aa4f69220807605442fa4ca">DMXInputAttributesRec::sendsCore</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#af5d146634762aff17b8c45c4794d33e3">dmxAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmx_8c.html#aa23a71da433ddced8a37f0b1ba60c5ee">dmxSetInputAttribute()</a>, and <a class="el" href="dmx_8c.html#accc76dc52a070ec95d7330357645d175">ProcDMXGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxextension_8h_source.html">dmxextension.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structDMXInputAttributesRec.html">DMXInputAttributesRec</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structDMXScreenAttributesRec.html b/hw/dmx/doc/html/structDMXScreenAttributesRec.html
new file mode 100644
index 0000000..13e667b
--- /dev/null
+++ b/hw/dmx/doc/html/structDMXScreenAttributesRec.html
@@ -0,0 +1,265 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structDMXScreenAttributesRec.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>DMXScreenAttributesRec Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="DMXScreenAttributesRec" -->
+<p><code>#include &lt;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">displayName</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">logicalScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">screenWindowWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">screenWindowHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">screenWindowXoffset</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">screenWindowYoffset</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">rootWindowWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">rootWindowHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">rootWindowXoffset</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">rootWindowYoffset</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">rootWindowXorigin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">rootWindowYorigin</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Screen attributes. Used by <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes</a> and <em>ProcDMXChangeScreensAttributes</em>. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a665be893e5ec84e6b7df834036e39975"></a><!-- doxytag: member="DMXScreenAttributesRec::displayName" ref="a665be893e5ec84e6b7df834036e39975" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="structDMXScreenAttributesRec.html#a665be893e5ec84e6b7df834036e39975">DMXScreenAttributesRec::displayName</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#a129280663f586289ed08218c63775688">ProcDMXAddScreen()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aac840a53c344858b34667e01a952910e"></a><!-- doxytag: member="DMXScreenAttributesRec::logicalScreen" ref="aac840a53c344858b34667e01a952910e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#aac840a53c344858b34667e01a952910e">DMXScreenAttributesRec::logicalScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8508290530961305566fd94990bd2c37"></a><!-- doxytag: member="DMXScreenAttributesRec::rootWindowHeight" ref="a8508290530961305566fd94990bd2c37" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structDMXScreenAttributesRec.html#a8508290530961305566fd94990bd2c37">DMXScreenAttributesRec::rootWindowHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a53f8bc0cdd9a69851ea5a2c14b6a14a1"></a><!-- doxytag: member="DMXScreenAttributesRec::rootWindowWidth" ref="a53f8bc0cdd9a69851ea5a2c14b6a14a1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structDMXScreenAttributesRec.html#a53f8bc0cdd9a69851ea5a2c14b6a14a1">DMXScreenAttributesRec::rootWindowWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5db5a54083e2624b8f58af3b111c8648"></a><!-- doxytag: member="DMXScreenAttributesRec::rootWindowXoffset" ref="a5db5a54083e2624b8f58af3b111c8648" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#a5db5a54083e2624b8f58af3b111c8648">DMXScreenAttributesRec::rootWindowXoffset</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae9cab06391a7353165ee5e6ebe385eb8"></a><!-- doxytag: member="DMXScreenAttributesRec::rootWindowXorigin" ref="ae9cab06391a7353165ee5e6ebe385eb8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#ae9cab06391a7353165ee5e6ebe385eb8">DMXScreenAttributesRec::rootWindowXorigin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a86291b3521d1fecb31ba3f88084b0ef5"></a><!-- doxytag: member="DMXScreenAttributesRec::rootWindowYoffset" ref="a86291b3521d1fecb31ba3f88084b0ef5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#a86291b3521d1fecb31ba3f88084b0ef5">DMXScreenAttributesRec::rootWindowYoffset</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adba7900b874fd0da70981001b9667c83"></a><!-- doxytag: member="DMXScreenAttributesRec::rootWindowYorigin" ref="adba7900b874fd0da70981001b9667c83" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#adba7900b874fd0da70981001b9667c83">DMXScreenAttributesRec::rootWindowYorigin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af3066508831f1b6698b39d6bdf172110"></a><!-- doxytag: member="DMXScreenAttributesRec::screenWindowHeight" ref="af3066508831f1b6698b39d6bdf172110" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structDMXScreenAttributesRec.html#af3066508831f1b6698b39d6bdf172110">DMXScreenAttributesRec::screenWindowHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3b31eedad2369d6c63fd62133cda8fe2"></a><!-- doxytag: member="DMXScreenAttributesRec::screenWindowWidth" ref="a3b31eedad2369d6c63fd62133cda8fe2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned int <a class="el" href="structDMXScreenAttributesRec.html#a3b31eedad2369d6c63fd62133cda8fe2">DMXScreenAttributesRec::screenWindowWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3ab6942e75daddab2bce4854979978cb"></a><!-- doxytag: member="DMXScreenAttributesRec::screenWindowXoffset" ref="a3ab6942e75daddab2bce4854979978cb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#a3ab6942e75daddab2bce4854979978cb">DMXScreenAttributesRec::screenWindowXoffset</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a332d04af8d7c0bd09e51cc4df006569a"></a><!-- doxytag: member="DMXScreenAttributesRec::screenWindowYoffset" ref="a332d04af8d7c0bd09e51cc4df006569a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXScreenAttributesRec.html#a332d04af8d7c0bd09e51cc4df006569a">DMXScreenAttributesRec::screenWindowYoffset</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmx_8c.html#afc844295b520b197203eca198a08b988">dmxSetScreenAttribute()</a>, and <a class="el" href="dmx_8c.html#a235f9df8583e23d75be024d4e9f77a87">ProcDMXGetScreenAttributes()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxextension_8h_source.html">dmxextension.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structDMXScreenAttributesRec.html">DMXScreenAttributesRec</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structDMXWindowAttributesRec.html b/hw/dmx/doc/html/structDMXWindowAttributesRec.html
new file mode 100644
index 0000000..25b65cc
--- /dev/null
+++ b/hw/dmx/doc/html/structDMXWindowAttributesRec.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structDMXWindowAttributesRec.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>DMXWindowAttributesRec Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="DMXWindowAttributesRec" -->
+<p><code>#include &lt;<a class="el" href="dmxextension_8h_source.html">dmxextension.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">screen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">window</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">xRectangle&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">pos</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">xRectangle&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">vis</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Window attributes. Used by <a class="el" href="dmx_8c.html#a53d2083350694f2f57b8eda81fbe5388">ProcDMXGetWindowAttributes</a>. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a73d55840c5f9f2577d5a51712c30cedf"></a><!-- doxytag: member="DMXWindowAttributesRec::pos" ref="a73d55840c5f9f2577d5a51712c30cedf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xRectangle <a class="el" href="structDMXWindowAttributesRec.html#a73d55840c5f9f2577d5a51712c30cedf">DMXWindowAttributesRec::pos</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, and <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4a1dec7a3e658352f4764b4cbcfba15a"></a><!-- doxytag: member="DMXWindowAttributesRec::screen" ref="a4a1dec7a3e658352f4764b4cbcfba15a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structDMXWindowAttributesRec.html#a4a1dec7a3e658352f4764b4cbcfba15a">DMXWindowAttributesRec::screen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, and <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0397906d1b5c5fee806755ce6f06049e"></a><!-- doxytag: member="DMXWindowAttributesRec::vis" ref="a0397906d1b5c5fee806755ce6f06049e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">xRectangle <a class="el" href="structDMXWindowAttributesRec.html#a0397906d1b5c5fee806755ce6f06049e">DMXWindowAttributesRec::vis</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, and <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a782667f9b11d69c0d32149b03713fa46"></a><!-- doxytag: member="DMXWindowAttributesRec::window" ref="a782667f9b11d69c0d32149b03713fa46" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Window <a class="el" href="structDMXWindowAttributesRec.html#a782667f9b11d69c0d32149b03713fa46">DMXWindowAttributesRec::window</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, and <a class="el" href="dmx_8c.html#a686f18ccb493fefc4403401991da115a">dmxPopulate()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxextension_8h_source.html">dmxextension.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structDMXWindowAttributesRec.html">DMXWindowAttributesRec</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigComment.html b/hw/dmx/doc/html/struct__DMXConfigComment.html
new file mode 100644
index 0000000..96f8818
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigComment.html
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigComment.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigComment Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigComment" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">token</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">line</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">comment</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed comments not stored with a token. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a1387eef92c8408b20fbdeea78057bc22"></a><!-- doxytag: member="_DMXConfigComment::comment" ref="a1387eef92c8408b20fbdeea78057bc22" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigComment.html#a1387eef92c8408b20fbdeea78057bc22">_DMXConfigComment::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>, <a class="el" href="dmxparse_8h.html#a1c9b5f8f879ee6872295618c6e1dd232">dmxConfigFreeComment()</a>, and <a class="el" href="dmxprint_8c.html#ad2f603ef56a4db866fcb63a8c78e977e">dmxConfigPrintComment()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5789db611ea38b03cf6cfe75ba9276b0"></a><!-- doxytag: member="_DMXConfigComment::line" ref="a5789db611ea38b03cf6cfe75ba9276b0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigComment.html#a5789db611ea38b03cf6cfe75ba9276b0">_DMXConfigComment::line</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af226b22c22c9925ed1bcba04bfa264e5"></a><!-- doxytag: member="_DMXConfigComment::token" ref="af226b22c22c9925ed1bcba04bfa264e5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigComment.html#af226b22c22c9925ed1bcba04bfa264e5">_DMXConfigComment::token</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ae0619f5f0850b65fefe4df5112aaac05">dmxConfigCreateComment()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigComment.html">_DMXConfigComment</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigDisplay.html b/hw/dmx/doc/html/struct__DMXConfigDisplay.html
new file mode 100644
index 0000000..b3d6af9
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigDisplay.html
@@ -0,0 +1,393 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigDisplay.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigDisplay Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigDisplay" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">scrnWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">scrnHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">scrnX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">scrnY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">scrnXSign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">scrnYSign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">rootWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">rootHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">rootX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">rootY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">rootXSign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">rootYSign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">rootXOrigin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">rootYOrigin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">start</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">dname</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">dim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">origin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">end</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed display information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a45c72329b5db1316df0cef1e448a81e7"></a><!-- doxytag: member="_DMXConfigDisplay::dim" ref="a45c72329b5db1316df0cef1e448a81e7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigFullDim.html">DMXConfigFullDimPtr</a> <a class="el" href="struct__DMXConfigDisplay.html#a45c72329b5db1316df0cef1e448a81e7">_DMXConfigDisplay::dim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a89443ebc48309723160157c81b3eb196"></a><!-- doxytag: member="_DMXConfigDisplay::dname" ref="a89443ebc48309723160157c81b3eb196" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> <a class="el" href="struct__DMXConfigDisplay.html#a89443ebc48309723160157c81b3eb196">_DMXConfigDisplay::dname</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5b4603446018c78bf4d1fa692dd349a1"></a><!-- doxytag: member="_DMXConfigDisplay::end" ref="a5b4603446018c78bf4d1fa692dd349a1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigDisplay.html#a5b4603446018c78bf4d1fa692dd349a1">_DMXConfigDisplay::end</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa44b268403b84baaba5f943b00c0caa1"></a><!-- doxytag: member="_DMXConfigDisplay::name" ref="aa44b268403b84baaba5f943b00c0caa1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7a86b3fc8780285c64b1f71b46d20165"></a><!-- doxytag: member="_DMXConfigDisplay::origin" ref="a7a86b3fc8780285c64b1f71b46d20165" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> <a class="el" href="struct__DMXConfigDisplay.html#a7a86b3fc8780285c64b1f71b46d20165">_DMXConfigDisplay::origin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a576c44a633c820745e0166b0328c9428"></a><!-- doxytag: member="_DMXConfigDisplay::rootHeight" ref="a576c44a633c820745e0166b0328c9428" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay::rootHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6e3eafb8797b5218c3febec39a319d8"></a><!-- doxytag: member="_DMXConfigDisplay::rootWidth" ref="aa6e3eafb8797b5218c3febec39a319d8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay::rootWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1ae1cae8ca5882ca871ac9aa84e63b19"></a><!-- doxytag: member="_DMXConfigDisplay::rootX" ref="a1ae1cae8ca5882ca871ac9aa84e63b19" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay::rootX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a66ec2d91b2138ebc44eecbda0033649a"></a><!-- doxytag: member="_DMXConfigDisplay::rootXOrigin" ref="a66ec2d91b2138ebc44eecbda0033649a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3f8f845a6294f7b2b4d4963296368572"></a><!-- doxytag: member="_DMXConfigDisplay::rootXSign" ref="a3f8f845a6294f7b2b4d4963296368572" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay::rootXSign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afdc4e97d421a7d12002d627cc208e239"></a><!-- doxytag: member="_DMXConfigDisplay::rootY" ref="afdc4e97d421a7d12002d627cc208e239" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay::rootY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a30bc7bf9c591007b64556743ca932108"></a><!-- doxytag: member="_DMXConfigDisplay::rootYOrigin" ref="a30bc7bf9c591007b64556743ca932108" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac741ca152d7feff75a0f610c98f575a9"></a><!-- doxytag: member="_DMXConfigDisplay::rootYSign" ref="ac741ca152d7feff75a0f610c98f575a9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay::rootYSign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a713c10234a650fee7fb91f31a6eb76fb"></a><!-- doxytag: member="_DMXConfigDisplay::scrnHeight" ref="a713c10234a650fee7fb91f31a6eb76fb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad192d6062290e04c1f859eaf68c06122"></a><!-- doxytag: member="_DMXConfigDisplay::scrnWidth" ref="ad192d6062290e04c1f859eaf68c06122" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abd861ea01ca7d68f78d195c3b0542b52"></a><!-- doxytag: member="_DMXConfigDisplay::scrnX" ref="abd861ea01ca7d68f78d195c3b0542b52" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4f8d37c6f5e5f14882ea980fa1af87d6"></a><!-- doxytag: member="_DMXConfigDisplay::scrnXSign" ref="a4f8d37c6f5e5f14882ea980fa1af87d6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0c2fbfb2cac1ca86e8e94cccc96c6079"></a><!-- doxytag: member="_DMXConfigDisplay::scrnY" ref="a0c2fbfb2cac1ca86e8e94cccc96c6079" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acff064fb3eb17d33c13ca5e19a13840c"></a><!-- doxytag: member="_DMXConfigDisplay::scrnYSign" ref="acff064fb3eb17d33c13ca5e19a13840c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae23c3e610b522311db14ab8187045060"></a><!-- doxytag: member="_DMXConfigDisplay::start" ref="ae23c3e610b522311db14ab8187045060" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigDisplay.html#ae23c3e610b522311db14ab8187045060">_DMXConfigDisplay::start</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigDisplay.html">_DMXConfigDisplay</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigEntry.html b/hw/dmx/doc/html/struct__DMXConfigEntry.html
new file mode 100644
index 0000000..757c0c2
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigEntry.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigEntry.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigEntry Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigEntry" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">type</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">comment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">virtual</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">next</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Heads entry storage. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a770a4c024260d1c784c3e3ae93c136ee"></a><!-- doxytag: member="_DMXConfigEntry::comment" ref="a770a4c024260d1c784c3e3ae93c136ee" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> <a class="el" href="struct__DMXConfigEntry.html#a770a4c024260d1c784c3e3ae93c136ee">_DMXConfigEntry::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, and <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a69f77f180912f1ffce742d974da981d7"></a><!-- doxytag: member="_DMXConfigEntry::next" ref="a69f77f180912f1ffce742d974da981d7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a>* <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1082665dbe0f9f61e115a63f416f2e32"></a><!-- doxytag: member="_DMXConfigEntry::type" ref="a1082665dbe0f9f61e115a63f416f2e32" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8e77b8273c49b31ba999a7a182a4cb2c"></a><!-- doxytag: member="_DMXConfigEntry::virtual" ref="a8e77b8273c49b31ba999a7a182a4cb2c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#a402a182c5c9922807ffc7998b4228b24">dmxConfigCreateEntry()</a>, <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, <a class="el" href="dmxparse_8h.html#ab18dcd503e9fbe9d81caa16bf07026ea">dmxConfigFreeEntry()</a>, <a class="el" href="dmxconfig_8c.html#a441a0182ba8329783400aef0930adc85">dmxConfigFromConfigFile()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxConfigMatch()</a>, <a class="el" href="dmxprint_8h.html#a1b8d004f3374959e5851689e058f8133">dmxConfigPrint()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigEntry.html">_DMXConfigEntry</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigFullDim.html b/hw/dmx/doc/html/struct__DMXConfigFullDim.html
new file mode 100644
index 0000000..05c96fb
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigFullDim.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigFullDim.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigFullDim Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigFullDim" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">scrn</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">root</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores a pair of geometry specifications. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a8bc74265fe442d142a610378dabc8afa"></a><!-- doxytag: member="_DMXConfigFullDim::root" ref="a8bc74265fe442d142a610378dabc8afa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> <a class="el" href="struct__DMXConfigFullDim.html#a8bc74265fe442d142a610378dabc8afa">_DMXConfigFullDim::root</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim()</a>, <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3fec14505c810d9566a4369187f4ce6b"></a><!-- doxytag: member="_DMXConfigFullDim::scrn" ref="a3fec14505c810d9566a4369187f4ce6b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPartDim.html">DMXConfigPartDimPtr</a> <a class="el" href="struct__DMXConfigFullDim.html#a3fec14505c810d9566a4369187f4ce6b">_DMXConfigFullDim::scrn</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#ac75eb1b376fb8a510d123ca119ef215e">dmxConfigCreateFullDim()</a>, <a class="el" href="dmxparse_8h.html#ad09f9037b194ad32029047499003a60a">dmxConfigFreeFullDim()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigFullDim.html">_DMXConfigFullDim</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigNumber.html b/hw/dmx/doc/html/struct__DMXConfigNumber.html
new file mode 100644
index 0000000..6a1ba91
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigNumber.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigNumber.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigNumber Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigNumber" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">token</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">line</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">comment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">number</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed numbers. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aa42b9cbe7decdbe3af0249eaae1f0d56"></a><!-- doxytag: member="_DMXConfigNumber::comment" ref="aa42b9cbe7decdbe3af0249eaae1f0d56" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigNumber.html#aa42b9cbe7decdbe3af0249eaae1f0d56">_DMXConfigNumber::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber()</a>, and <a class="el" href="dmxparse_8h.html#a2b8a343fe122733af82e802a01a5f30b">dmxConfigFreeNumber()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a66c727de8b2853e70cb5f58f2ab62762"></a><!-- doxytag: member="_DMXConfigNumber::line" ref="a66c727de8b2853e70cb5f58f2ab62762" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigNumber.html#a66c727de8b2853e70cb5f58f2ab62762">_DMXConfigNumber::line</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a719e274551cdc47c62fd43f44717df27"></a><!-- doxytag: member="_DMXConfigNumber::number" ref="a719e274551cdc47c62fd43f44717df27" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigNumber.html#a719e274551cdc47c62fd43f44717df27">_DMXConfigNumber::number</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a289fd0e588b62964013d3fd435710e92"></a><!-- doxytag: member="_DMXConfigNumber::token" ref="a289fd0e588b62964013d3fd435710e92" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigNumber.html#a289fd0e588b62964013d3fd435710e92">_DMXConfigNumber::token</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a40cfc16a7a8a6f4b21bfb81d03490458">dmxConfigCreateNumber()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigNumber.html">_DMXConfigNumber</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigOption.html b/hw/dmx/doc/html/struct__DMXConfigOption.html
new file mode 100644
index 0000000..7b62234
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigOption.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigOption.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigOption Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigOption" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">string</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">start</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">option</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">end</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed option information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a09999687e48be6f09f3fd94125b169a0"></a><!-- doxytag: member="_DMXConfigOption::end" ref="a09999687e48be6f09f3fd94125b169a0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigOption.html#a09999687e48be6f09f3fd94125b169a0">_DMXConfigOption::end</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, and <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaed667e170cec49dce35060feff00a09"></a><!-- doxytag: member="_DMXConfigOption::option" ref="aaed667e170cec49dce35060feff00a09" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> <a class="el" href="struct__DMXConfigOption.html#aaed667e170cec49dce35060feff00a09">_DMXConfigOption::option</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxConfigCopyFromOption()</a>, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, and <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0dd287594420b7027c63d2ce5b029449"></a><!-- doxytag: member="_DMXConfigOption::start" ref="a0dd287594420b7027c63d2ce5b029449" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigOption.html#a0dd287594420b7027c63d2ce5b029449">_DMXConfigOption::start</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, and <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaed6fb5c802ae023ca5bff07fab01a55"></a><!-- doxytag: member="_DMXConfigOption::string" ref="aaed6fb5c802ae023ca5bff07fab01a55" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="struct__DMXConfigOption.html#aaed6fb5c802ae023ca5bff07fab01a55">_DMXConfigOption::string</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxConfigCopyFromOption()</a>, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a87d839927d1775c43e099e87f6e2ca8d">dmxConfigFreeOption()</a>, and <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigOption.html">_DMXConfigOption</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigPair.html b/hw/dmx/doc/html/struct__DMXConfigPair.html
new file mode 100644
index 0000000..7bfe3fd
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigPair.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigPair.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigPair Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigPair" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">token</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">line</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">comment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">x</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">y</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">xsign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">ysign</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed pairs (e.g., x y) </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a0f38d4d9feafd30ee2e54d14c15ee72d"></a><!-- doxytag: member="_DMXConfigPair::comment" ref="a0f38d4d9feafd30ee2e54d14c15ee72d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigPair.html#a0f38d4d9feafd30ee2e54d14c15ee72d">_DMXConfigPair::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8h.html#a382b3c46caeb7e134e381d732f8d185e">dmxConfigFreePair()</a>, and <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6da615bada6472447bb009d108cdc5d4"></a><!-- doxytag: member="_DMXConfigPair::line" ref="a6da615bada6472447bb009d108cdc5d4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigPair.html#a6da615bada6472447bb009d108cdc5d4">_DMXConfigPair::line</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a530882670c820cc229355ce750e5173a"></a><!-- doxytag: member="_DMXConfigPair::token" ref="a530882670c820cc229355ce750e5173a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigPair.html#a530882670c820cc229355ce750e5173a">_DMXConfigPair::token</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, and <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0e280ace6ccfae354457b60d38f21454"></a><!-- doxytag: member="_DMXConfigPair::x" ref="a0e280ace6ccfae354457b60d38f21454" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigPair.html#a0e280ace6ccfae354457b60d38f21454">_DMXConfigPair::x</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4fd6b9063fe2f5790805ce64f8cbfd11"></a><!-- doxytag: member="_DMXConfigPair::xsign" ref="a4fd6b9063fe2f5790805ce64f8cbfd11" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigPair.html#a4fd6b9063fe2f5790805ce64f8cbfd11">_DMXConfigPair::xsign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0dea17faf035dfdcbf0862760285fdee"></a><!-- doxytag: member="_DMXConfigPair::y" ref="a0dea17faf035dfdcbf0862760285fdee" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigPair.html#a0dea17faf035dfdcbf0862760285fdee">_DMXConfigPair::y</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a40ec327f714f589c6aa08fd6db4af93a"></a><!-- doxytag: member="_DMXConfigPair::ysign" ref="a40ec327f714f589c6aa08fd6db4af93a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigPair.html#a40ec327f714f589c6aa08fd6db4af93a">_DMXConfigPair::ysign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a488a03d25bc380f1bdf786693c644957">dmxConfigCreatePair()</a>, <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, and <a class="el" href="dmxprint_8c.html#a5aec7187f1c5bed538fc446cbb61cc63">dmxConfigPrintPair()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigPair.html">_DMXConfigPair</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigParam.html b/hw/dmx/doc/html/struct__DMXConfigParam.html
new file mode 100644
index 0000000..a4a0ca9
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigParam.html
@@ -0,0 +1,201 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigParam.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigParam Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigParam" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">argc</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">argv</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">start</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">open</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">param</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">close</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">end</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">next</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed param information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a076a5bd8457ac6c95b9114f522209bb1"></a><!-- doxytag: member="_DMXConfigParam::argc" ref="a076a5bd8457ac6c95b9114f522209bb1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigParam.html#a076a5bd8457ac6c95b9114f522209bb1">_DMXConfigParam::argc</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, and <a class="el" href="dmxparse_8h.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a57a37acc8299265678a138da2902947b"></a><!-- doxytag: member="_DMXConfigParam::argv" ref="a57a37acc8299265678a138da2902947b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char** <a class="el" href="struct__DMXConfigParam.html#a57a37acc8299265678a138da2902947b">_DMXConfigParam::argv</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, and <a class="el" href="dmxparse_8h.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6214d2e4937870d17a82da9e9f64c81d"></a><!-- doxytag: member="_DMXConfigParam::close" ref="a6214d2e4937870d17a82da9e9f64c81d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigParam.html#a6214d2e4937870d17a82da9e9f64c81d">_DMXConfigParam::close</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, and <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a115fb02cb41560fcd5b52914a8cb4baa"></a><!-- doxytag: member="_DMXConfigParam::end" ref="a115fb02cb41560fcd5b52914a8cb4baa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigParam.html#a115fb02cb41560fcd5b52914a8cb4baa">_DMXConfigParam::end</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, and <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1e70ee5873aabc8c015330ae0ce3b92f"></a><!-- doxytag: member="_DMXConfigParam::next" ref="a1e70ee5873aabc8c015330ae0ce3b92f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a>* <a class="el" href="struct__DMXConfigParam.html#a1e70ee5873aabc8c015330ae0ce3b92f">_DMXConfigParam::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, <a class="el" href="dmxparse_8h.html#a782be9a8b3118f8a52825041b5c2e8e8">dmxConfigLookupParam()</a>, and <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab5378c0fd40d3c8c6768c758067e0085"></a><!-- doxytag: member="_DMXConfigParam::open" ref="ab5378c0fd40d3c8c6768c758067e0085" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigParam.html#ab5378c0fd40d3c8c6768c758067e0085">_DMXConfigParam::open</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, and <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af635f42c0d12b9b73c71e0eaa666ec0f"></a><!-- doxytag: member="_DMXConfigParam::param" ref="af635f42c0d12b9b73c71e0eaa666ec0f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> <a class="el" href="struct__DMXConfigParam.html#af635f42c0d12b9b73c71e0eaa666ec0f">_DMXConfigParam::param</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, and <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a51a0d65a06aabf172eff81c5f01018ca"></a><!-- doxytag: member="_DMXConfigParam::start" ref="a51a0d65a06aabf172eff81c5f01018ca" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigParam.html#a51a0d65a06aabf172eff81c5f01018ca">_DMXConfigParam::start</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#af978e4f2f42e4d7e01d3d45a4c1b9a4d">dmxConfigFreeParam()</a>, and <a class="el" href="dmxprint_8c.html#a68625f9e37aff73a2a4140662ddf8997">dmxConfigPrintParam()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigParam.html">_DMXConfigParam</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigPartDim.html b/hw/dmx/doc/html/struct__DMXConfigPartDim.html
new file mode 100644
index 0000000..e19b406
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigPartDim.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigPartDim.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigPartDim Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigPartDim" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">dim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">offset</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores a geometry specification. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a82c99c55e14ce5ef7d5fe33b76a9810e"></a><!-- doxytag: member="_DMXConfigPartDim::dim" ref="a82c99c55e14ce5ef7d5fe33b76a9810e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> <a class="el" href="struct__DMXConfigPartDim.html#a82c99c55e14ce5ef7d5fe33b76a9810e">_DMXConfigPartDim::dim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim()</a>, <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab23301813036d4ccb096565865e43ee"></a><!-- doxytag: member="_DMXConfigPartDim::offset" ref="aab23301813036d4ccb096565865e43ee" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> <a class="el" href="struct__DMXConfigPartDim.html#aab23301813036d4ccb096565865e43ee">_DMXConfigPartDim::offset</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#a1740a9f650d43464836c9b0ec44f9659">dmxConfigCreatePartDim()</a>, <a class="el" href="dmxparse_8h.html#a8cb0f116f7c3c5ac3939cd69df06c0fe">dmxConfigFreePartDim()</a>, and <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigPartDim.html">_DMXConfigPartDim</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigString.html b/hw/dmx/doc/html/struct__DMXConfigString.html
new file mode 100644
index 0000000..fbb0153
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigString.html
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigString.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigString Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigString" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">token</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">line</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">comment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">string</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">next</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed strings. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a68a3812610093891aa3f6ac9c84a25e9"></a><!-- doxytag: member="_DMXConfigString::comment" ref="a68a3812610093891aa3f6ac9c84a25e9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigString.html#a68a3812610093891aa3f6ac9c84a25e9">_DMXConfigString::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, and <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae38fed90a55176e6c33013fa06da5c59"></a><!-- doxytag: member="_DMXConfigString::line" ref="ae38fed90a55176e6c33013fa06da5c59" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigString.html#ae38fed90a55176e6c33013fa06da5c59">_DMXConfigString::line</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af123e2436273aa9d19799bf8d6d5e2a6"></a><!-- doxytag: member="_DMXConfigString::next" ref="af123e2436273aa9d19799bf8d6d5e2a6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a>* <a class="el" href="struct__DMXConfigString.html#af123e2436273aa9d19799bf8d6d5e2a6">_DMXConfigString::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxConfigCopyFromOption()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, and <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abf71ceee99527eccff9a76622390e89d"></a><!-- doxytag: member="_DMXConfigString::string" ref="abf71ceee99527eccff9a76622390e89d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigString.html#abf71ceee99527eccff9a76622390e89d">_DMXConfigString::string</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a48c8a79b6592af11c76511bd6ab781dc">dmxConfigCopyFromOption()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxparse_8h.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="dmxparse_8h.html#ad183386657a3549f60760a156fad4fb8">dmxConfigCreateOption()</a>, <a class="el" href="dmxparse_8h.html#a0a4ebd4b3769682daf7a6fed9f11744d">dmxConfigCreateParam()</a>, <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="dmxparse_8h.html#a679f8776dd1a503057891de6483adc49">dmxConfigFreeString()</a>, <a class="el" href="dmxprint_8c.html#a7379c323195ec85a062d1d7db2fa07e1">dmxConfigPrintDisplay()</a>, <a class="el" href="dmxprint_8c.html#a6daa4d844ef2d80e3adcc82dba79e34a">dmxConfigPrintOption()</a>, <a class="el" href="dmxprint_8c.html#a34972dd599132fc3dc322fa76ee60b8b">dmxConfigPrintString()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8a9d70fddf92c8b21c1fc22c14bc11dc"></a><!-- doxytag: member="_DMXConfigString::token" ref="a8a9d70fddf92c8b21c1fc22c14bc11dc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigString.html#a8a9d70fddf92c8b21c1fc22c14bc11dc">_DMXConfigString::token</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#ae285ab0da6d63770365886d413f58432">dmxConfigCreateString()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigString.html">_DMXConfigString</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigSub.html b/hw/dmx/doc/html/struct__DMXConfigSub.html
new file mode 100644
index 0000000..bd06fae
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigSub.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigSub.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigSub Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigSub" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">type</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">comment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">display</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">wall</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">option</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">param</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">next</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores options under an entry (subentry). </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a0c2d9c89e5fd8292b690181b3cd09c93"></a><!-- doxytag: member="_DMXConfigSub::comment" ref="a0c2d9c89e5fd8292b690181b3cd09c93" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigComment.html">DMXConfigCommentPtr</a> <a class="el" href="struct__DMXConfigSub.html#a0c2d9c89e5fd8292b690181b3cd09c93">_DMXConfigSub::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab881a6a0ca612057e889742dd5aaf20e"></a><!-- doxytag: member="_DMXConfigSub::display" ref="ab881a6a0ca612057e889742dd5aaf20e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb9e7e1226bc01cdc1f256b49e826d43"></a><!-- doxytag: member="_DMXConfigSub::next" ref="aeb9e7e1226bc01cdc1f256b49e826d43" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a>* <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub()</a>, <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab98f85159fb67ee2fd6a1523e513ef62"></a><!-- doxytag: member="_DMXConfigSub::option" ref="ab98f85159fb67ee2fd6a1523e513ef62" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigOption.html">DMXConfigOptionPtr</a> <a class="el" href="struct__DMXConfigSub.html#ab98f85159fb67ee2fd6a1523e513ef62">_DMXConfigSub::option</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5719f3b418be1c7e00f2886ae09175d3"></a><!-- doxytag: member="_DMXConfigSub::param" ref="a5719f3b418be1c7e00f2886ae09175d3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigParam.html">DMXConfigParamPtr</a> <a class="el" href="struct__DMXConfigSub.html#a5719f3b418be1c7e00f2886ae09175d3">_DMXConfigSub::param</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a459065584f3b92566855167e989f72ab"></a><!-- doxytag: member="_DMXConfigSub::type" ref="a459065584f3b92566855167e989f72ab" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88">DMXConfigType</a> <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a247f530f0328126dc2467c9f4d40861f"></a><!-- doxytag: member="_DMXConfigSub::wall" ref="a247f530f0328126dc2467c9f4d40861f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigWall.html">DMXConfigWallPtr</a> <a class="el" href="struct__DMXConfigSub.html#a247f530f0328126dc2467c9f4d40861f">_DMXConfigSub::wall</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxparse_8h.html#aa7e24c7be4cc3880e15274a53b627267">dmxConfigCreateSub()</a>, <a class="el" href="dmxparse_8h.html#a07ef1f7f192d2c0d29332fc5c71e89b8">dmxConfigFreeSub()</a>, and <a class="el" href="dmxprint_8c.html#a4430af6fcc1433522052f4577c3ad0f8">dmxConfigPrintSub()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigSub.html">_DMXConfigSub</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigToken.html b/hw/dmx/doc/html/struct__DMXConfigToken.html
new file mode 100644
index 0000000..53ca44e
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigToken.html
@@ -0,0 +1,121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigToken.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigToken Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigToken" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">token</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">line</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">comment</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores tokens not stored in other structures (e.g., keywords and ;) </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a5d6e98d74416a8cc9cfe453618bc8f60"></a><!-- doxytag: member="_DMXConfigToken::comment" ref="a5d6e98d74416a8cc9cfe453618bc8f60" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigToken.html#a5d6e98d74416a8cc9cfe453618bc8f60">_DMXConfigToken::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken()</a>, <a class="el" href="dmxparse_8h.html#a08b933b0269ebf4b22a6b43abbda19e2">dmxConfigFreeToken()</a>, and <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a620f9948af21b7d71d0e2593052efbdb"></a><!-- doxytag: member="_DMXConfigToken::line" ref="a620f9948af21b7d71d0e2593052efbdb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigToken.html#a620f9948af21b7d71d0e2593052efbdb">_DMXConfigToken::line</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken()</a>, and <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1b38f07f74ea8969f6690894b1a55bc9"></a><!-- doxytag: member="_DMXConfigToken::token" ref="a1b38f07f74ea8969f6690894b1a55bc9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigToken.html#a1b38f07f74ea8969f6690894b1a55bc9">_DMXConfigToken::token</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#aaf6df2ea6db8e6f959c72fc28c46f1b2">dmxConfigCreateToken()</a>, and <a class="el" href="dmxprint_8c.html#a0d3a4f6b21e174c7779cec1e7bc45458">dmxConfigPrintTokenFlag()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigToken.html">_DMXConfigToken</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigVirtual.html b/hw/dmx/doc/html/struct__DMXConfigVirtual.html
new file mode 100644
index 0000000..9c11a4c
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigVirtual.html
@@ -0,0 +1,217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigVirtual.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigVirtual Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigVirtual" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">width</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">height</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">start</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">vname</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">dim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">open</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">subentry</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">close</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed virtual information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a18d1aff81158655dd4b7b16afe3078ce"></a><!-- doxytag: member="_DMXConfigVirtual::close" ref="a18d1aff81158655dd4b7b16afe3078ce" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigVirtual.html#a18d1aff81158655dd4b7b16afe3078ce">_DMXConfigVirtual::close</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abff549a2e1cb399ab859cb7626660539"></a><!-- doxytag: member="_DMXConfigVirtual::dim" ref="abff549a2e1cb399ab859cb7626660539" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> <a class="el" href="struct__DMXConfigVirtual.html#abff549a2e1cb399ab859cb7626660539">_DMXConfigVirtual::dim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a47c8c908e8f4090be638de0560dc36c3"></a><!-- doxytag: member="_DMXConfigVirtual::height" ref="a47c8c908e8f4090be638de0560dc36c3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8478674f4416debdfbdb7bff088c0b3b"></a><!-- doxytag: member="_DMXConfigVirtual::name" ref="a8478674f4416debdfbdb7bff088c0b3b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="dmxconfig_8c.html#a6a8c408992d310e3e18b6403bc7a7371">dmxConfigMatch()</a>, <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>, and <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5198b357593cc6aee669887be1b377cb"></a><!-- doxytag: member="_DMXConfigVirtual::open" ref="a5198b357593cc6aee669887be1b377cb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigVirtual.html#a5198b357593cc6aee669887be1b377cb">_DMXConfigVirtual::open</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab70a6b20679f559200b44949fcc9c131"></a><!-- doxytag: member="_DMXConfigVirtual::start" ref="ab70a6b20679f559200b44949fcc9c131" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigVirtual.html#ab70a6b20679f559200b44949fcc9c131">_DMXConfigVirtual::start</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a49c54be6010a37e78bd137a3c30707c6"></a><!-- doxytag: member="_DMXConfigVirtual::subentry" ref="a49c54be6010a37e78bd137a3c30707c6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigSub.html">DMXConfigSubPtr</a> <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="dmxconfig_8c.html#aa8143b3e3871932b1c7ebe5727909304">dmxConfigCopyData()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afe71a0e5dd4a384ec05e4cd6f1d53fb1"></a><!-- doxytag: member="_DMXConfigVirtual::vname" ref="afe71a0e5dd4a384ec05e4cd6f1d53fb1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> <a class="el" href="struct__DMXConfigVirtual.html#afe71a0e5dd4a384ec05e4cd6f1d53fb1">_DMXConfigVirtual::vname</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9f35c8d1f58fdcbc85a2bdfb14a31d71"></a><!-- doxytag: member="_DMXConfigVirtual::width" ref="a9f35c8d1f58fdcbc85a2bdfb14a31d71" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="dmxprint_8c.html#a7f0c5119c35d7d20337b9a772f5761b7">dmxConfigPrintVirtual()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigVirtual.html">_DMXConfigVirtual</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXConfigWall.html b/hw/dmx/doc/html/struct__DMXConfigWall.html
new file mode 100644
index 0000000..f4321d0
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXConfigWall.html
@@ -0,0 +1,217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXConfigWall.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXConfigWall Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXConfigWall" -->
+<p><code>#include &lt;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">width</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">height</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">xwall</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">ywall</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">start</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">wallDim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">displayDim</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">nameList</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">end</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores parsed wall information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a8e1cebc88545b248717bcd180b520550"></a><!-- doxytag: member="_DMXConfigWall::displayDim" ref="a8e1cebc88545b248717bcd180b520550" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> <a class="el" href="struct__DMXConfigWall.html#a8e1cebc88545b248717bcd180b520550">_DMXConfigWall::displayDim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4901fad68a8f34db23e33f26a01ceef7"></a><!-- doxytag: member="_DMXConfigWall::end" ref="a4901fad68a8f34db23e33f26a01ceef7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigWall.html#a4901fad68a8f34db23e33f26a01ceef7">_DMXConfigWall::end</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac7426ee8a3094cd592448f5c974c34b4"></a><!-- doxytag: member="_DMXConfigWall::height" ref="ac7426ee8a3094cd592448f5c974c34b4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigWall.html#ac7426ee8a3094cd592448f5c974c34b4">_DMXConfigWall::height</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, and <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af9c21a05c99a613e29e0c5e715dd3253"></a><!-- doxytag: member="_DMXConfigWall::nameList" ref="af9c21a05c99a613e29e0c5e715dd3253" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigString.html">DMXConfigStringPtr</a> <a class="el" href="struct__DMXConfigWall.html#af9c21a05c99a613e29e0c5e715dd3253">_DMXConfigWall::nameList</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a937d924ff899f484342d19cce6361ffb"></a><!-- doxytag: member="_DMXConfigWall::start" ref="a937d924ff899f484342d19cce6361ffb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigToken.html">DMXConfigTokenPtr</a> <a class="el" href="struct__DMXConfigWall.html#a937d924ff899f484342d19cce6361ffb">_DMXConfigWall::start</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7f260abe78baa2c27ebbf7bc2a5cec42"></a><!-- doxytag: member="_DMXConfigWall::wallDim" ref="a7f260abe78baa2c27ebbf7bc2a5cec42" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigPair.html">DMXConfigPairPtr</a> <a class="el" href="struct__DMXConfigWall.html#a7f260abe78baa2c27ebbf7bc2a5cec42">_DMXConfigWall::wallDim</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>, <a class="el" href="dmxparse_8h.html#aac254e191bb664ec87d44f70f52ce897">dmxConfigFreeWall()</a>, and <a class="el" href="dmxprint_8c.html#a18c2fc381c3949d8740d06691b8c49a8">dmxConfigPrintWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a59d29322c1ad5e4f64fc9fe664dc8971"></a><!-- doxytag: member="_DMXConfigWall::width" ref="a59d29322c1ad5e4f64fc9fe664dc8971" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigWall.html#a59d29322c1ad5e4f64fc9fe664dc8971">_DMXConfigWall::width</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, and <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a614b6db00d9553c064ba1f86cedac6f0"></a><!-- doxytag: member="_DMXConfigWall::xwall" ref="a614b6db00d9553c064ba1f86cedac6f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigWall.html#a614b6db00d9553c064ba1f86cedac6f0">_DMXConfigWall::xwall</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, and <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48eefc8187f8f8df72a50010a8875ccd"></a><!-- doxytag: member="_DMXConfigWall::ywall" ref="a48eefc8187f8f8df72a50010a8875ccd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXConfigWall.html#a48eefc8187f8f8df72a50010a8875ccd">_DMXConfigWall::ywall</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, and <a class="el" href="dmxparse_8h.html#a6078c6ad23fc49e4992cade35f7351b2">dmxConfigCreateWall()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxparse_8h_source.html">dmxparse.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXConfigWall.html">_DMXConfigWall</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXEventMap.html b/hw/dmx/doc/html/struct__DMXEventMap.html
new file mode 100644
index 0000000..188fe64
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXEventMap.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXEventMap.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXEventMap Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXEventMap" -->
+<p><code>#include &lt;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">remote</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">server</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores a mapping between the device id on the remote X server and the id on the DMX server </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aafea1b880cf1b362c7e600b4285c08c3"></a><!-- doxytag: member="_DMXEventMap::remote" ref="aafea1b880cf1b362c7e600b4285c08c3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXEventMap.html#aafea1b880cf1b362c7e600b4285c08c3">_DMXEventMap::remote</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Event number on remote X server </p>
+
+<p>Referenced by <a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear()</a>, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, and <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6f3626351411d6a9555a16969761ec17"></a><!-- doxytag: member="_DMXEventMap::server" ref="a6f3626351411d6a9555a16969761ec17" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXEventMap.html#a6f3626351411d6a9555a16969761ec17">_DMXEventMap::server</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Event number (unbiased) on DMX server </p>
+
+<p>Referenced by <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, and <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXEventMap.html">_DMXEventMap</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXInputInfo.html b/hw/dmx/doc/html/struct__DMXInputInfo.html
new file mode 100644
index 0000000..aa5b14f
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXInputInfo.html
@@ -0,0 +1,428 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXInputInfo.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXInputInfo Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXInputInfo" -->
+<p><code>#include &lt;<a class="el" href="dmxinput_8h_source.html">dmxinput.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">freename</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">detached</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">inputIdx</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">scrnIdx</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">core</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">console</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">windows</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">ProcessInputEventsProc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">processInputEvents</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">UpdateWindowInfoProc</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">updateWindowInfo</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxSigioState</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">sigioState</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">sigioFdCount</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">sigioFd</a> [DMX_MAX_SIGIO_FDS]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">sigioAdded</a> [DMX_MAX_SIGIO_FDS]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">vt_switch_pending</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">vt_switched</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">numDevs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">devs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">keycodes</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">symbols</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">geometry</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>DMXInputInfo is typedef'd in <em><a class="el" href="dmx_8h.html">dmx.h</a></em> so that all routines can have access to the global pointers. However, the elements are only available to input-related routines. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ad967ada8c438519bcd788edd8db2b24a"></a><!-- doxytag: member="_DMXInputInfo::console" ref="ad967ada8c438519bcd788edd8db2b24a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXInputInfo.html#ad967ada8c438519bcd788edd8db2b24a">_DMXInputInfo::console</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if console and backend input share the same backend display </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d84397e241ad4eb146b038f611e2322"></a><!-- doxytag: member="_DMXInputInfo::core" ref="a2d84397e241ad4eb146b038f611e2322" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXInputInfo.html#a2d84397e241ad4eb146b038f611e2322">_DMXInputInfo::core</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If True, initialize these devices as devices that send core events </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0341ff4f1c3424c95e28aac6f80163bb"></a><!-- doxytag: member="_DMXInputInfo::detached" ref="a0341ff4f1c3424c95e28aac6f80163bb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXInputInfo.html#a0341ff4f1c3424c95e28aac6f80163bb">_DMXInputInfo::detached</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If true, input screen is detached </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a2bf59b5de92ff76381543139f7b2c8fa">dmxAdjustCursorBoundaries()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, and <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a70e88af10d1862603d4dbc65ba936d16"></a><!-- doxytag: member="_DMXInputInfo::devs" ref="a70e88af10d1862603d4dbc65ba936d16" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXLocalInputInfo.html">DMXLocalInputInfoPtr</a>* <a class="el" href="struct__DMXInputInfo.html#a70e88af10d1862603d4dbc65ba936d16">_DMXInputInfo::devs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of actual input devices. Each <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> structure can refer to more than one device. For example, the keyboard and the pointer of a backend display; or all of the XInput extension devices on a backend display. </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, and <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a22fa4a87ad87fef6957a9e2bd251a87d"></a><!-- doxytag: member="_DMXInputInfo::freename" ref="a22fa4a87ad87fef6957a9e2bd251a87d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXInputInfo.html#a22fa4a87ad87fef6957a9e2bd251a87d">_DMXInputInfo::freename</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If true, free name on destroy </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, and <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac1ce3fe307cdee42f3f4caf86f58a26c"></a><!-- doxytag: member="_DMXInputInfo::geometry" ref="ac1ce3fe307cdee42f3f4caf86f58a26c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="struct__DMXInputInfo.html#ac1ce3fe307cdee42f3f4caf86f58a26c">_DMXInputInfo::geometry</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XKB geometry from command line </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abf7ccee011844f0cd3af58672f7a6afc"></a><!-- doxytag: member="_DMXInputInfo::inputIdx" ref="abf7ccee011844f0cd3af58672f7a6afc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#abf7ccee011844f0cd3af58672f7a6afc">_DMXInputInfo::inputIdx</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Index into <a class="el" href="dmxinput_8h.html#a067017d9e67716c251357e9edf917e59">dmxInputs</a> global </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a04331378ac5aa4ce803982f3af18428c"></a><!-- doxytag: member="_DMXInputInfo::keycodes" ref="a04331378ac5aa4ce803982f3af18428c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="struct__DMXInputInfo.html#a04331378ac5aa4ce803982f3af18428c">_DMXInputInfo::keycodes</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XKB keycodes from command line </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2336d1b16bdcaa9bc17cc510357de463"></a><!-- doxytag: member="_DMXInputInfo::name" ref="a2336d1b16bdcaa9bc17cc510357de463" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXInputInfo.html#a2336d1b16bdcaa9bc17cc510357de463">_DMXInputInfo::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Name of input display or device (from command line or config file) </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25d88463a7385bc47bed58bb4a662f6d"></a><!-- doxytag: member="_DMXInputInfo::numDevs" ref="a25d88463a7385bc47bed58bb4a662f6d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#a25d88463a7385bc47bed58bb4a662f6d">_DMXInputInfo::numDevs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of devices handled in this <a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> structure. </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, and <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e91aaec0f0cbcd0d7e2896ac918c667"></a><!-- doxytag: member="_DMXInputInfo::processInputEvents" ref="a4e91aaec0f0cbcd0d7e2896ac918c667" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinput_8h.html#acb2c7d7b4029ad06b7bf51b71c37a638">ProcessInputEventsProc</a> <a class="el" href="struct__DMXInputInfo.html#a4e91aaec0f0cbcd0d7e2896ac918c667">_DMXInputInfo::processInputEvents</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinput_8c.html#acf517b24d6b846578e70c059b4afcb1b">ProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaa7ac94b94f2bab1aff58a44dc0dad68"></a><!-- doxytag: member="_DMXInputInfo::scrnIdx" ref="aaa7ac94b94f2bab1aff58a44dc0dad68" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#aaa7ac94b94f2bab1aff58a44dc0dad68">_DMXInputInfo::scrnIdx</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Index into <a class="el" href="dmxinit_8c.html#a3e242a6818df05e547a4776919e3827f">dmxScreens</a> global </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a21dc2639218a59ae564d3eaeb4781a90">dmxConfigAddInput()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinputinit_8h.html#ac3f9807875f237589d57ab9f006735af">dmxInputAttachConsole()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94aafbe9fd94083dc4e1469bec29d9ea"></a><!-- doxytag: member="_DMXInputInfo::sigioAdded" ref="a94aafbe9fd94083dc4e1469bec29d9ea" args="[DMX_MAX_SIGIO_FDS]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXInputInfo.html#a94aafbe9fd94083dc4e1469bec29d9ea">_DMXInputInfo::sigioAdded</a>[DMX_MAX_SIGIO_FDS]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Active fds </p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, and <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2d75d5540ff0a95d822bbb8dfbec197b"></a><!-- doxytag: member="_DMXInputInfo::sigioFd" ref="a2d75d5540ff0a95d822bbb8dfbec197b" args="[DMX_MAX_SIGIO_FDS]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#a2d75d5540ff0a95d822bbb8dfbec197b">_DMXInputInfo::sigioFd</a>[DMX_MAX_SIGIO_FDS]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of fds </p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>, and <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0ba936a9c99af68fa838e45eb7af1c68"></a><!-- doxytag: member="_DMXInputInfo::sigioFdCount" ref="a0ba936a9c99af68fa838e45eb7af1c68" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#a0ba936a9c99af68fa838e45eb7af1c68">_DMXInputInfo::sigioFdCount</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of fds in use </p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>, <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>, and <a class="el" href="dmxsigio_8h.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab7e0499d483754c4a1a9c567edb1c167"></a><!-- doxytag: member="_DMXInputInfo::sigioState" ref="ab7e0499d483754c4a1a9c567edb1c167" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinput_8h.html#abdcaa3561e4107b3e133d221a881fdd4">dmxSigioState</a> <a class="el" href="struct__DMXInputInfo.html#ab7e0499d483754c4a1a9c567edb1c167">_DMXInputInfo::sigioState</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Current stat </p>
+
+<p>Referenced by <a class="el" href="dmxsigio_8c.html#a6651a6fe035f3ba2d8f09a730bc9c0cb">dmxSigioAdd()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, <a class="el" href="dmxsigio_8h.html#ac3cccb6a8d72aaa0c7ac64f061d0b877">dmxSigioRegister()</a>, <a class="el" href="dmxsigio_8c.html#a9d563164ebc1ef320b68136f69bec3aa">dmxSigioRemove()</a>, and <a class="el" href="dmxsigio_8h.html#ac447ef5c9a3aa88a5cb049ea0beecfd2">dmxSigioUnregister()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1795d72d7dda09bd241382129a82202f"></a><!-- doxytag: member="_DMXInputInfo::symbols" ref="a1795d72d7dda09bd241382129a82202f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="struct__DMXInputInfo.html#a1795d72d7dda09bd241382129a82202f">_DMXInputInfo::symbols</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XKB symbols from command line </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#afa044735ab6fae7c75c82243a5159611">dmxInputFree()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad4a7bc0976bf853d45ea5043a66ade55"></a><!-- doxytag: member="_DMXInputInfo::updateWindowInfo" ref="ad4a7bc0976bf853d45ea5043a66ade55" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinput_8h.html#a7d3f5360f968ed1d470b03fbee5d03f0">UpdateWindowInfoProc</a> <a class="el" href="struct__DMXInputInfo.html#ad4a7bc0976bf853d45ea5043a66ade55">_DMXInputInfo::updateWindowInfo</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinput_8h.html#a122b762a283b031348730294d3aa1319">dmxUpdateWindowInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad834410a8c4c7225cd91c9bc96a0344e"></a><!-- doxytag: member="_DMXInputInfo::vt_switch_pending" ref="ad834410a8c4c7225cd91c9bc96a0344e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#ad834410a8c4c7225cd91c9bc96a0344e">_DMXInputInfo::vt_switch_pending</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if a VT switch is pending, but has not yet happened. </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1592eb7fde735ef649c06b6b3f52b632"></a><!-- doxytag: member="_DMXInputInfo::vt_switched" ref="a1592eb7fde735ef649c06b6b3f52b632" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXInputInfo.html#a1592eb7fde735ef649c06b6b3f52b632">_DMXInputInfo::vt_switched</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if a VT switch has happened. </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, and <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a44bbc55fb7a2fef1a88144825755d3ed"></a><!-- doxytag: member="_DMXInputInfo::windows" ref="a44bbc55fb7a2fef1a88144825755d3ed" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXInputInfo.html#a44bbc55fb7a2fef1a88144825755d3ed">_DMXInputInfo::windows</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if window outlines are draw in console </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxinput_8h_source.html">dmxinput.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXInputInfo.html">_DMXInputInfo</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXLocalInitInfo.html b/hw/dmx/doc/html/struct__DMXLocalInitInfo.html
new file mode 100644
index 0000000..4392ff2
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXLocalInitInfo.html
@@ -0,0 +1,594 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXLocalInitInfo.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXLocalInitInfo Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXLocalInitInfo" -->
+<p><code>#include &lt;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">keyboard</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">keyClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">KeySymsRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">keySyms</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">freemap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CARD8&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">modMap</a> [MAP_LENGTH]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XkbDescPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">xkb</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XkbComponentNamesRec&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">names</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">freenames</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">force</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">buttonClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">numButtons</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">map</a> [DMX_MAX_BUTTONS]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">valuatorClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">numRelAxes</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">numAbsAxes</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">minval</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">maxval</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">res</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">minres</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">maxres</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">focusClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">proximityClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">kbdFeedbackClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">ptrFeedbackClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">ledFeedbackClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">belFeedbackClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">intFeedbackClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">strFeedbackClass</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#ae5dc18536a191e46bfe6682f82afd583">maxSymbols</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a8a8933752768b613acbda0743bbcfbe6">maxSymbolsSupported</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">KeySym *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInitInfo.html#a6b496d0ba54c63d406ef46ddcf714790">symbols</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores information from low-level device that is used to initialize the device at the dix level. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a088c60acc5806ebcc401fa1da108b3f5"></a><!-- doxytag: member="_DMXLocalInitInfo::belFeedbackClass" ref="a088c60acc5806ebcc401fa1da108b3f5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">_DMXLocalInitInfo::belFeedbackClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device has a bell </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a58b2e6764967add7eda1c1f2f0860abc"></a><!-- doxytag: member="_DMXLocalInitInfo::buttonClass" ref="a58b2e6764967add7eda1c1f2f0860abc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if buttons are present </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a24b09c34e0cf80ec33f093e908206be4"></a><!-- doxytag: member="_DMXLocalInitInfo::focusClass" ref="a24b09c34e0cf80ec33f093e908206be4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device can cause focus </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>, and <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abb7446114b5bdb0baf52806c9a1d249c"></a><!-- doxytag: member="_DMXLocalInitInfo::force" ref="abb7446114b5bdb0baf52806c9a1d249c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Do not allow command line override </p>
+
+<p>Referenced by <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>, and <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adf6832408c8ef7c3b25eb408907a1459"></a><!-- doxytag: member="_DMXLocalInitInfo::freemap" ref="adf6832408c8ef7c3b25eb408907a1459" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#adf6832408c8ef7c3b25eb408907a1459">_DMXLocalInitInfo::freemap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>If non-zero, free keySyms.map </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a20463b784b2d33db44b377cbbabf8b7b"></a><!-- doxytag: member="_DMXLocalInitInfo::freenames" ref="a20463b784b2d33db44b377cbbabf8b7b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a20463b784b2d33db44b377cbbabf8b7b">_DMXLocalInitInfo::freenames</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if names should be free'd </p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, and <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac0c949f93be45f162c824aae17762dc3"></a><!-- doxytag: member="_DMXLocalInitInfo::intFeedbackClass" ref="ac0c949f93be45f162c824aae17762dc3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#ac0c949f93be45f162c824aae17762dc3">_DMXLocalInitInfo::intFeedbackClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device has integer feedback </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af19caac0e20a9106b73714c9c7991ce5"></a><!-- doxytag: member="_DMXLocalInitInfo::kbdFeedbackClass" ref="af19caac0e20a9106b73714c9c7991ce5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device has keyboard feedback </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>, and <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a214969f0843dcb70d8f7577f58bafa48"></a><!-- doxytag: member="_DMXLocalInitInfo::keyboard" ref="a214969f0843dcb70d8f7577f58bafa48" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if the device is a keyboard </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>, and <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a06626a99542714bbd032e9e12a8c6b55"></a><!-- doxytag: member="_DMXLocalInitInfo::keyClass" ref="a06626a99542714bbd032e9e12a8c6b55" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if keys are present </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>, <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a02861e7e9c24381a229567d36e7a68b7"></a><!-- doxytag: member="_DMXLocalInitInfo::keySyms" ref="a02861e7e9c24381a229567d36e7a68b7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">KeySymsRec <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Key symbols </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a31bf72cac5b5327393423d49a437fc8b">dmxDummyKbdGetInfo()</a>, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>, <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="accf423e8cf2614500108be41ed23492d"></a><!-- doxytag: member="_DMXLocalInitInfo::ledFeedbackClass" ref="accf423e8cf2614500108be41ed23492d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">_DMXLocalInitInfo::ledFeedbackClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device has LED indicators </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a43d86cc82219794bba7ba1ee66472a45"></a><!-- doxytag: member="_DMXLocalInitInfo::map" ref="a43d86cc82219794bba7ba1ee66472a45" args="[DMX_MAX_BUTTONS]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>[DMX_MAX_BUTTONS]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Button map </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5de8a5ac80a30840cba0d9f3074289ca"></a><!-- doxytag: member="_DMXLocalInitInfo::maxres" ref="a5de8a5ac80a30840cba0d9f3074289ca" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Maximum resolutions </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae5dc18536a191e46bfe6682f82afd583"></a><!-- doxytag: member="_DMXLocalInitInfo::maxSymbols" ref="ae5dc18536a191e46bfe6682f82afd583" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#ae5dc18536a191e46bfe6682f82afd583">_DMXLocalInitInfo::maxSymbols</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Maximum symbols </p>
+
+</div>
+</div>
+<a class="anchor" id="a8a8933752768b613acbda0743bbcfbe6"></a><!-- doxytag: member="_DMXLocalInitInfo::maxSymbolsSupported" ref="a8a8933752768b613acbda0743bbcfbe6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a8a8933752768b613acbda0743bbcfbe6">_DMXLocalInitInfo::maxSymbolsSupported</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Maximum symbols supported </p>
+
+</div>
+</div>
+<a class="anchor" id="a63477e691c43eca2dbf569fb0feb74be"></a><!-- doxytag: member="_DMXLocalInitInfo::maxval" ref="a63477e691c43eca2dbf569fb0feb74be" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Maximum values </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a139fed62b89a92d80997166c8cfcdebf"></a><!-- doxytag: member="_DMXLocalInitInfo::minres" ref="a139fed62b89a92d80997166c8cfcdebf" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Minimum resolutions </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0c47ee21909227a1ea5d40ba473e0e25"></a><!-- doxytag: member="_DMXLocalInitInfo::minval" ref="a0c47ee21909227a1ea5d40ba473e0e25" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Minimum values </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2e345080abf875ce6f85e63ed631cbcd"></a><!-- doxytag: member="_DMXLocalInitInfo::modMap" ref="a2e345080abf875ce6f85e63ed631cbcd" args="[MAP_LENGTH]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CARD8 <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>[MAP_LENGTH]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Modifier map </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1c628b807f62aeeeb2093ad63941eff1">dmxBackendKbdGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a710d0bdd587deeb35b430ba48ac209f1">dmxConsoleKbdGetInfo()</a>, <a class="el" href="lnx-keyboard_8h.html#ae65b4fd1c456532a438479b35228d4cf">kbdLinuxGetInfo()</a>, and <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a92de3dbbb88844f90aa431f93e16ee05"></a><!-- doxytag: member="_DMXLocalInitInfo::names" ref="a92de3dbbb88844f90aa431f93e16ee05" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XkbComponentNamesRec <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XKB component names </p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a86b1c983a556770efdd1a19e8be44534">dmxCommonKbdGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#a2969aeffcc1a403f00be11a8d06b3926">dmxKeyboardOn()</a>, and <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa7576ebc7b4f56d51da6a21fcd7b07d4"></a><!-- doxytag: member="_DMXLocalInitInfo::numAbsAxes" ref="aa7576ebc7b4f56d51da6a21fcd7b07d4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo::numAbsAxes</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of absolute axes </p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, and <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9264f367a1c1e252679299b00f94458c"></a><!-- doxytag: member="_DMXLocalInitInfo::numButtons" ref="a9264f367a1c1e252679299b00f94458c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of buttons </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5e192625179bbed020a720e448c789aa"></a><!-- doxytag: member="_DMXLocalInitInfo::numRelAxes" ref="a5e192625179bbed020a720e448c789aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of relative axes </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae870549e09c5ae0ccc6b9d6d01b4c3b5"></a><!-- doxytag: member="_DMXLocalInitInfo::proximityClass" ref="ae870549e09c5ae0ccc6b9d6d01b4c3b5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#ae870549e09c5ae0ccc6b9d6d01b4c3b5">_DMXLocalInitInfo::proximityClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device causes proximity events </p>
+
+<p>Referenced by <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, and <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c52bc6e1c328ef9e808a111dd050fc2"></a><!-- doxytag: member="_DMXLocalInitInfo::ptrFeedbackClass" ref="a1c52bc6e1c328ef9e808a111dd050fc2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device has pointer feedback </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abb910012dc1abde90f954354f8ceb2a1"></a><!-- doxytag: member="_DMXLocalInitInfo::res" ref="abb910012dc1abde90f954354f8ceb2a1" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Resolution </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35ccfe81c3eceefd69abfb7b5ebe02cf"></a><!-- doxytag: member="_DMXLocalInitInfo::strFeedbackClass" ref="a35ccfe81c3eceefd69abfb7b5ebe02cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a35ccfe81c3eceefd69abfb7b5ebe02cf">_DMXLocalInitInfo::strFeedbackClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if device has string feedback </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6b496d0ba54c63d406ef46ddcf714790"></a><!-- doxytag: member="_DMXLocalInitInfo::symbols" ref="a6b496d0ba54c63d406ef46ddcf714790" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">KeySym* <a class="el" href="struct__DMXLocalInitInfo.html#a6b496d0ba54c63d406ef46ddcf714790">_DMXLocalInitInfo::symbols</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Key symbols </p>
+
+</div>
+</div>
+<a class="anchor" id="a9af277d2da1ade2138488a413e9c5ceb"></a><!-- doxytag: member="_DMXLocalInitInfo::valuatorClass" ref="a9af277d2da1ade2138488a413e9c5ceb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if valuators are present </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxcommon_8h.html#a67f944a345e0ba88ac996056914d191c">dmxCommonOthGetInfo()</a>, <a class="el" href="dmxconsole_8h.html#a3d639d0e2a2c3c520f3544f15910ab01">dmxConsoleMouGetInfo()</a>, <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>, <a class="el" href="dmxdummy_8h.html#a0d9cc243adf2eb5869b9ebcca9125bf4">dmxDummyMouGetInfo()</a>, <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>, <a class="el" href="lnx-ms_8h.html#ad650b3779315db603085a045405c9d9a">msLinuxGetInfo()</a>, <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="lnx-ps2_8h.html#ab914e24acbae5ce49174e06842ac684b">ps2LinuxGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a17f7d8bff60a50d216e77e7511106a34"></a><!-- doxytag: member="_DMXLocalInitInfo::xkb" ref="a17f7d8bff60a50d216e77e7511106a34" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XkbDescPtr <a class="el" href="struct__DMXLocalInitInfo.html#a17f7d8bff60a50d216e77e7511106a34">_DMXLocalInitInfo::xkb</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XKB description </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aee6196e74882c16d5cd939d88b3b6fdc">dmxDeviceOnOff()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXLocalInitInfo.html">_DMXLocalInitInfo</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXLocalInputInfo.html b/hw/dmx/doc/html/struct__DMXLocalInputInfo.html
new file mode 100644
index 0000000..1bd8d8a
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXLocalInputInfo.html
@@ -0,0 +1,788 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXLocalInputInfo.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXLocalInputInfo Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXLocalInputInfo" -->
+<p><code>#include &lt;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">DMXLocalInputType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">type</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">DMXLocalInputExtType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">extType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">binding</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxCreatePrivateProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">create_private</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxDestroyPrivateProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">destroy_private</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxInitProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#ac7d8e55012dcd7fd721802069a4cda7c">init</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxReInitProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">reinit</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxLateReInitProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">latereinit</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxGetInfoProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a4d215378947d50a9abc74adcec917313">get_info</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxOnProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a52fc64a76d0954ed17a1d6ec8abbcce2">on</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxOffProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#abbc252251f0694ad7754f021c9b0fdd4">off</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxUpdatePositionProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">update_position</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxVTPreSwitchProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">vt_pre_switch</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxVTPostSwitchProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">vt_post_switch</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxVTSwitchProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">vt_switch</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxCollectEventsProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">collect_events</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxProcessInputProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">process_input</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxFunctionsProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">functions</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxUpdateInfoProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">update_info</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxMCtrlProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">mCtrl</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxKBCtrlProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">kCtrl</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxKBBellProcPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">kBell</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">private</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">isCore</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">sendsCore</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">KeybdCtrl&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">kctrl</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">PtrCtrl&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">mctrl</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DeviceIntPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">pDevice</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">inputIdx</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a65e0e7a4d6928067ba63183c7ddbd03c">lastX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">lastY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a41f2eeca657b0ed5e3000a97a965cb44">head</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#aff792bdb6105dd4b58f57107e8e10ddd">tail</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">history</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">valuators</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a27f8606aec1028f80bd9b21c421e78fe">savedMotionProc</a> )(DeviceIntPtr, xTimecoord *, unsigned long, unsigned long, ScreenPtr)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#af6c6062b7601a71a4dc0b97ef918f150">savedMotionEvents</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">savedSendsCore</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXEventMap.html">DMXEventMap</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">map</a> [DMX_MAP_ENTRIES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">mapOptimize</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">deviceId</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">deviceName</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This is the device-independent structure used by the low-level input routines. The contents are not exposed to top-level .c files (except dmxextensions.c). </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="dmxinput_8h.html">dmxinput.h</a> </dd>
+<dd>
+dmxextensions.c </dd></dl>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a1ed7cce8b5eb7d8cf5b1184d4cdf303c"></a><!-- doxytag: member="_DMXLocalInputInfo::binding" ref="a1ed7cce8b5eb7d8cf5b1184d4cdf303c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#a1ed7cce8b5eb7d8cf5b1184d4cdf303c">_DMXLocalInputInfo::binding</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Count of how many consecutive structs are bound to the same device </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions()</a>, <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, and <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a41e857d61c3f537b0b3df9c8e1870d3b"></a><!-- doxytag: member="_DMXLocalInputInfo::collect_events" ref="a41e857d61c3f537b0b3df9c8e1870d3b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#adcfb97363d7c30f429637f857e07ab89">dmxCollectEventsProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a41e857d61c3f537b0b3df9c8e1870d3b">_DMXLocalInputInfo::collect_events</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Collect and enqueue events from the device </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, and <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a55f67eb2e795c4fb5d323fbfd7561b32"></a><!-- doxytag: member="_DMXLocalInputInfo::create_private" ref="a55f67eb2e795c4fb5d323fbfd7561b32" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#aee05637c82c5006dc39a8a208e59681d">dmxCreatePrivateProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a55f67eb2e795c4fb5d323fbfd7561b32">_DMXLocalInputInfo::create_private</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create device-dependent private </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af07ddc865b07864b2b33694bc8a2e716"></a><!-- doxytag: member="_DMXLocalInputInfo::destroy_private" ref="af07ddc865b07864b2b33694bc8a2e716" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a2da7d7738bd1daf6c24aab0ba07caf54">dmxDestroyPrivateProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#af07ddc865b07864b2b33694bc8a2e716">_DMXLocalInputInfo::destroy_private</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy device-dependent private </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8d7937dfae270e9c0c91dd9518e25dfb"></a><!-- doxytag: member="_DMXLocalInputInfo::deviceId" ref="a8d7937dfae270e9c0c91dd9518e25dfb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">long <a class="el" href="struct__DMXLocalInputInfo.html#a8d7937dfae270e9c0c91dd9518e25dfb">_DMXLocalInputInfo::deviceId</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>device id on remote side, if any </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afb6dc5839d4cb4063e550a431a41d07e"></a><!-- doxytag: member="_DMXLocalInputInfo::deviceName" ref="afb6dc5839d4cb4063e550a431a41d07e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXLocalInputInfo.html#afb6dc5839d4cb4063e550a431a41d07e">_DMXLocalInputInfo::deviceName</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>devive name on remote side, if any </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, and <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae20bd191af90be478c9f4c036c058102"></a><!-- doxytag: member="_DMXLocalInputInfo::extType" ref="ae20bd191af90be478c9f4c036c058102" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#adb3d11ae6b6d741bc4ac9be219eae9ba">DMXLocalInputExtType</a> <a class="el" href="struct__DMXLocalInputInfo.html#ae20bd191af90be478c9f4c036c058102">_DMXLocalInputInfo::extType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Extended device type </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, and <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a352e7cd1ef0188c6fb17554641c56061"></a><!-- doxytag: member="_DMXLocalInputInfo::functions" ref="a352e7cd1ef0188c6fb17554641c56061" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a8b1303060b18fcc2d85f44d658ae75c4">dmxFunctionsProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a352e7cd1ef0188c6fb17554641c56061">_DMXLocalInputInfo::functions</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4d215378947d50a9abc74adcec917313"></a><!-- doxytag: member="_DMXLocalInputInfo::get_info" ref="a4d215378947d50a9abc74adcec917313" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a26894f455a9a482ea75157931a1458d7">dmxGetInfoProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a4d215378947d50a9abc74adcec917313">_DMXLocalInputInfo::get_info</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Get device information </p>
+
+</div>
+</div>
+<a class="anchor" id="a41f2eeca657b0ed5e3000a97a965cb44"></a><!-- doxytag: member="_DMXLocalInputInfo::head" ref="a41f2eeca657b0ed5e3000a97a965cb44" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#a41f2eeca657b0ed5e3000a97a965cb44">_DMXLocalInputInfo::head</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XInput motion history head </p>
+
+</div>
+</div>
+<a class="anchor" id="a82f479f4a5f7f12aebcdbd2967ef9a61"></a><!-- doxytag: member="_DMXLocalInputInfo::history" ref="a82f479f4a5f7f12aebcdbd2967ef9a61" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long* <a class="el" href="struct__DMXLocalInputInfo.html#a82f479f4a5f7f12aebcdbd2967ef9a61">_DMXLocalInputInfo::history</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XInput motion history </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac7d8e55012dcd7fd721802069a4cda7c"></a><!-- doxytag: member="_DMXLocalInputInfo::init" ref="ac7d8e55012dcd7fd721802069a4cda7c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a170923459cb2d78f2a9aa623d3af2a5e">dmxInitProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#ac7d8e55012dcd7fd721802069a4cda7c">_DMXLocalInputInfo::init</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize device </p>
+
+</div>
+</div>
+<a class="anchor" id="ad21d501f062199855fdb259ae1c38f6a"></a><!-- doxytag: member="_DMXLocalInputInfo::inputIdx" ref="ad21d501f062199855fdb259ae1c38f6a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#ad21d501f062199855fdb259ae1c38f6a">_DMXLocalInputInfo::inputIdx</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>High-level index </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a30914bf4af4280ff250adeb3df5ff648"></a><!-- doxytag: member="_DMXLocalInputInfo::isCore" ref="a30914bf4af4280ff250adeb3df5ff648" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#a30914bf4af4280ff250adeb3df5ff648">_DMXLocalInputInfo::isCore</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Is a DMX core device </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, and <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8793874f7d6e2674206922ee14ee1d87"></a><!-- doxytag: member="_DMXLocalInputInfo::kBell" ref="a8793874f7d6e2674206922ee14ee1d87" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a7e43ef34585bcd2dfb1f6c72b46674b0">dmxKBBellProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a8793874f7d6e2674206922ee14ee1d87">_DMXLocalInputInfo::kBell</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bell control </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">_dmxKeyboardBellProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3a55f25979a430029208654302e31a7d"></a><!-- doxytag: member="_DMXLocalInputInfo::kCtrl" ref="a3a55f25979a430029208654302e31a7d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#afd1aa8768fbb96900d4a206a33f0fa10">dmxKBCtrlProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a3a55f25979a430029208654302e31a7d">_DMXLocalInputInfo::kCtrl</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Keyboard control </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">_dmxKeyboardKbdCtrlProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6f412eb3d02d256f4be20e1143ec914f"></a><!-- doxytag: member="_DMXLocalInputInfo::kctrl" ref="a6f412eb3d02d256f4be20e1143ec914f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">KeybdCtrl <a class="el" href="struct__DMXLocalInputInfo.html#a6f412eb3d02d256f4be20e1143ec914f">_DMXLocalInputInfo::kctrl</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Keyboard control </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">_dmxKeyboardBellProc()</a>, and <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">_dmxKeyboardKbdCtrlProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a65e0e7a4d6928067ba63183c7ddbd03c"></a><!-- doxytag: member="_DMXLocalInputInfo::lastX" ref="a65e0e7a4d6928067ba63183c7ddbd03c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#a65e0e7a4d6928067ba63183c7ddbd03c">_DMXLocalInputInfo::lastX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad19b31d235aed327e6e8871803808ee7"></a><!-- doxytag: member="_DMXLocalInputInfo::lastY" ref="ad19b31d235aed327e6e8871803808ee7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#ad19b31d235aed327e6e8871803808ee7">_DMXLocalInputInfo::lastY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Last known position; for XInput in <a class="el" href="dmxevents_8c.html">dmxevents.c</a> </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af3e5dd8989b3f33bc2c404bf190c6948"></a><!-- doxytag: member="_DMXLocalInputInfo::latereinit" ref="af3e5dd8989b3f33bc2c404bf190c6948" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a7710375b1daf4c8a43e1bc45b1459885">dmxLateReInitProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#af3e5dd8989b3f33bc2c404bf190c6948">_DMXLocalInputInfo::latereinit</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reinitialize a device (called very late during a reconfiguration) </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af8ea073e34c4e927f7f887603aaba17d"></a><!-- doxytag: member="_DMXLocalInputInfo::map" ref="af8ea073e34c4e927f7f887603aaba17d" args="[DMX_MAP_ENTRIES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXEventMap.html">DMXEventMap</a> <a class="el" href="struct__DMXLocalInputInfo.html#af8ea073e34c4e927f7f887603aaba17d">_DMXLocalInputInfo::map</a>[DMX_MAP_ENTRIES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XInput device id map </p>
+
+<p>Referenced by <a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear()</a>, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, and <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5595cf8656f17bceb30699a6d215afa5"></a><!-- doxytag: member="_DMXLocalInputInfo::mapOptimize" ref="a5595cf8656f17bceb30699a6d215afa5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#a5595cf8656f17bceb30699a6d215afa5">_DMXLocalInputInfo::mapOptimize</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XInput device id map optimization </p>
+
+<p>Referenced by <a class="el" href="dmxmap_8h.html#a27107d43f96e7c09241d7ef0b5e9c0f5">dmxMapClear()</a>, <a class="el" href="dmxmap_8h.html#ada5a28e0c746708e0f5c45e9e193d907">dmxMapInsert()</a>, and <a class="el" href="dmxmap_8h.html#abc1a46c87c4acd45e4e5f79370be6169">dmxMapLookup()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af0f567a95d587908d2a8570330d904d9"></a><!-- doxytag: member="_DMXLocalInputInfo::mCtrl" ref="af0f567a95d587908d2a8570330d904d9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a663082c69800179ce7177163c231ac9c">dmxMCtrlProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#af0f567a95d587908d2a8570330d904d9">_DMXLocalInputInfo::mCtrl</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pointer control </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">_dmxChangePointerControl()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9583c2a1867b2d3daf428858ba1ae22e"></a><!-- doxytag: member="_DMXLocalInputInfo::mctrl" ref="a9583c2a1867b2d3daf428858ba1ae22e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PtrCtrl <a class="el" href="struct__DMXLocalInputInfo.html#a9583c2a1867b2d3daf428858ba1ae22e">_DMXLocalInputInfo::mctrl</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pointer control </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">_dmxChangePointerControl()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a294006d846990bb8cc6dc67ae59a4604"></a><!-- doxytag: member="_DMXLocalInputInfo::name" ref="a294006d846990bb8cc6dc67ae59a4604" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXLocalInputInfo.html#a294006d846990bb8cc6dc67ae59a4604">_DMXLocalInputInfo::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Device name </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxinputinit_8c.html#aa1d3565232f8ab962246c825bb565bd6">dmxLookupLocal()</a>, and <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abbc252251f0694ad7754f021c9b0fdd4"></a><!-- doxytag: member="_DMXLocalInputInfo::off" ref="abbc252251f0694ad7754f021c9b0fdd4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a73975f436d350bc9d62310c3aa18b970">dmxOffProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#abbc252251f0694ad7754f021c9b0fdd4">_DMXLocalInputInfo::off</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn device off </p>
+
+</div>
+</div>
+<a class="anchor" id="a52fc64a76d0954ed17a1d6ec8abbcce2"></a><!-- doxytag: member="_DMXLocalInputInfo::on" ref="a52fc64a76d0954ed17a1d6ec8abbcce2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#ac047d21e0ad6e06d7e1c8d4ff4bcb689">dmxOnProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a52fc64a76d0954ed17a1d6ec8abbcce2">_DMXLocalInputInfo::on</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn device on </p>
+
+</div>
+</div>
+<a class="anchor" id="ac126083d907b7c450c94e8317abc20c4"></a><!-- doxytag: member="_DMXLocalInputInfo::pDevice" ref="ac126083d907b7c450c94e8317abc20c4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DeviceIntPtr <a class="el" href="struct__DMXLocalInputInfo.html#ac126083d907b7c450c94e8317abc20c4">_DMXLocalInputInfo::pDevice</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>X-level device </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a4f65a9b46fe88b8f530752e3b7769424">_dmxChangePointerControl()</a>, <a class="el" href="dmxinputinit_8c.html#adcea87288c189798602bd610f87ad785">_dmxKeyboardBellProc()</a>, <a class="el" href="dmxinputinit_8c.html#aa785da3b31e5310dd1b1ea13325a83dc">_dmxKeyboardKbdCtrlProc()</a>, <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8h.html#a082f21151ec3d66b75d4613a3612c755">dmxCheckSpecialKeys()</a>, <a class="el" href="dmxinputinit_8c.html#a5f11f622380645150bc9ca3a465ca382">dmxCollectAll()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, <a class="el" href="dmxevents_8c.html#ac8d5c0981946c42f016d4e839eb358e1">dmxGetButtonMapping()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8c.html#a15cdf4e2066f64c2d9bd51906d6ca9a2">dmxInputAttachNew()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#a9d1185c140ba54b24312ff6c98105c15">dmxInputLateReInit()</a>, <a class="el" href="dmxinputinit_8h.html#ae0bcd445301dd91f20c9eb0b6dce0b42">dmxInputLocateId()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit()</a>, <a class="el" href="dmxevents_8c.html#a7e514e6fbb9cec592d987dd82cc5905b">dmxKeyCodeToKeySym()</a>, <a class="el" href="dmxevents_8c.html#a074632ff8623562fa5c99b19a629eb07">dmxKeySymToKeyCode()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxsigio_8c.html#a7d77ce64f0495ed7bb1f5bfcde316371">dmxSigioHandler()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25754def501a2713eb09d4ac2401d624"></a><!-- doxytag: member="_DMXLocalInputInfo::private" ref="a25754def501a2713eb09d4ac2401d624" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer <a class="el" href="struct__DMXLocalInputInfo.html#a25754def501a2713eb09d4ac2401d624">_DMXLocalInputInfo::private</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Device-dependent private </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxevents_8c.html#a7a2de6e9697964a96939e03501fd5d29">dmxApplyFunctions()</a>, <a class="el" href="dmxcommon_8h.html#a0e7301a2783357ff391172acab00d48a">dmxCommonCopyPrivate()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>, <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>, <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>, <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>, <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>, and <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa83350027ea60a4cbf2ca061f66ee9cc"></a><!-- doxytag: member="_DMXLocalInputInfo::process_input" ref="aa83350027ea60a4cbf2ca061f66ee9cc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#ad4cb1ed046822462a5d60edeebcbf586">dmxProcessInputProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#aa83350027ea60a4cbf2ca061f66ee9cc">_DMXLocalInputInfo::process_input</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Process event (from queue) </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a5f2e0a323aa9ea0dc0a0d1f5195c5e26">dmxProcessInputEvents()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6f3438399957a92b7914c12eee23d33"></a><!-- doxytag: member="_DMXLocalInputInfo::reinit" ref="aa6f3438399957a92b7914c12eee23d33" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#ae9c6f42a280d980b6b99d7e05b27c3c9">dmxReInitProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#aa6f3438399957a92b7914c12eee23d33">_DMXLocalInputInfo::reinit</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Reinitialize device (during a reconfiguration) </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ac8f3465a13cae73a3d657526643ef7b7">dmxInputReInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af6c6062b7601a71a4dc0b97ef918f150"></a><!-- doxytag: member="_DMXLocalInputInfo::savedMotionEvents" ref="af6c6062b7601a71a4dc0b97ef918f150" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#af6c6062b7601a71a4dc0b97ef918f150">_DMXLocalInputInfo::savedMotionEvents</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Saved motion events </p>
+
+</div>
+</div>
+<a class="anchor" id="a27f8606aec1028f80bd9b21c421e78fe"></a><!-- doxytag: member="_DMXLocalInputInfo::savedMotionProc" ref="a27f8606aec1028f80bd9b21c421e78fe" args=")(DeviceIntPtr, xTimecoord *, unsigned long, unsigned long, ScreenPtr)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int(* <a class="el" href="struct__DMXLocalInputInfo.html#a27f8606aec1028f80bd9b21c421e78fe">_DMXLocalInputInfo::savedMotionProc</a>)(DeviceIntPtr, xTimecoord *, unsigned long, unsigned long, ScreenPtr)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a258242cde474bdc4ab120d14a3dcd2cb"></a><!-- doxytag: member="_DMXLocalInputInfo::savedSendsCore" ref="a258242cde474bdc4ab120d14a3dcd2cb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#a258242cde474bdc4ab120d14a3dcd2cb">_DMXLocalInputInfo::savedSendsCore</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Saved sends-core flag </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc70bb1491ee209bcba538cc9d4972e4"></a><!-- doxytag: member="_DMXLocalInputInfo::sendsCore" ref="afc70bb1491ee209bcba538cc9d4972e4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#afc70bb1491ee209bcba538cc9d4972e4">_DMXLocalInputInfo::sendsCore</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Sends DMX core events </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxinputinit_8h.html#aaba396b9c08ac672d3dcf6561ac57b40">dmxChangePointerControl()</a>, <a class="el" href="dmxevents_8c.html#a382acebe1e5e976d7edc31fc27fcdd6f">dmxCheckFunctionKeys()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxextension_8h.html#a3bde3bbb52470b5eb185805d861e6216">dmxGetInputAttributes()</a>, <a class="el" href="dmxinputinit_8c.html#a328d0a700148af94b3dccf354b313c84">dmxInputAttachOld()</a>, <a class="el" href="dmxinputinit_8h.html#a816d1052ef5a587ef8e16b0005b06662">dmxInputCopyLocal()</a>, <a class="el" href="dmxinputinit_8h.html#ac4d026f31f7b32bd571bdcf9e091c419">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8c.html#ac5bfc30ece32ae2af838c9e45857dc36">dmxInputLogDevices()</a>, <a class="el" href="dmxinputinit_8h.html#ab127903bdb6bf262e51f128b4cec4960">dmxKeyboardBellProc()</a>, and <a class="el" href="dmxinputinit_8h.html#ad23e145891ad0fb1c909d85ca8e4fe19">dmxKeyboardKbdCtrlProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aff792bdb6105dd4b58f57107e8e10ddd"></a><!-- doxytag: member="_DMXLocalInputInfo::tail" ref="aff792bdb6105dd4b58f57107e8e10ddd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXLocalInputInfo.html#aff792bdb6105dd4b58f57107e8e10ddd">_DMXLocalInputInfo::tail</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>XInput motion history tail </p>
+
+</div>
+</div>
+<a class="anchor" id="a65770e9c1265d5765c16028e740b7d88"></a><!-- doxytag: member="_DMXLocalInputInfo::type" ref="a65770e9c1265d5765c16028e740b7d88" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#aa3fce3ce186af0687bc43e0e4930181b">DMXLocalInputType</a> <a class="el" href="struct__DMXLocalInputInfo.html#a65770e9c1265d5765c16028e740b7d88">_DMXLocalInputInfo::type</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Device type </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a54b496c8474a33844549ed64913456fe">dmxAddDevice()</a>, <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>, <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>, <a class="el" href="dmxinputinit_8c.html#a5845f0dbf305a8a233d3747489745faa">dmxInputInit()</a>, <a class="el" href="dmxinputinit_8c.html#ab57781b7672c11bee1430a47d5118e9e">dmxInputScanForExtensions()</a>, <a class="el" href="dmxinputinit_8c.html#ac312d24e4289c3b39964428a6e39a219">dmxMakeUniqueDeviceName()</a>, <a class="el" href="dmxinputinit_8c.html#ac4ea57a3ba798705d63254cdbbefb63d">dmxPopulateLocal()</a>, and <a class="el" href="dmxevents_8c.html#ae0083a2b1547708473cbc75ebf0006ae">dmxTranslateAndEnqueueExtEvent()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6c12bcf94eec2868d5cf455ced266c2"></a><!-- doxytag: member="_DMXLocalInputInfo::update_info" ref="aa6c12bcf94eec2868d5cf455ced266c2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a85e276bf34bacc668c901e37fd787dfc">dmxUpdateInfoProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#aa6c12bcf94eec2868d5cf455ced266c2">_DMXLocalInputInfo::update_info</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Update window layout information </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#ab8d8ef4b4e4f8e022a1452765e1f1e12">dmxUpdateWindowInformation()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a12eb4b3d8237801c42d5042035315035"></a><!-- doxytag: member="_DMXLocalInputInfo::update_position" ref="a12eb4b3d8237801c42d5042035315035" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#a23f7990e959535436e5a29aaf43e09f0">dmxUpdatePositionProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a12eb4b3d8237801c42d5042035315035">_DMXLocalInputInfo::update_position</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called when another device updates the cursor position </p>
+
+<p>Referenced by <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, and <a class="el" href="dmxevents_8c.html#a8463e76279fff9479a552b69c4754273">dmxExtMotion()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7df8a3276a848aed8937df58755a78ce"></a><!-- doxytag: member="_DMXLocalInputInfo::valuators" ref="a7df8a3276a848aed8937df58755a78ce" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* <a class="el" href="struct__DMXLocalInputInfo.html#a7df8a3276a848aed8937df58755a78ce">_DMXLocalInputInfo::valuators</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Cache of previous values </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#aa124c7cd547a9993834becc6e4aebe63">dmxInputFreeLocal()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a82c8765ddfb788835cb4f0e94eca2e84"></a><!-- doxytag: member="_DMXLocalInputInfo::vt_post_switch" ref="a82c8765ddfb788835cb4f0e94eca2e84" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#aba1f3ed3e0d93c6fea0448b6f928132b">dmxVTPostSwitchProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a82c8765ddfb788835cb4f0e94eca2e84">_DMXLocalInputInfo::vt_post_switch</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called after a VT switch </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a72e77569074807987e358e4eda38c044">dmxSwitchReturn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a04beb9f31d342ea399ffcfb7e7f62138"></a><!-- doxytag: member="_DMXLocalInputInfo::vt_pre_switch" ref="a04beb9f31d342ea399ffcfb7e7f62138" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#af7ef16143e5a5fa77c00cacdd710abf0">dmxVTPreSwitchProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a04beb9f31d342ea399ffcfb7e7f62138">_DMXLocalInputInfo::vt_pre_switch</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Called before a VT switch </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c7d7da1d1a8ebfebb90f3d8e3592c50"></a><!-- doxytag: member="_DMXLocalInputInfo::vt_switch" ref="a4c7d7da1d1a8ebfebb90f3d8e3592c50" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmxinputinit_8h.html#af276a0d0ad01b9c9f8485cdf9b218b92">dmxVTSwitchProcPtr</a> <a class="el" href="struct__DMXLocalInputInfo.html#a4c7d7da1d1a8ebfebb90f3d8e3592c50">_DMXLocalInputInfo::vt_switch</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Causes a VT switch </p>
+
+<p>Referenced by <a class="el" href="dmxinputinit_8c.html#a812e98c3ae4436f403739fc6f58eda6c">dmxWakeupHandler()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXLocalInputInfo.html">_DMXLocalInputInfo</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXScreenInfo.html b/hw/dmx/doc/html/struct__DMXScreenInfo.html
new file mode 100644
index 0000000..208f809
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXScreenInfo.html
@@ -0,0 +1,1673 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXScreenInfo.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXScreenInfo Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXScreenInfo" -->
+<p><code>#include &lt;<a class="el" href="dmx_8h_source.html">dmx.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">name</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">index</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Display *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">beDisplay</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">beWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">beHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">beDepth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">beBPP</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">beXDPI</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">beYDPI</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">beNumDepths</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">beDepths</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">beNumPixmapFormats</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XPixmapFormatValues *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">bePixmapFormats</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">beNumVisuals</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XVisualInfo *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">beVisuals</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">beDefVisualIndex</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">beNumDefColormaps</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Colormap *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">beDefColormaps</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Pixel&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">beBlackPixel</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Pixel&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">beWhitePixel</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">scrnWin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">scrnX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">scrnY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">scrnWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">scrnHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">scrnXSign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">scrnYSign</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Drawable&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">scrnDefDrawables</a> [MAXFORMATS]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">next</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">over</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">rootWin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">rootX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">rootY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">rootWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">rootHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">rootXOrigin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">rootYOrigin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">shadow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XlibGC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">shadowGC</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XImage *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">shadowFBImage</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">shared</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">WMRunningOnBE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">noCursor</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">curCursor</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CursorPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">cursor</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">cursorVisible</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">cursorNotShared</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">PositionType</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">where</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">whereX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">whereY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">whereRefScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">savedTimeout</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">dpmsCapable</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">dpmsEnabled</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">dpmsStandby</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">dpmsSuspend</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">dpmsOff</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">stat</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">needsSync</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CloseScreenProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a94a4815bc20535c8946876d2113b109e">CloseScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">SaveScreenProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a357f02026fd7a4d50e682c87554b15a7">SaveScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CreateGCProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a0608031d93f0f78df41e66fc8e8107cf">CreateGC</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CreateWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a19123a8915a37e821ef46bc63f646d8d">CreateWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DestroyWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a0d204177b5df7dab4a89741439728a56">DestroyWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">PositionWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#afad6bda7c2505a7fedabdf055f7838c5">PositionWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ChangeWindowAttributesProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a35d0114e24f9eeff1f5649bcb0b00d71">ChangeWindowAttributes</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RealizeWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a2b3ed1977ce205b1bb518393e1b434f6">RealizeWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">UnrealizeWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a7b72d30e072b0f1a5f1e89ae9c1155f0">UnrealizeWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RestackWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a8c16eedf083215c4076fcd8851cf6bc2">RestackWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">WindowExposuresProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a526c7fea5a2a39d325eab3fd4efb503d">WindowExposures</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CopyWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a8f1472064bae45d6b59bee2580a185aa">CopyWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ResizeWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a949c2799e41ad4f4384cc862df4022fd">ResizeWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ReparentWindowProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a71362d4473da8793f624eaa6a9ac61af">ReparentWindow</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ChangeBorderWidthProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a134b8b97ce93ef4601c972d0fb760e93">ChangeBorderWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">GetImageProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ad622affb2a1524a15f9bad149fa88f30">GetImage</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">GetSpansProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ad399c770af1784544ede0253593b3700">GetSpans</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CreatePixmapProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a88d8c787b8e05b4d69fa3d91f6456542">CreatePixmap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DestroyPixmapProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#adafeb1337d14d4f650098f3bd06214db">DestroyPixmap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">BitmapToRegionProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a1d29c3ada0aab8fbcd88c5ceaa48cf2d">BitmapToRegion</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">RealizeFontProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a22e93c0020eab3f889c54093ad32348e">RealizeFont</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">UnrealizeFontProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#af46646c951db10afab56244b5345a6d8">UnrealizeFont</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CreateColormapProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a082a4bae927eb9bbbd87cebdfd4d9dfc">CreateColormap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DestroyColormapProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a0a407c422f268db1da74672d572102bb">DestroyColormap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">InstallColormapProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ab5a18ace3bb18cbcc9e127f51c494006">InstallColormap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">StoreColorsProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#addce695c56fcc40e89b5c5add6a09205">StoreColors</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">SetShapeProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ad4273ba541b4d7e50c967c42d80733bb">SetShape</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CreatePictureProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#adf17f1a03e6a5a127b02aaa9005d8089">CreatePicture</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DestroyPictureProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a31909a1072cd78345457bd6b0c81ac1c">DestroyPicture</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ChangePictureClipProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a62a21ad708a96cb1653e8d572895b1de">ChangePictureClip</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DestroyPictureClipProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ab643ec0c295421859733b8f654ff8ce7">DestroyPictureClip</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ChangePictureProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a933b5c32ef1671dae5acc1e96b7f34e3">ChangePicture</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">ValidatePictureProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a627ae18aeaa92da0923ab49803470c71">ValidatePicture</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CompositeProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a5e70f79e08b658092d83d266686c9a67">Composite</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">GlyphsProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#ab2bf09e1d055cad3ecfb1b00ddadc89e">Glyphs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CompositeRectsProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a2b5509668e39153253b7d7d945dddecb">CompositeRects</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">InitIndexedProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#adaae790d6f5dd1dec98e57e2e669e3fd">InitIndexed</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CloseIndexedProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a99c75513907782d2679bd9e2ed327621">CloseIndexed</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">UpdateIndexedProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#afa11a2993fe14ec90db2de382cdeb25c">UpdateIndexed</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">TrapezoidsProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a4008b17ac4eb89816a8c2d3ce2e14421">Trapezoids</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">TrianglesProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#af37150652184c4865700576504ec9df9">Triangles</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">TriStripProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a5918dec3813c47c24f52f076f1b05dc4">TriStrip</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">TriFanProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXScreenInfo.html#a0829ea4299b5afcb1d2f2894334fed69">TriFan</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Global structure containing information about each backend screen. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="adc481961d93d200f67ca722b32d17608"></a><!-- doxytag: member="_DMXScreenInfo::beBlackPixel" ref="adc481961d93d200f67ca722b32d17608" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Pixel <a class="el" href="struct__DMXScreenInfo.html#adc481961d93d200f67ca722b32d17608">_DMXScreenInfo::beBlackPixel</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Default black pixel for BE </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, and <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5e865cb99dd73ba18991912af275994f"></a><!-- doxytag: member="_DMXScreenInfo::beBPP" ref="a5e865cb99dd73ba18991912af275994f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a5e865cb99dd73ba18991912af275994f">_DMXScreenInfo::beBPP</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bits per pixel of BE display </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acd24913b53592c9a65bbc52f43f7409a"></a><!-- doxytag: member="_DMXScreenInfo::beDefColormaps" ref="acd24913b53592c9a65bbc52f43f7409a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Colormap* <a class="el" href="struct__DMXScreenInfo.html#acd24913b53592c9a65bbc52f43f7409a">_DMXScreenInfo::beDefColormaps</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Default colormaps for DMX server </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, and <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1288c3902e2e1f871947e854269562e8"></a><!-- doxytag: member="_DMXScreenInfo::beDefVisualIndex" ref="a1288c3902e2e1f871947e854269562e8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a1288c3902e2e1f871947e854269562e8">_DMXScreenInfo::beDefVisualIndex</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Default visual index of BE </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac435223f6a5921beab567cc23b83f07f"></a><!-- doxytag: member="_DMXScreenInfo::beDepth" ref="ac435223f6a5921beab567cc23b83f07f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#ac435223f6a5921beab567cc23b83f07f">_DMXScreenInfo::beDepth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Depth of BE display </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4e0c6ff0cf4b00ac0d7d1f3702343033"></a><!-- doxytag: member="_DMXScreenInfo::beDepths" ref="a4e0c6ff0cf4b00ac0d7d1f3702343033" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int* <a class="el" href="struct__DMXScreenInfo.html#a4e0c6ff0cf4b00ac0d7d1f3702343033">_DMXScreenInfo::beDepths</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Depths from BE server </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a756ade62a55a52f163a42db6de54c244"></a><!-- doxytag: member="_DMXScreenInfo::beDisplay" ref="a756ade62a55a52f163a42db6de54c244" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Display* <a class="el" href="struct__DMXScreenInfo.html#a756ade62a55a52f163a42db6de54c244">_DMXScreenInfo::beDisplay</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Back-end X server's display </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxcursor_8c.html#aa2ac82b5666d162e873c7f0c88ec96f6">_dmxUnrealizeCursor()</a>, <a class="el" href="dmxinit_8c.html#a240efc1ef89432ea436d61512e7b1ca6">AbortDDX()</a>, <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#ad6238c7e9b114585583ce9b2120ff9fa">dmxBackendPendingMotionEvent()</a>, <a class="el" href="dmxbackend_8c.html#a0122fce9552a793ecffc2a6f1e03b4fc">dmxBackendTestEvents()</a>, <a class="el" href="dmxbackend_8c.html#a772eea70f63c028de57f6d9e5bb48fbe">dmxBackendTestMotionEvent()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>, <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxfont_8c.html#a3d2eb9a1b065a02dbe58ee4e85ff6247">dmxCheckFontPath()</a>, <a class="el" href="dmxfont_8c.html#a177c3268bf91715dc536db6b6f8eed72">dmxCheckFontPathElement()</a>, <a class="el" href="dmxinit_8h.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, <a class="el" href="dmxcommon_8c.html#a82d9ce21ede8d533adde28ce8dbabdf7">dmxCommonAddEnabledDevice()</a>, <a class="el" href="dmxcommon_8c.html#adb5e0faaefc43851e4ebcd01bd9c10ec">dmxCommonRemoveEnabledDevice()</a>, <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxcmap_8h.html#a07f6c7d8523b669b5fa614cbe5c0e1ad">dmxCreateColormap()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxcmap_8h.html#ab12dcafef41b3dc821dc1ecd220735c3">dmxDestroyColormap()</a>, <a class="el" href="dmxgc_8h.html#a7f33d96c7308bec0eb74822316c7ff23">dmxDestroyGC()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>, <a class="el" href="dmxextension_8h.html#a027f2cb3fe32b06f3ca3b04df8336299">dmxDetachScreen()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>, <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>, <a class="el" href="dmxpict_8c.html#aa154f0c705ffdaf3770cd87c478db004">dmxFindFormat()</a>, <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>, <a class="el" href="dmxgcops_8h.html#ace88d57bbb8edfcdc3e7206e59c1e30f">dmxGetImage()</a>, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmxvisual_8h.html#a1abfce5d0ad66062cc75a5293c514499">dmxLookupVisualFromID()</a>, <a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>, <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxscrinit_8c.html#af59f4754af961e2be5f6ef2ce4f5bfcc">dmxSaveScreen()</a>, <a class="el" href="dmxfont_8c.html#ad20ddd111e4a45bf1bdfd45744946c72">dmxSetFontPath()</a>, <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats()</a>, <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>, <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>, <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a713ca6d9bf7a4527f442519554e1fc94"></a><!-- doxytag: member="_DMXScreenInfo::beHeight" ref="a713ca6d9bf7a4527f442519554e1fc94" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a713ca6d9bf7a4527f442519554e1fc94">_DMXScreenInfo::beHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Height of BE display </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3a70f31b272f686b4df2bb98e25f0902"></a><!-- doxytag: member="_DMXScreenInfo::beNumDefColormaps" ref="a3a70f31b272f686b4df2bb98e25f0902" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a3a70f31b272f686b4df2bb98e25f0902">_DMXScreenInfo::beNumDefColormaps</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of default colormaps </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, and <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a896eeff4d8c92af936bbb1c24b8ad081"></a><!-- doxytag: member="_DMXScreenInfo::beNumDepths" ref="a896eeff4d8c92af936bbb1c24b8ad081" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a896eeff4d8c92af936bbb1c24b8ad081">_DMXScreenInfo::beNumDepths</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of depths on BE server </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6476a8960e2013a9502c326f8851071c"></a><!-- doxytag: member="_DMXScreenInfo::beNumPixmapFormats" ref="a6476a8960e2013a9502c326f8851071c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a6476a8960e2013a9502c326f8851071c">_DMXScreenInfo::beNumPixmapFormats</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of pixmap formats on BE </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, and <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4edb26469ac99eccb762f668615c4b83"></a><!-- doxytag: member="_DMXScreenInfo::beNumVisuals" ref="a4edb26469ac99eccb762f668615c4b83" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a4edb26469ac99eccb762f668615c4b83">_DMXScreenInfo::beNumVisuals</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of visuals on BE </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>, <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c13d3cbcad4da61fe677e96cb781543"></a><!-- doxytag: member="_DMXScreenInfo::bePixmapFormats" ref="a1c13d3cbcad4da61fe677e96cb781543" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XPixmapFormatValues* <a class="el" href="struct__DMXScreenInfo.html#a1c13d3cbcad4da61fe677e96cb781543">_DMXScreenInfo::bePixmapFormats</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Pixmap formats on BE </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#abe45fd724cbfceb085e23ac62e276afd">dmxGetPixmapFormats()</a>, and <a class="el" href="dmxinit_8c.html#a079d21ac984182efb7bb07bfa242f743">dmxSetPixmapFormats()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a33651a812fe70c8229f395c2bb38b45c"></a><!-- doxytag: member="_DMXScreenInfo::beVisuals" ref="a33651a812fe70c8229f395c2bb38b45c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XVisualInfo* <a class="el" href="struct__DMXScreenInfo.html#a33651a812fe70c8229f395c2bb38b45c">_DMXScreenInfo::beVisuals</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Visuals from BE server </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, <a class="el" href="dmxvisual_8h.html#aca13684e9357c96035388a924d8af570">dmxColormapFromDefaultVisual()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxcb_8h.html#a39179d932cde34ab3c947fa017d2d78d">dmxConnectionBlockCallback()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>, <a class="el" href="dmxinit_8h.html#a6ae3c95f86743822940a155e6770663d">dmxGetVisualInfo()</a>, <a class="el" href="dmxvisual_8h.html#a5adae45cafd52da17108cbfcdbd5d53c">dmxLookupVisual()</a>, <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa57407aa11d2c07346bd6ad5b443a147"></a><!-- doxytag: member="_DMXScreenInfo::beWhitePixel" ref="aa57407aa11d2c07346bd6ad5b443a147" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Pixel <a class="el" href="struct__DMXScreenInfo.html#aa57407aa11d2c07346bd6ad5b443a147">_DMXScreenInfo::beWhitePixel</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Default white pixel for BE </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, and <a class="el" href="dmxinit_8h.html#a04bd6a93ac85484e9eba0dcec858edf3">dmxGetColormaps()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aaa160ae9fce9f7c58bb9f6c0a9709861"></a><!-- doxytag: member="_DMXScreenInfo::beWidth" ref="aaa160ae9fce9f7c58bb9f6c0a9709861" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#aaa160ae9fce9f7c58bb9f6c0a9709861">_DMXScreenInfo::beWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Width of BE display </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a1afb0902ffb9019c943b0c4db6315209">dmxBackendMouGetInfo()</a>, <a class="el" href="dmxextension_8c.html#abeb7f9d39d2cfa3b57c7ab9942fcea69">dmxCompareScreens()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef4fb640cf089a1ebbf87a144f25cd80"></a><!-- doxytag: member="_DMXScreenInfo::beXDPI" ref="aef4fb640cf089a1ebbf87a144f25cd80" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#aef4fb640cf089a1ebbf87a144f25cd80">_DMXScreenInfo::beXDPI</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Horizontal dots per inch of BE </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>, and <a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7646aaa7101d53566be4506a2c3b75fb"></a><!-- doxytag: member="_DMXScreenInfo::beYDPI" ref="a7646aaa7101d53566be4506a2c3b75fb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a7646aaa7101d53566be4506a2c3b75fb">_DMXScreenInfo::beYDPI</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Vertical dots per inch of BE </p>
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, and <a class="el" href="dmxextension_8h.html#a602b3c05cd619a8b00d91315009ebc5d">dmxUpdateScreenResources()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1d29c3ada0aab8fbcd88c5ceaa48cf2d"></a><!-- doxytag: member="_DMXScreenInfo::BitmapToRegion" ref="a1d29c3ada0aab8fbcd88c5ceaa48cf2d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">BitmapToRegionProcPtr <a class="el" href="struct__DMXScreenInfo.html#a1d29c3ada0aab8fbcd88c5ceaa48cf2d">_DMXScreenInfo::BitmapToRegion</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a134b8b97ce93ef4601c972d0fb760e93"></a><!-- doxytag: member="_DMXScreenInfo::ChangeBorderWidth" ref="a134b8b97ce93ef4601c972d0fb760e93" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ChangeBorderWidthProcPtr <a class="el" href="struct__DMXScreenInfo.html#a134b8b97ce93ef4601c972d0fb760e93">_DMXScreenInfo::ChangeBorderWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a933b5c32ef1671dae5acc1e96b7f34e3"></a><!-- doxytag: member="_DMXScreenInfo::ChangePicture" ref="a933b5c32ef1671dae5acc1e96b7f34e3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ChangePictureProcPtr <a class="el" href="struct__DMXScreenInfo.html#a933b5c32ef1671dae5acc1e96b7f34e3">_DMXScreenInfo::ChangePicture</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a62a21ad708a96cb1653e8d572895b1de"></a><!-- doxytag: member="_DMXScreenInfo::ChangePictureClip" ref="a62a21ad708a96cb1653e8d572895b1de" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ChangePictureClipProcPtr <a class="el" href="struct__DMXScreenInfo.html#a62a21ad708a96cb1653e8d572895b1de">_DMXScreenInfo::ChangePictureClip</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a35d0114e24f9eeff1f5649bcb0b00d71"></a><!-- doxytag: member="_DMXScreenInfo::ChangeWindowAttributes" ref="a35d0114e24f9eeff1f5649bcb0b00d71" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ChangeWindowAttributesProcPtr <a class="el" href="struct__DMXScreenInfo.html#a35d0114e24f9eeff1f5649bcb0b00d71">_DMXScreenInfo::ChangeWindowAttributes</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a99c75513907782d2679bd9e2ed327621"></a><!-- doxytag: member="_DMXScreenInfo::CloseIndexed" ref="a99c75513907782d2679bd9e2ed327621" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CloseIndexedProcPtr <a class="el" href="struct__DMXScreenInfo.html#a99c75513907782d2679bd9e2ed327621">_DMXScreenInfo::CloseIndexed</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a94a4815bc20535c8946876d2113b109e"></a><!-- doxytag: member="_DMXScreenInfo::CloseScreen" ref="a94a4815bc20535c8946876d2113b109e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CloseScreenProcPtr <a class="el" href="struct__DMXScreenInfo.html#a94a4815bc20535c8946876d2113b109e">_DMXScreenInfo::CloseScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Function pointers to wrapped screen functions </p>
+
+</div>
+</div>
+<a class="anchor" id="a5e70f79e08b658092d83d266686c9a67"></a><!-- doxytag: member="_DMXScreenInfo::Composite" ref="a5e70f79e08b658092d83d266686c9a67" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CompositeProcPtr <a class="el" href="struct__DMXScreenInfo.html#a5e70f79e08b658092d83d266686c9a67">_DMXScreenInfo::Composite</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b5509668e39153253b7d7d945dddecb"></a><!-- doxytag: member="_DMXScreenInfo::CompositeRects" ref="a2b5509668e39153253b7d7d945dddecb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CompositeRectsProcPtr <a class="el" href="struct__DMXScreenInfo.html#a2b5509668e39153253b7d7d945dddecb">_DMXScreenInfo::CompositeRects</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8f1472064bae45d6b59bee2580a185aa"></a><!-- doxytag: member="_DMXScreenInfo::CopyWindow" ref="a8f1472064bae45d6b59bee2580a185aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CopyWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a8f1472064bae45d6b59bee2580a185aa">_DMXScreenInfo::CopyWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a082a4bae927eb9bbbd87cebdfd4d9dfc"></a><!-- doxytag: member="_DMXScreenInfo::CreateColormap" ref="a082a4bae927eb9bbbd87cebdfd4d9dfc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CreateColormapProcPtr <a class="el" href="struct__DMXScreenInfo.html#a082a4bae927eb9bbbd87cebdfd4d9dfc">_DMXScreenInfo::CreateColormap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0608031d93f0f78df41e66fc8e8107cf"></a><!-- doxytag: member="_DMXScreenInfo::CreateGC" ref="a0608031d93f0f78df41e66fc8e8107cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CreateGCProcPtr <a class="el" href="struct__DMXScreenInfo.html#a0608031d93f0f78df41e66fc8e8107cf">_DMXScreenInfo::CreateGC</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adf17f1a03e6a5a127b02aaa9005d8089"></a><!-- doxytag: member="_DMXScreenInfo::CreatePicture" ref="adf17f1a03e6a5a127b02aaa9005d8089" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CreatePictureProcPtr <a class="el" href="struct__DMXScreenInfo.html#adf17f1a03e6a5a127b02aaa9005d8089">_DMXScreenInfo::CreatePicture</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a88d8c787b8e05b4d69fa3d91f6456542"></a><!-- doxytag: member="_DMXScreenInfo::CreatePixmap" ref="a88d8c787b8e05b4d69fa3d91f6456542" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CreatePixmapProcPtr <a class="el" href="struct__DMXScreenInfo.html#a88d8c787b8e05b4d69fa3d91f6456542">_DMXScreenInfo::CreatePixmap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a19123a8915a37e821ef46bc63f646d8d"></a><!-- doxytag: member="_DMXScreenInfo::CreateWindow" ref="a19123a8915a37e821ef46bc63f646d8d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CreateWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a19123a8915a37e821ef46bc63f646d8d">_DMXScreenInfo::CreateWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aec1712642a093f935194bfe49d0d4050"></a><!-- doxytag: member="_DMXScreenInfo::curCursor" ref="aec1712642a093f935194bfe49d0d4050" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Cursor <a class="el" href="struct__DMXScreenInfo.html#aec1712642a093f935194bfe49d0d4050">_DMXScreenInfo::curCursor</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7a61b71888a4d7c6eefa3cde29bbd677"></a><!-- doxytag: member="_DMXScreenInfo::cursor" ref="a7a61b71888a4d7c6eefa3cde29bbd677" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CursorPtr <a class="el" href="struct__DMXScreenInfo.html#a7a61b71888a4d7c6eefa3cde29bbd677">_DMXScreenInfo::cursor</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor()</a>, and <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a83dd882008eb7e54cc81987a23ab9fd5"></a><!-- doxytag: member="_DMXScreenInfo::cursorNotShared" ref="a83dd882008eb7e54cc81987a23ab9fd5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a83dd882008eb7e54cc81987a23ab9fd5">_DMXScreenInfo::cursorNotShared</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a68f4dfcb582f9470e09c10a6e21ec5e3"></a><!-- doxytag: member="_DMXScreenInfo::cursorVisible" ref="a68f4dfcb582f9470e09c10a6e21ec5e3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a68f4dfcb582f9470e09c10a6e21ec5e3">_DMXScreenInfo::cursorVisible</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, and <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0a407c422f268db1da74672d572102bb"></a><!-- doxytag: member="_DMXScreenInfo::DestroyColormap" ref="a0a407c422f268db1da74672d572102bb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DestroyColormapProcPtr <a class="el" href="struct__DMXScreenInfo.html#a0a407c422f268db1da74672d572102bb">_DMXScreenInfo::DestroyColormap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a31909a1072cd78345457bd6b0c81ac1c"></a><!-- doxytag: member="_DMXScreenInfo::DestroyPicture" ref="a31909a1072cd78345457bd6b0c81ac1c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DestroyPictureProcPtr <a class="el" href="struct__DMXScreenInfo.html#a31909a1072cd78345457bd6b0c81ac1c">_DMXScreenInfo::DestroyPicture</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab643ec0c295421859733b8f654ff8ce7"></a><!-- doxytag: member="_DMXScreenInfo::DestroyPictureClip" ref="ab643ec0c295421859733b8f654ff8ce7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DestroyPictureClipProcPtr <a class="el" href="struct__DMXScreenInfo.html#ab643ec0c295421859733b8f654ff8ce7">_DMXScreenInfo::DestroyPictureClip</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="adafeb1337d14d4f650098f3bd06214db"></a><!-- doxytag: member="_DMXScreenInfo::DestroyPixmap" ref="adafeb1337d14d4f650098f3bd06214db" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DestroyPixmapProcPtr <a class="el" href="struct__DMXScreenInfo.html#adafeb1337d14d4f650098f3bd06214db">_DMXScreenInfo::DestroyPixmap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0d204177b5df7dab4a89741439728a56"></a><!-- doxytag: member="_DMXScreenInfo::DestroyWindow" ref="a0d204177b5df7dab4a89741439728a56" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DestroyWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a0d204177b5df7dab4a89741439728a56">_DMXScreenInfo::DestroyWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3f540a0bcac0e813a4b7ad3f34a19277"></a><!-- doxytag: member="_DMXScreenInfo::dpmsCapable" ref="a3f540a0bcac0e813a4b7ad3f34a19277" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a3f540a0bcac0e813a4b7ad3f34a19277">_DMXScreenInfo::dpmsCapable</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if backend is DPMS capable </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, and <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3ad975d6c25329c21456c1f880dc68f6"></a><!-- doxytag: member="_DMXScreenInfo::dpmsEnabled" ref="a3ad975d6c25329c21456c1f880dc68f6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a3ad975d6c25329c21456c1f880dc68f6">_DMXScreenInfo::dpmsEnabled</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if DPMS enabled </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, and <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a69a70ba630e23bab0141886f2d49eb31"></a><!-- doxytag: member="_DMXScreenInfo::dpmsOff" ref="a69a70ba630e23bab0141886f2d49eb31" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a69a70ba630e23bab0141886f2d49eb31">_DMXScreenInfo::dpmsOff</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Original DPMS off value </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, and <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abf64e2489557ef84c84c1e36b1fccb83"></a><!-- doxytag: member="_DMXScreenInfo::dpmsStandby" ref="abf64e2489557ef84c84c1e36b1fccb83" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#abf64e2489557ef84c84c1e36b1fccb83">_DMXScreenInfo::dpmsStandby</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Original DPMS standby value </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, and <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7dab70abf22a5ec34fced3ba2fbd25d0"></a><!-- doxytag: member="_DMXScreenInfo::dpmsSuspend" ref="a7dab70abf22a5ec34fced3ba2fbd25d0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a7dab70abf22a5ec34fced3ba2fbd25d0">_DMXScreenInfo::dpmsSuspend</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Original DPMS suspend value </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8c.html#afd14a12acf152c0a881144aff85e584a">_dmxDPMSInit()</a>, and <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad622affb2a1524a15f9bad149fa88f30"></a><!-- doxytag: member="_DMXScreenInfo::GetImage" ref="ad622affb2a1524a15f9bad149fa88f30" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GetImageProcPtr <a class="el" href="struct__DMXScreenInfo.html#ad622affb2a1524a15f9bad149fa88f30">_DMXScreenInfo::GetImage</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad399c770af1784544ede0253593b3700"></a><!-- doxytag: member="_DMXScreenInfo::GetSpans" ref="ad399c770af1784544ede0253593b3700" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GetSpansProcPtr <a class="el" href="struct__DMXScreenInfo.html#ad399c770af1784544ede0253593b3700">_DMXScreenInfo::GetSpans</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab2bf09e1d055cad3ecfb1b00ddadc89e"></a><!-- doxytag: member="_DMXScreenInfo::Glyphs" ref="ab2bf09e1d055cad3ecfb1b00ddadc89e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GlyphsProcPtr <a class="el" href="struct__DMXScreenInfo.html#ab2bf09e1d055cad3ecfb1b00ddadc89e">_DMXScreenInfo::Glyphs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a28849096f73f9bf14bb7e461dbb5cc94"></a><!-- doxytag: member="_DMXScreenInfo::index" ref="a28849096f73f9bf14bb7e461dbb5cc94" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a28849096f73f9bf14bb7e461dbb5cc94">_DMXScreenInfo::index</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Index into dmxScreens global </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxbackend_8h.html#a941213c5a98d26e0f30391ee312e1436">dmxBackendInit()</a>, <a class="el" href="dmxbackend_8c.html#a86a56e6c6d23ef0f13d1d4ee8f84a162">dmxBackendTestScreen()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxcursor_8h.html#ad67e1086ef62ecfa33549d74cd89a379">dmxHideCursor()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxdetach_8c.html#adcf530802f6d092e58a6db38efb0498c">dmxInputDetach()</a>, <a class="el" href="dmxinputinit_8h.html#adec246343ae8402c7cc47b19020c7ef7">dmxInputDetachAll()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adaae790d6f5dd1dec98e57e2e669e3fd"></a><!-- doxytag: member="_DMXScreenInfo::InitIndexed" ref="adaae790d6f5dd1dec98e57e2e669e3fd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">InitIndexedProcPtr <a class="el" href="struct__DMXScreenInfo.html#adaae790d6f5dd1dec98e57e2e669e3fd">_DMXScreenInfo::InitIndexed</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab5a18ace3bb18cbcc9e127f51c494006"></a><!-- doxytag: member="_DMXScreenInfo::InstallColormap" ref="ab5a18ace3bb18cbcc9e127f51c494006" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">InstallColormapProcPtr <a class="el" href="struct__DMXScreenInfo.html#ab5a18ace3bb18cbcc9e127f51c494006">_DMXScreenInfo::InstallColormap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5cfc14ffedaafcbe5b00302f972208cf"></a><!-- doxytag: member="_DMXScreenInfo::name" ref="a5cfc14ffedaafcbe5b00302f972208cf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char* <a class="el" href="struct__DMXScreenInfo.html#a5cfc14ffedaafcbe5b00302f972208cf">_DMXScreenInfo::name</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Name from command line or config file </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8h.html#a3962840388f9bcf96fb17294a413d8cb">dmxAttachScreen()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxinit_8c.html#a25595691f1a78098823fd5cce077d9be">dmxDisplayInit()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxlog_8c.html#a8944deeabab7bb4d5badd37244ec19f5">dmxHeader()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxinputinit_8h.html#a2ee085307a1dba7b07fa2eb34639815c">dmxInputAttachBackend()</a>, <a class="el" href="dmxinit_8h.html#abe5a8715282907a3ffd7b992c8dd3661">dmxOpenDisplay()</a>, <a class="el" href="dmxcursor_8c.html#a52398858fc93988512050543967652fe">dmxPrintOverlap()</a>, <a class="el" href="dmxprop_8c.html#ab3eb5317487025c8ba44312f16d675f7">dmxPropertyCheckOtherServers()</a>, <a class="el" href="dmxprop_8c.html#a5e976d40a4af5d6cd99b69ead01d0dfb">dmxPropertyCheckOtherWindows()</a>, <a class="el" href="dmxprop_8h.html#ad0a551002589f00b2bac2b081283bc83">dmxPropertySameDisplay()</a>, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, and <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2c3aa46a8fafabc0a9af28948055fcb0"></a><!-- doxytag: member="_DMXScreenInfo::needsSync" ref="a2c3aa46a8fafabc0a9af28948055fcb0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXScreenInfo.html#a2c3aa46a8fafabc0a9af28948055fcb0">_DMXScreenInfo::needsSync</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>True if an XSync is pending </p>
+
+<p>Referenced by <a class="el" href="dmxsync_8c.html#a3f47aabdd830525720f7a01acbac91ef">dmxDoSync()</a>, <a class="el" href="dmxsync_8h.html#ab848762f4d2e30d31b87d3e8e10c5967">dmxSync()</a>, and <a class="el" href="dmxsync_8c.html#a00478eb7de1c84d98b41ca4c6d4b50e4">dmxSyncCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a24d4641dc02b750b88eb56ced27269d3"></a><!-- doxytag: member="_DMXScreenInfo::next" ref="a24d4641dc02b750b88eb56ced27269d3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>* <a class="el" href="struct__DMXScreenInfo.html#a24d4641dc02b750b88eb56ced27269d3">_DMXScreenInfo::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of "screens" on same display </p>
+
+<p>Referenced by <a class="el" href="dmxprop_8c.html#a1353800f90c3a1f46d453caa71a41ab6">dmxPropertyIterate()</a>, and <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a148c7073ff8a41bee48e6c375e622bd9"></a><!-- doxytag: member="_DMXScreenInfo::noCursor" ref="a148c7073ff8a41bee48e6c375e622bd9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Cursor <a class="el" href="struct__DMXScreenInfo.html#a148c7073ff8a41bee48e6c375e622bd9">_DMXScreenInfo::noCursor</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, and <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac55a37b29ce99474516995b09f794d9c"></a><!-- doxytag: member="_DMXScreenInfo::over" ref="ac55a37b29ce99474516995b09f794d9c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a>* <a class="el" href="struct__DMXScreenInfo.html#ac55a37b29ce99474516995b09f794d9c">_DMXScreenInfo::over</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>List of "screens" that overlap </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, <a class="el" href="dmxcursor_8c.html#ac7dc34eb6db6964e4330acc4d0e2badc">dmxFindCursor()</a>, <a class="el" href="dmxcursor_8h.html#a77c74a33de88fae6cf0de8b755a5c411">dmxInitOverlap()</a>, <a class="el" href="dmxcursor_8c.html#a28c6651bdff6f7fc01292548659a6eb4">dmxIterateOverlap()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#ad51761f218c643ebe7f010538e9c745f">dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a81c0223355350e6d897d4d7306381130">dmxUnrealizeCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afad6bda7c2505a7fedabdf055f7838c5"></a><!-- doxytag: member="_DMXScreenInfo::PositionWindow" ref="afad6bda7c2505a7fedabdf055f7838c5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">PositionWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#afad6bda7c2505a7fedabdf055f7838c5">_DMXScreenInfo::PositionWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a22e93c0020eab3f889c54093ad32348e"></a><!-- doxytag: member="_DMXScreenInfo::RealizeFont" ref="a22e93c0020eab3f889c54093ad32348e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RealizeFontProcPtr <a class="el" href="struct__DMXScreenInfo.html#a22e93c0020eab3f889c54093ad32348e">_DMXScreenInfo::RealizeFont</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2b3ed1977ce205b1bb518393e1b434f6"></a><!-- doxytag: member="_DMXScreenInfo::RealizeWindow" ref="a2b3ed1977ce205b1bb518393e1b434f6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RealizeWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a2b3ed1977ce205b1bb518393e1b434f6">_DMXScreenInfo::RealizeWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a71362d4473da8793f624eaa6a9ac61af"></a><!-- doxytag: member="_DMXScreenInfo::ReparentWindow" ref="a71362d4473da8793f624eaa6a9ac61af" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ReparentWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a71362d4473da8793f624eaa6a9ac61af">_DMXScreenInfo::ReparentWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a949c2799e41ad4f4384cc862df4022fd"></a><!-- doxytag: member="_DMXScreenInfo::ResizeWindow" ref="a949c2799e41ad4f4384cc862df4022fd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ResizeWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a949c2799e41ad4f4384cc862df4022fd">_DMXScreenInfo::ResizeWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8c16eedf083215c4076fcd8851cf6bc2"></a><!-- doxytag: member="_DMXScreenInfo::RestackWindow" ref="a8c16eedf083215c4076fcd8851cf6bc2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">RestackWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a8c16eedf083215c4076fcd8851cf6bc2">_DMXScreenInfo::RestackWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a021f9c1883ae7d96bd47c53bc0bab428"></a><!-- doxytag: member="_DMXScreenInfo::rootHeight" ref="a021f9c1883ae7d96bd47c53bc0bab428" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a021f9c1883ae7d96bd47c53bc0bab428">_DMXScreenInfo::rootHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Height of "root" window </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1edc0ff1f4afd8176c237248da677350"></a><!-- doxytag: member="_DMXScreenInfo::rootWidth" ref="a1edc0ff1f4afd8176c237248da677350" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a1edc0ff1f4afd8176c237248da677350">_DMXScreenInfo::rootWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Width of "root" window </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae19c1b45f18c3880dac6fb101fc92127"></a><!-- doxytag: member="_DMXScreenInfo::rootWin" ref="ae19c1b45f18c3880dac6fb101fc92127" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Window <a class="el" href="struct__DMXScreenInfo.html#ae19c1b45f18c3880dac6fb101fc92127">_DMXScreenInfo::rootWin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>"Root" window on backend display </p>
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94bafd201bf311e19fc17772e5ccdc28"></a><!-- doxytag: member="_DMXScreenInfo::rootX" ref="a94bafd201bf311e19fc17772e5ccdc28" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a94bafd201bf311e19fc17772e5ccdc28">_DMXScreenInfo::rootX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>X offset of "root" window WRT "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aef812b4b6f76c93b8e800e9388330add"></a><!-- doxytag: member="_DMXScreenInfo::rootXOrigin" ref="aef812b4b6f76c93b8e800e9388330add" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#aef812b4b6f76c93b8e800e9388330add">_DMXScreenInfo::rootXOrigin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Global X origin of "root" window </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acd81762e240cca8a57c90ab7f423ca8f"></a><!-- doxytag: member="_DMXScreenInfo::rootY" ref="acd81762e240cca8a57c90ab7f423ca8f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#acd81762e240cca8a57c90ab7f423ca8f">_DMXScreenInfo::rootY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Y offset of "root" window WRT "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a89914c5858cebec13b2256ad02d787ac"></a><!-- doxytag: member="_DMXScreenInfo::rootYOrigin" ref="a89914c5858cebec13b2256ad02d787ac" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a89914c5858cebec13b2256ad02d787ac">_DMXScreenInfo::rootYOrigin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Global Y origin of "root" window </p>
+
+<p>Referenced by <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxcursor_8h.html#a6a381bffb099457e7c26a2312cf968a6">dmxCheckCursor()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxevents_8c.html#adf2928cf693dab61adafad503e81d2dc">dmxCoreMotion()</a>, <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#a21820e2001f763e3cfc924a1d602bb62">dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, and <a class="el" href="dmxcursor_8c.html#a4cbf6be156525a669ae883465f6458c2">dmxSetCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a187aa2158f3a1e7b021cf1ea6f693c2f"></a><!-- doxytag: member="_DMXScreenInfo::savedTimeout" ref="a187aa2158f3a1e7b021cf1ea6f693c2f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a187aa2158f3a1e7b021cf1ea6f693c2f">_DMXScreenInfo::savedTimeout</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Original screen saver timeout </p>
+
+<p>Referenced by <a class="el" href="dmxdpms_8h.html#a6c93ecabb9ee83027c79f878e143a472">dmxDPMSInit()</a>, and <a class="el" href="dmxdpms_8h.html#a54288399c9ed5293b83d7d508ff2465c">dmxDPMSTerm()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a357f02026fd7a4d50e682c87554b15a7"></a><!-- doxytag: member="_DMXScreenInfo::SaveScreen" ref="a357f02026fd7a4d50e682c87554b15a7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">SaveScreenProcPtr <a class="el" href="struct__DMXScreenInfo.html#a357f02026fd7a4d50e682c87554b15a7">_DMXScreenInfo::SaveScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0fdddca70b67ca947e663001ac3e398f"></a><!-- doxytag: member="_DMXScreenInfo::scrnDefDrawables" ref="a0fdddca70b67ca947e663001ac3e398f" args="[MAXFORMATS]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Drawable <a class="el" href="struct__DMXScreenInfo.html#a0fdddca70b67ca947e663001ac3e398f">_DMXScreenInfo::scrnDefDrawables</a>[MAXFORMATS]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Default drawables for "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, and <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2a1733427433e53a0df2575168ad0713"></a><!-- doxytag: member="_DMXScreenInfo::scrnHeight" ref="a2a1733427433e53a0df2575168ad0713" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a2a1733427433e53a0df2575168ad0713">_DMXScreenInfo::scrnHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Height of "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac4c86f223d149ffda30a32ebaffee23a"></a><!-- doxytag: member="_DMXScreenInfo::scrnWidth" ref="ac4c86f223d149ffda30a32ebaffee23a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#ac4c86f223d149ffda30a32ebaffee23a">_DMXScreenInfo::scrnWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Width of "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxcb_8h.html#a077a54c8577746426371b996c9aacefb">dmxComputeWidthHeight()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxcursor_8c.html#a5612d5f5b97d54fa9eb73540eaeba4f3">dmxDoesOverlap()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a78c03cd265e1c64b0d4028f0b27f99c4"></a><!-- doxytag: member="_DMXScreenInfo::scrnWin" ref="a78c03cd265e1c64b0d4028f0b27f99c4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Window <a class="el" href="struct__DMXScreenInfo.html#a78c03cd265e1c64b0d4028f0b27f99c4">_DMXScreenInfo::scrnWin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>"Screen" window on backend display </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa208a04334d595e3507287bacffdae80">_dmxMoveCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxbackend_8h.html#a6e9b6f0743636b93aeb6ae71a3517abf">dmxBackendCollectEvents()</a>, <a class="el" href="dmxbackend_8c.html#a69990fbd029b2aff929c909fab8a9125">dmxBackendInitPrivate()</a>, <a class="el" href="dmxbackend_8c.html#a25cd9424824427d35f7e1cdb6ae0ad61">dmxBackendTestWindow()</a>, <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxcommon_8c.html#a6e3adb2e48d7cc7a098c542c693d66d0">dmxCommonXSelect()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxprop_8h.html#aa97527eeaaf0744a67a5c5d188daf8c2">dmxPropertyWindow()</a>, <a class="el" href="dmxwindow_8h.html#af96b8583264e78a4c693c6f7ee887067">dmxResizeScreenWindow()</a>, and <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25e823320e01d5c61c996a9e4f3c2920"></a><!-- doxytag: member="_DMXScreenInfo::scrnX" ref="a25e823320e01d5c61c996a9e4f3c2920" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a25e823320e01d5c61c996a9e4f3c2920">_DMXScreenInfo::scrnX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>X offset of "screen" WRT BE display </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3035698819a0339095cd208595999aaf"></a><!-- doxytag: member="_DMXScreenInfo::scrnXSign" ref="a3035698819a0339095cd208595999aaf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a3035698819a0339095cd208595999aaf">_DMXScreenInfo::scrnXSign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>X offset sign of "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, and <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aec971ffcb8c7970610513deef57da9f0"></a><!-- doxytag: member="_DMXScreenInfo::scrnY" ref="aec971ffcb8c7970610513deef57da9f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#aec971ffcb8c7970610513deef57da9f0">_DMXScreenInfo::scrnY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Y offset of "screen" WRT BE display </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>, <a class="el" href="dmxextension_8h.html#ab4180bb82b058d071e2f72c2e18534b7">dmxGetScreenAttributes()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, <a class="el" href="dmxcursor_8h.html#adaf3455cdd3f54d22285e5a0fa99fddb">dmxOnScreen()</a>, and <a class="el" href="dmxcursor_8h.html#a9bdb6eff5f7f86fd071091c5a55cee7c">dmxReInitOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa4018bf5e24b7c3dd02bb8ccc808be2c"></a><!-- doxytag: member="_DMXScreenInfo::scrnYSign" ref="aa4018bf5e24b7c3dd02bb8ccc808be2c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#aa4018bf5e24b7c3dd02bb8ccc808be2c">_DMXScreenInfo::scrnYSign</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Y offset sign of "screen" </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, and <a class="el" href="dmxinit_8h.html#aaed1209f913cb233d4e093282ed829ef">dmxGetScreenAttribs()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad4273ba541b4d7e50c967c42d80733bb"></a><!-- doxytag: member="_DMXScreenInfo::SetShape" ref="ad4273ba541b4d7e50c967c42d80733bb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">SetShapeProcPtr <a class="el" href="struct__DMXScreenInfo.html#ad4273ba541b4d7e50c967c42d80733bb">_DMXScreenInfo::SetShape</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a873f1776988a437bcf2357e166005c48"></a><!-- doxytag: member="_DMXScreenInfo::shadow" ref="a873f1776988a437bcf2357e166005c48" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* <a class="el" href="struct__DMXScreenInfo.html#a873f1776988a437bcf2357e166005c48">_DMXScreenInfo::shadow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Shadow framebuffer data (if enabled) </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, <a class="el" href="dmxscrinit_8c.html#a3a9963b8e65e9ffebe694c05260e530b">dmxCloseScreen()</a>, and <a class="el" href="dmxscrinit_8h.html#a673d8a2c038f8ed0da5f910a72a5c4c2">dmxScreenInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae21672a36b84f8268c5e29d82fa07667"></a><!-- doxytag: member="_DMXScreenInfo::shadowFBImage" ref="ae21672a36b84f8268c5e29d82fa07667" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XImage* <a class="el" href="struct__DMXScreenInfo.html#ae21672a36b84f8268c5e29d82fa07667">_DMXScreenInfo::shadowFBImage</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Screen image used by shadow FB code </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, and <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a48314583a4bbbfaa66719330bdf4a91a"></a><!-- doxytag: member="_DMXScreenInfo::shadowGC" ref="a48314583a4bbbfaa66719330bdf4a91a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XlibGC <a class="el" href="struct__DMXScreenInfo.html#a48314583a4bbbfaa66719330bdf4a91a">_DMXScreenInfo::shadowGC</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Default GC used by shadow FB code </p>
+
+<p>Referenced by <a class="el" href="dmxscrinit_8h.html#a95af573befeeedfa4a7d15b574341c36">dmxBECloseScreen()</a>, <a class="el" href="dmxscrinit_8h.html#a51bde87df35cd264d315d09e33c4f9e3">dmxBEScreenInit()</a>, and <a class="el" href="dmxshadow_8h.html#af2e3c9fd493e63137db512ab54bf1327">dmxShadowUpdateProc()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1c960b58b8bb306b5fe14edc8d8c2b8d"></a><!-- doxytag: member="_DMXScreenInfo::shared" ref="a1c960b58b8bb306b5fe14edc8d8c2b8d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a1c960b58b8bb306b5fe14edc8d8c2b8d">_DMXScreenInfo::shared</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Non-zero if another Xdmx is running </p>
+
+<p>Referenced by <a class="el" href="dmxprop_8h.html#a97a10defd6ace86dae6cf8c8765bf0de">dmxPropertyDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a31fd04698ffcb2b53ffee82468cc2862"></a><!-- doxytag: member="_DMXScreenInfo::stat" ref="a31fd04698ffcb2b53ffee82468cc2862" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXStatInfo.html">DMXStatInfo</a>* <a class="el" href="struct__DMXScreenInfo.html#a31fd04698ffcb2b53ffee82468cc2862">_DMXScreenInfo::stat</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Statistics about XSync </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#a5fa6729153f7f7e5d3037d451291fa64">dmxConfigAddDisplay()</a>, <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>, and <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="addce695c56fcc40e89b5c5add6a09205"></a><!-- doxytag: member="_DMXScreenInfo::StoreColors" ref="addce695c56fcc40e89b5c5add6a09205" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">StoreColorsProcPtr <a class="el" href="struct__DMXScreenInfo.html#addce695c56fcc40e89b5c5add6a09205">_DMXScreenInfo::StoreColors</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4008b17ac4eb89816a8c2d3ce2e14421"></a><!-- doxytag: member="_DMXScreenInfo::Trapezoids" ref="a4008b17ac4eb89816a8c2d3ce2e14421" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">TrapezoidsProcPtr <a class="el" href="struct__DMXScreenInfo.html#a4008b17ac4eb89816a8c2d3ce2e14421">_DMXScreenInfo::Trapezoids</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af37150652184c4865700576504ec9df9"></a><!-- doxytag: member="_DMXScreenInfo::Triangles" ref="af37150652184c4865700576504ec9df9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">TrianglesProcPtr <a class="el" href="struct__DMXScreenInfo.html#af37150652184c4865700576504ec9df9">_DMXScreenInfo::Triangles</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0829ea4299b5afcb1d2f2894334fed69"></a><!-- doxytag: member="_DMXScreenInfo::TriFan" ref="a0829ea4299b5afcb1d2f2894334fed69" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">TriFanProcPtr <a class="el" href="struct__DMXScreenInfo.html#a0829ea4299b5afcb1d2f2894334fed69">_DMXScreenInfo::TriFan</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5918dec3813c47c24f52f076f1b05dc4"></a><!-- doxytag: member="_DMXScreenInfo::TriStrip" ref="a5918dec3813c47c24f52f076f1b05dc4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">TriStripProcPtr <a class="el" href="struct__DMXScreenInfo.html#a5918dec3813c47c24f52f076f1b05dc4">_DMXScreenInfo::TriStrip</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af46646c951db10afab56244b5345a6d8"></a><!-- doxytag: member="_DMXScreenInfo::UnrealizeFont" ref="af46646c951db10afab56244b5345a6d8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">UnrealizeFontProcPtr <a class="el" href="struct__DMXScreenInfo.html#af46646c951db10afab56244b5345a6d8">_DMXScreenInfo::UnrealizeFont</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7b72d30e072b0f1a5f1e89ae9c1155f0"></a><!-- doxytag: member="_DMXScreenInfo::UnrealizeWindow" ref="a7b72d30e072b0f1a5f1e89ae9c1155f0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">UnrealizeWindowProcPtr <a class="el" href="struct__DMXScreenInfo.html#a7b72d30e072b0f1a5f1e89ae9c1155f0">_DMXScreenInfo::UnrealizeWindow</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="afa11a2993fe14ec90db2de382cdeb25c"></a><!-- doxytag: member="_DMXScreenInfo::UpdateIndexed" ref="afa11a2993fe14ec90db2de382cdeb25c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">UpdateIndexedProcPtr <a class="el" href="struct__DMXScreenInfo.html#afa11a2993fe14ec90db2de382cdeb25c">_DMXScreenInfo::UpdateIndexed</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a627ae18aeaa92da0923ab49803470c71"></a><!-- doxytag: member="_DMXScreenInfo::ValidatePicture" ref="a627ae18aeaa92da0923ab49803470c71" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">ValidatePictureProcPtr <a class="el" href="struct__DMXScreenInfo.html#a627ae18aeaa92da0923ab49803470c71">_DMXScreenInfo::ValidatePicture</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2cb225a5c08ae6ea0ce19d85616f143b"></a><!-- doxytag: member="_DMXScreenInfo::where" ref="a2cb225a5c08ae6ea0ce19d85616f143b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="dmx_8h.html#aa80fe4e9a559009407475c9587214b48">PositionType</a> <a class="el" href="struct__DMXScreenInfo.html#a2cb225a5c08ae6ea0ce19d85616f143b">_DMXScreenInfo::where</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Relative layout information </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, and <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae502ef7543f17556ea497ebbef157f41"></a><!-- doxytag: member="_DMXScreenInfo::whereRefScreen" ref="ae502ef7543f17556ea497ebbef157f41" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#ae502ef7543f17556ea497ebbef157f41">_DMXScreenInfo::whereRefScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Relative layout information </p>
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#aa5a4c58dbde29584153fbc43a1ac6e26">dmxComputeScreenOrigins()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, and <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d0572de80377c7ad7407dfb0cf22d8a"></a><!-- doxytag: member="_DMXScreenInfo::whereX" ref="a9d0572de80377c7ad7407dfb0cf22d8a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#a9d0572de80377c7ad7407dfb0cf22d8a">_DMXScreenInfo::whereX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Relative layout information </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, and <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb391a900f17b41e18127b4b31026c96"></a><!-- doxytag: member="_DMXScreenInfo::whereY" ref="aeb391a900f17b41e18127b4b31026c96" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXScreenInfo.html#aeb391a900f17b41e18127b4b31026c96">_DMXScreenInfo::whereY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Relative layout information </p>
+
+<p>Referenced by <a class="el" href="dmxconfig_8c.html#ad46057dba8680aec8dd960f05a571cb1">dmxConfigCopyFromDisplay()</a>, <a class="el" href="dmxconfig_8c.html#ad9a587a7bacd29a6e7b23caa5e482930">dmxConfigCopyFromWall()</a>, <a class="el" href="dmxconfig_8c.html#ab1add76564bec8f2616b0a3dedc63184">dmxConfigFromCommandLine()</a>, <a class="el" href="dmxcursor_8h.html#af3fb4b2c2d3cc318c88fbc6658893360">dmxInitOrigins()</a>, and <a class="el" href="dmxcursor_8c.html#a97efbe7e0a872da9de0be49da214c210">dmxTryComputeScreenOrigins()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a526c7fea5a2a39d325eab3fd4efb503d"></a><!-- doxytag: member="_DMXScreenInfo::WindowExposures" ref="a526c7fea5a2a39d325eab3fd4efb503d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">WindowExposuresProcPtr <a class="el" href="struct__DMXScreenInfo.html#a526c7fea5a2a39d325eab3fd4efb503d">_DMXScreenInfo::WindowExposures</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a1da213d4ad20ad28127f06632a8202aa"></a><!-- doxytag: member="_DMXScreenInfo::WMRunningOnBE" ref="a1da213d4ad20ad28127f06632a8202aa" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__DMXScreenInfo.html#a1da213d4ad20ad28127f06632a8202aa">_DMXScreenInfo::WMRunningOnBE</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8h.html#a339a0fdeb357fee53a56ba268c66b68d">dmxCheckForWM()</a>, and <a class="el" href="dmxinit_8c.html#ab8f00de6f3ccc2c1af274ae74c07c53b">dmxPrintScreenInfo()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmx_8h_source.html">dmx.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXScreenInfo.html">_DMXScreenInfo</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXStatAvg.html b/hw/dmx/doc/html/struct__DMXStatAvg.html
new file mode 100644
index 0000000..22dc71a
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXStatAvg.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXStatAvg.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXStatAvg Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXStatAvg" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatAvg.html#a4ee50be7c55ef55ea0e8ca9edaf2ac52">pos</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatAvg.html#a361c10829231fd6805e59232321de2fe">count</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatAvg.html#a621cad02496227c50cc76aca84037b47">value</a> [DMX_STAT_LENGTH]</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Used to compute a running average of value. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a361c10829231fd6805e59232321de2fe"></a><!-- doxytag: member="_DMXStatAvg::count" ref="a361c10829231fd6805e59232321de2fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXStatAvg.html#a361c10829231fd6805e59232321de2fe">_DMXStatAvg::count</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#aeccae65bbc33f6b7717b2dc1a536d3cd">avg()</a>, and <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ee50be7c55ef55ea0e8ca9edaf2ac52"></a><!-- doxytag: member="_DMXStatAvg::pos" ref="a4ee50be7c55ef55ea0e8ca9edaf2ac52" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__DMXStatAvg.html#a4ee50be7c55ef55ea0e8ca9edaf2ac52">_DMXStatAvg::pos</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a621cad02496227c50cc76aca84037b47"></a><!-- doxytag: member="_DMXStatAvg::value" ref="a621cad02496227c50cc76aca84037b47" args="[DMX_STAT_LENGTH]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="struct__DMXStatAvg.html#a621cad02496227c50cc76aca84037b47">_DMXStatAvg::value</a>[DMX_STAT_LENGTH]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#aeccae65bbc33f6b7717b2dc1a536d3cd">avg()</a>, and <a class="el" href="dmxstat_8c.html#ab17f1e926473a1df95e781c6c7a8e940">dmxStatValue()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxstat_8c.html">dmxstat.c</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXStatAvg.html">_DMXStatAvg</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__DMXStatInfo.html b/hw/dmx/doc/html/struct__DMXStatInfo.html
new file mode 100644
index 0000000..91069b5
--- /dev/null
+++ b/hw/dmx/doc/html/struct__DMXStatInfo.html
@@ -0,0 +1,151 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__DMXStatInfo.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_DMXStatInfo Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_DMXStatInfo" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">syncCount</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatInfo.html#a06c2832f03e95a2139099bbec7bd4794">oldSyncCount</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">usec</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">pending</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">bins</a> [DMX_STAT_BINS]</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Statistical information about XSync calls. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a948f8674bc28129ad022a7678d81b38a"></a><!-- doxytag: member="_DMXStatInfo::bins" ref="a948f8674bc28129ad022a7678d81b38a" args="[DMX_STAT_BINS]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="struct__DMXStatInfo.html#a948f8674bc28129ad022a7678d81b38a">_DMXStatInfo::bins</a>[DMX_STAT_BINS]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a06c2832f03e95a2139099bbec7bd4794"></a><!-- doxytag: member="_DMXStatInfo::oldSyncCount" ref="a06c2832f03e95a2139099bbec7bd4794" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="struct__DMXStatInfo.html#a06c2832f03e95a2139099bbec7bd4794">_DMXStatInfo::oldSyncCount</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a316b8214c93a5762b6dbd06a7617ef3c"></a><!-- doxytag: member="_DMXStatInfo::pending" ref="a316b8214c93a5762b6dbd06a7617ef3c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a> <a class="el" href="struct__DMXStatInfo.html#a316b8214c93a5762b6dbd06a7617ef3c">_DMXStatInfo::pending</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa08d83f9455dcc98919fbc0085483aea"></a><!-- doxytag: member="_DMXStatInfo::syncCount" ref="aa08d83f9455dcc98919fbc0085483aea" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="struct__DMXStatInfo.html#aa08d83f9455dcc98919fbc0085483aea">_DMXStatInfo::syncCount</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ed02fb0dd6e7e5ac3af88019331a895"></a><!-- doxytag: member="_DMXStatInfo::usec" ref="a4ed02fb0dd6e7e5ac3af88019331a895" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXStatAvg.html">DMXStatAvg</a> <a class="el" href="struct__DMXStatInfo.html#a4ed02fb0dd6e7e5ac3af88019331a895">_DMXStatInfo::usec</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxstat_8c.html#a218b57229dca87bd0564671d8f68f15f">dmxStatCallback()</a>, and <a class="el" href="dmxstat_8h.html#a1098a195e40df685aaf2fbc238884027">dmxStatSync()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxstat_8c.html">dmxstat.c</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__DMXStatInfo.html">_DMXStatInfo</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxArg.html b/hw/dmx/doc/html/struct__dmxArg.html
new file mode 100644
index 0000000..04f85d7
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxArg.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxArg.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxArg Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxArg" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Volumes Home jeremy src <br class="typebreak"/>
+freedesktop src xserver hw dmx <br class="typebreak"/>
+input dmxarg c int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">argc</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">argm</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const char **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">argv</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stores the parsed argument list. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="adeac746e040cef494abdc25f02c34cd5"></a><!-- doxytag: member="_dmxArg::argc" ref="adeac746e040cef494abdc25f02c34cd5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Volumes Home jeremy src freedesktop src xserver hw dmx input dmxarg c int <a class="el" href="struct__dmxArg.html#adeac746e040cef494abdc25f02c34cd5">_dmxArg::argc</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Number of arguments in argv </p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd()</a>, <a class="el" href="dmxarg_8h.html#a94e36fd228f49fb0a77c34709cbd3a69">dmxArgC()</a>, <a class="el" href="dmxarg_8h.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate()</a>, <a class="el" href="dmxarg_8h.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree()</a>, and <a class="el" href="dmxarg_8h.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa9baf81a4fabcd2d3f6bbbecd0ebd748"></a><!-- doxytag: member="_dmxArg::argm" ref="aa9baf81a4fabcd2d3f6bbbecd0ebd748" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__dmxArg.html#aa9baf81a4fabcd2d3f6bbbecd0ebd748">_dmxArg::argm</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Maximum number of arguments store-able in argv </p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd()</a>, and <a class="el" href="dmxarg_8h.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aade18557285f464ec800a9ed1fc6c3f5"></a><!-- doxytag: member="_dmxArg::argv" ref="aade18557285f464ec800a9ed1fc6c3f5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const char** <a class="el" href="struct__dmxArg.html#aade18557285f464ec800a9ed1fc6c3f5">_dmxArg::argv</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Arguments </p>
+
+<p>Referenced by <a class="el" href="dmxarg_8h.html#a6d41e61a00975e123ed72a269d653d23">dmxArgAdd()</a>, <a class="el" href="dmxarg_8h.html#af4ecb9595303a7fcac5eae840766b6fb">dmxArgCreate()</a>, <a class="el" href="dmxarg_8h.html#aa6b362f314787cc0e0fd7ca55b53a5cc">dmxArgFree()</a>, and <a class="el" href="dmxarg_8h.html#a7de14f607c61ecac05f9c45d002e36ab">dmxArgV()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxarg_8c.html">dmxarg.c</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxArg.html">_dmxArg</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxColormapPriv.html b/hw/dmx/doc/html/struct__dmxColormapPriv.html
new file mode 100644
index 0000000..688f3d6
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxColormapPriv.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxColormapPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxColormapPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxColormapPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxcmap_8h_source.html">dmxcmap.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Colormap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">cmap</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Colormap private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ac310002aa04b2455910defd155dadad4"></a><!-- doxytag: member="_dmxColormapPriv::cmap" ref="ac310002aa04b2455910defd155dadad4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Colormap <a class="el" href="struct__dmxColormapPriv.html#ac310002aa04b2455910defd155dadad4">_dmxColormapPriv::cmap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcmap_8c.html#a0ad36af95555b052bd64595a6b7d7af0">dmxAllocateColormapPrivates()</a>, <a class="el" href="dmxcmap_8h.html#a6986e997430cf665904ad9149e39a50b">dmxBECreateColormap()</a>, <a class="el" href="dmxcmap_8h.html#a432d82d6335a8bc17292440baded360c">dmxBEFreeColormap()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#ab8f054330062393aa409a31ec692cf0d">dmxGetDefaultWindowAttributes()</a>, <a class="el" href="dmxcmap_8h.html#a13a0bbf846ac7b3dcb41ae9bc4e64a3e">dmxInstallColormap()</a>, and <a class="el" href="dmxcmap_8h.html#a38bddf73cfed2aec203c62fc5be4ae97">dmxStoreColors()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxcmap_8h_source.html">dmxcmap.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxColormapPriv.html">_dmxColormapPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxCursorPriv.html b/hw/dmx/doc/html/struct__dmxCursorPriv.html
new file mode 100644
index 0000000..b677819
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxCursorPriv.html
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxCursorPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxCursorPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxCursorPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxcursor_8h_source.html">dmxcursor.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">cursor</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Cursor private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="aa55d93640b2d29175eeaa07b92c83cad"></a><!-- doxytag: member="_dmxCursorPriv::cursor" ref="aa55d93640b2d29175eeaa07b92c83cad" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Cursor <a class="el" href="struct__dmxCursorPriv.html#aa55d93640b2d29175eeaa07b92c83cad">_dmxCursorPriv::cursor</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8c.html#ac722828c4781d1a44d8b04955472a134">_dmxRealizeCursor()</a>, <a class="el" href="dmxcursor_8c.html#a6fd26c7c7811ff77fc3c6e84b82d57d5">_dmxSetCursor()</a>, <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, and <a class="el" href="dmxcursor_8h.html#ae0e94924bf5a69c2b26e9d0442befadd">dmxBEFreeCursor()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxcursor_8h_source.html">dmxcursor.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxCursorPriv.html">_dmxCursorPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxFontPriv.html b/hw/dmx/doc/html/struct__dmxFontPriv.html
new file mode 100644
index 0000000..856a141
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxFontPriv.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxFontPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxFontPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxFontPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxfont_8h_source.html">dmxfont.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">refcnt</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XFontStruct **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">font</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Font private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a2676c12db834b65989761a611ae8568f"></a><!-- doxytag: member="_dmxFontPriv::font" ref="a2676c12db834b65989761a611ae8568f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XFontStruct** <a class="el" href="struct__dmxFontPriv.html#a2676c12db834b65989761a611ae8568f">_dmxFontPriv::font</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#afadf46b46a1f3da085c96849c885a41e">dmxBEFreeFont()</a>, <a class="el" href="dmxfont_8h.html#ad24fe115ec27d050da7a4cb47d7ce52f">dmxBELoadFont()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, and <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae91826e69c75c08b5febfaf97d4f3cad"></a><!-- doxytag: member="_dmxFontPriv::refcnt" ref="ae91826e69c75c08b5febfaf97d4f3cad" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__dmxFontPriv.html#ae91826e69c75c08b5febfaf97d4f3cad">_dmxFontPriv::refcnt</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxfont_8h.html#a0119b47dedc04962e24f5b7d86f5cd92">dmxRealizeFont()</a>, and <a class="el" href="dmxfont_8h.html#a9d0df8388cd6cd1a5d7b77dcf9aaa69f">dmxUnrealizeFont()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxfont_8h_source.html">dmxfont.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxFontPriv.html">_dmxFontPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxGCPriv.html b/hw/dmx/doc/html/struct__dmxGCPriv.html
new file mode 100644
index 0000000..5a5e407
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxGCPriv.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxGCPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxGCPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxGCPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxgc_8h_source.html">dmxgc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">GCOps *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">ops</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">GCFuncs *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">funcs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XlibGC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">gc</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">msc</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>GC private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a0bcaef15efa842b96d3080342a1018fd"></a><!-- doxytag: member="_dmxGCPriv::funcs" ref="a0bcaef15efa842b96d3080342a1018fd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GCFuncs* <a class="el" href="struct__dmxGCPriv.html#a0bcaef15efa842b96d3080342a1018fd">_dmxGCPriv::funcs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1df255c2a582d3168868747ecea8055f"></a><!-- doxytag: member="_dmxGCPriv::gc" ref="a1df255c2a582d3168868747ecea8055f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XlibGC <a class="el" href="struct__dmxGCPriv.html#a1df255c2a582d3168868747ecea8055f">_dmxGCPriv::gc</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a69cbe2a62465699d0bb5b2a6e187fa3b">dmxBECreateGC()</a>, <a class="el" href="dmxgc_8h.html#a17c700daf344c32c6daecaf19d19f6a8">dmxBEFreeGC()</a>, <a class="el" href="dmxgc_8h.html#a1e0e73f84cf8b03259b4077dd0246b59">dmxChangeClip()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxgcops_8h.html#a9165fc8e2f98c6d4d82154a1b52b7c0f">dmxCopyArea()</a>, <a class="el" href="dmxgc_8h.html#a5a4221a9f3552a0abfe0e968991120bf">dmxCopyGC()</a>, <a class="el" href="dmxgcops_8h.html#aa6b3b34e3b0e151d5b2d5f081f6d6e0f">dmxCopyPlane()</a>, <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, <a class="el" href="dmxgc_8h.html#a7661a8add19b4d73e7b5fe6f39ff7cc0">dmxDestroyClip()</a>, <a class="el" href="dmxgcops_8h.html#a4c24d2a2ddb121d2281084dd4f1361a6">dmxFillPolygon()</a>, <a class="el" href="dmxgcops_8h.html#acb19f9ef082c76f281679994057fafe1">dmxImageText16()</a>, <a class="el" href="dmxgcops_8h.html#a1fc863ca944469fc34d78db948f14053">dmxImageText8()</a>, <a class="el" href="dmxgcops_8h.html#a7c4ff7ddf5b1a31d11e9124dc18f69f0">dmxPolyArc()</a>, <a class="el" href="dmxgcops_8h.html#a5488891f016532e40ba5e31466fb67fd">dmxPolyFillArc()</a>, <a class="el" href="dmxgcops_8h.html#a7d7eee30be7b445772f875b8cc1c8e0a">dmxPolyFillRect()</a>, <a class="el" href="dmxgcops_8h.html#abd3dea8c777a8e39ffbf2b9fa8e1405e">dmxPolylines()</a>, <a class="el" href="dmxgcops_8h.html#a03892f8e655a4bb743a264f121b096c6">dmxPolyPoint()</a>, <a class="el" href="dmxgcops_8h.html#a6bc862a4f475154ff9ff5f30a0ffcf89">dmxPolyRectangle()</a>, <a class="el" href="dmxgcops_8h.html#a9592aeb83549cbe036a47e9ac90dbf36">dmxPolySegment()</a>, <a class="el" href="dmxgcops_8h.html#a2fe37b5892867df4c29292c975c17e52">dmxPolyText16()</a>, <a class="el" href="dmxgcops_8h.html#a9b3a993a29bb01745ddbf7bd9ff97ef5">dmxPolyText8()</a>, and <a class="el" href="dmxgcops_8h.html#ae1e930ec29cf8bd07acd6ccee4a548a3">dmxPutImage()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afb862aeafa43f8d936f07850b9fd374c"></a><!-- doxytag: member="_dmxGCPriv::msc" ref="afb862aeafa43f8d936f07850b9fd374c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__dmxGCPriv.html#afb862aeafa43f8d936f07850b9fd374c">_dmxGCPriv::msc</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, and <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4c29fc86ae00189d45730dcee79e881a"></a><!-- doxytag: member="_dmxGCPriv::ops" ref="a4c29fc86ae00189d45730dcee79e881a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GCOps* <a class="el" href="struct__dmxGCPriv.html#a4c29fc86ae00189d45730dcee79e881a">_dmxGCPriv::ops</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxgc_8h.html#a6a6b54ac639feed4b767ba31647ac6f8">dmxCreateGC()</a>, and <a class="el" href="dmxgc_8h.html#ad34a918e727baa65bea235ac16b5e08f">dmxValidateGC()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxgc_8h_source.html">dmxgc.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxGCPriv.html">_dmxGCPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxGlyphPriv.html b/hw/dmx/doc/html/struct__dmxGlyphPriv.html
new file mode 100644
index 0000000..7c63e06
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxGlyphPriv.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxGlyphPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxGlyphPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxGlyphPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">GlyphSet *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">glyphSets</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Glyph Set private structure </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a041bb4d62519bb607df0085a06fc5f76"></a><!-- doxytag: member="_dmxGlyphPriv::glyphSets" ref="a041bb4d62519bb607df0085a06fc5f76" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GlyphSet* <a class="el" href="struct__dmxGlyphPriv.html#a041bb4d62519bb607df0085a06fc5f76">_dmxGlyphPriv::glyphSets</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Glyph Set IDs from back-end server </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a390ee65e9cbdf613f5f7a6fafa754fff">dmxBECreateGlyphSet()</a>, <a class="el" href="dmxpict_8h.html#a342746cc3fb1fe0731522315c6dd91fc">dmxBEFreeGlyphSet()</a>, <a class="el" href="dmxextension_8c.html#a8b7fceafa86db60728ce58fd33f2a646">dmxBERestoreRenderGlyph()</a>, <a class="el" href="dmxpict_8c.html#a3af8c0336c49625930470c6e2bce2a48">dmxProcRenderAddGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#aaaa954b686d1322b7cda6a83f24a8c45">dmxProcRenderCreateGlyphSet()</a>, <a class="el" href="dmxpict_8c.html#a31fa7a567bceaf88984a3e862dc9a72e">dmxProcRenderFreeGlyphs()</a>, and <a class="el" href="dmxpict_8c.html#a182c93f585ba30c52c680849edb51c7f">dmxProcRenderFreeGlyphSet()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxpict_8h_source.html">dmxpict.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxGlyphPriv.html">_dmxGlyphPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxPictPriv.html b/hw/dmx/doc/html/struct__dmxPictPriv.html
new file mode 100644
index 0000000..9debf90
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxPictPriv.html
@@ -0,0 +1,107 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxPictPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxPictPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxPictPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxpict_8h_source.html">dmxpict.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Picture&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">pict</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Mask&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">savedMask</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Picture private structure </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a29ce8f04c93049d70c37ab68c3fb0997"></a><!-- doxytag: member="_dmxPictPriv::pict" ref="a29ce8f04c93049d70c37ab68c3fb0997" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Picture <a class="el" href="struct__dmxPictPriv.html#a29ce8f04c93049d70c37ab68c3fb0997">_dmxPictPriv::pict</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Picture ID from back-end server </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#ac1b1e577a8993b4c76eba1bfad485396">dmxBECreatePicture()</a>, <a class="el" href="dmxpict_8h.html#a7b24ad91d73ffd9475719ec4b0a73f34">dmxBEFreePicture()</a>, <a class="el" href="dmxpict_8h.html#a80e126a5d7911fec43bad8a9428980d6">dmxChangePictureClip()</a>, <a class="el" href="dmxpict_8h.html#a65851c1a4e9cd6946d67ff5aaf7bce88">dmxComposite()</a>, <a class="el" href="dmxpict_8h.html#ae828cd3db7af3c9e3a615267cd780ac4">dmxCompositeRects()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, <a class="el" href="dmxpict_8h.html#a8c52091268b0f77d74d3a097b396abcf">dmxCreatePictureList()</a>, <a class="el" href="dmxpict_8h.html#aa977edb667e68606b2e08b25d99427de">dmxDestroyPictureClip()</a>, <a class="el" href="dmxpict_8c.html#a612db8702e6a380e12719576a57602e7">dmxProcRenderCompositeGlyphs()</a>, <a class="el" href="dmxpict_8c.html#a6cf50414d7688db973f42db898ba16a8">dmxProcRenderSetPictureFilter()</a>, <a class="el" href="dmxpict_8c.html#af7e087c44278e073b515a7adf3788a06">dmxProcRenderSetPictureTransform()</a>, <a class="el" href="dmxpict_8h.html#ae54f217c222944bb10731d73e05ed4b2">dmxTrapezoids()</a>, <a class="el" href="dmxpict_8h.html#a401f568feed789ffc0bb1cc52573f707">dmxTriangles()</a>, <a class="el" href="dmxpict_8h.html#a11d3beb5f92c982f9383bb7e606e3157">dmxTriFan()</a>, <a class="el" href="dmxpict_8h.html#a3e36166fd4db06d364e7cc1762ab5b8c">dmxTriStrip()</a>, and <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5e1f06f9c1dc3f27729b77a910d388f7"></a><!-- doxytag: member="_dmxPictPriv::savedMask" ref="a5e1f06f9c1dc3f27729b77a910d388f7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Mask <a class="el" href="struct__dmxPictPriv.html#a5e1f06f9c1dc3f27729b77a910d388f7">_dmxPictPriv::savedMask</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Mask of picture attributes saved for lazy window creation. </p>
+
+<p>Referenced by <a class="el" href="dmxpict_8h.html#a316382a2e169f1662363123670a252c7">dmxChangePicture()</a>, <a class="el" href="dmxpict_8h.html#ad7adb9c71564816f5f3172c710274d57">dmxCreatePicture()</a>, and <a class="el" href="dmxpict_8h.html#a3a9285c518b050130e40b7e147309350">dmxValidatePicture()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxpict_8h_source.html">dmxpict.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxPictPriv.html">_dmxPictPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxPixPriv.html b/hw/dmx/doc/html/struct__dmxPixPriv.html
new file mode 100644
index 0000000..ecb3eb8
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxPixPriv.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxPixPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxPixPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxPixPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Pixmap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">pixmap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XImage *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">detachedImage</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Pixmap private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a54fab045a345e00ee75ab064ce38118e"></a><!-- doxytag: member="_dmxPixPriv::detachedImage" ref="a54fab045a345e00ee75ab064ce38118e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XImage* <a class="el" href="struct__dmxPixPriv.html#a54fab045a345e00ee75ab064ce38118e">_dmxPixPriv::detachedImage</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, and <a class="el" href="dmxpixmap_8h.html#a7c602d928744ec2e7be73ef197fc9b12">dmxDestroyPixmap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7b3f9090169c50760c7a18e801091c2f"></a><!-- doxytag: member="_dmxPixPriv::pixmap" ref="a7b3f9090169c50760c7a18e801091c2f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Pixmap <a class="el" href="struct__dmxPixPriv.html#a7b3f9090169c50760c7a18e801091c2f">_dmxPixPriv::pixmap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxpixmap_8h.html#ab785500b50aa10eb1d76274688413770">dmxBECreatePixmap()</a>, <a class="el" href="dmxpixmap_8h.html#aa930f04f91d83243d3e6224f911bf9e8">dmxBEFreePixmap()</a>, <a class="el" href="dmxextension_8c.html#a8c94ba784e540d8a5fba70373f1167f4">dmxBERestorePixmap()</a>, <a class="el" href="dmxextension_8c.html#a3dee225e6bc7fa7f8684ebc5b4f96884">dmxBESavePixmap()</a>, <a class="el" href="dmxpixmap_8h.html#af943d5ec32fe35ccc74ae190b8d8bb3e">dmxBitmapToRegion()</a>, <a class="el" href="dmxgc_8h.html#af07df8b118bf78f1ce4b96fa1d0a2401">dmxChangeGC()</a>, <a class="el" href="dmxpixmap_8h.html#a9d26c08a4286c663250f61e63ffa3343">dmxCreatePixmap()</a>, <a class="el" href="dmxwindow_8c.html#a8d5f02a09348890a468a08464becbac3">dmxDoChangeWindowAttributes()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, and <a class="el" href="dmxgcops_8c.html#ad44d59f0e4f0c77ca7278cb5d31f0121">dmxFindAlternatePixmap()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxpixmap_8h_source.html">dmxpixmap.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxPixPriv.html">_dmxPixPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__dmxWinPriv.html b/hw/dmx/doc/html/struct__dmxWinPriv.html
new file mode 100644
index 0000000..49b4122
--- /dev/null
+++ b/hw/dmx/doc/html/struct__dmxWinPriv.html
@@ -0,0 +1,217 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__dmxWinPriv.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_dmxWinPriv Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_dmxWinPriv" -->
+<p><code>#include &lt;<a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Window&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">window</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">offscreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">mapped</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">restacked</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">attribMask</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Colormap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">cmap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Visual *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">visual</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">isShaped</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">hasPict</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Window private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ab0ef36129e8d26e958e0094e41bceebe"></a><!-- doxytag: member="_dmxWinPriv::attribMask" ref="ab0ef36129e8d26e958e0094e41bceebe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="struct__dmxWinPriv.html#ab0ef36129e8d26e958e0094e41bceebe">_dmxWinPriv::attribMask</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#a5296d023014ce3d69c04557431785923">dmxCreateRootWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a852246cf86eff5c476e79915828a976f"></a><!-- doxytag: member="_dmxWinPriv::cmap" ref="a852246cf86eff5c476e79915828a976f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Colormap <a class="el" href="struct__dmxWinPriv.html#a852246cf86eff5c476e79915828a976f">_dmxWinPriv::cmap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aada5c9737655b65fcd384446a5bb8906"></a><!-- doxytag: member="_dmxWinPriv::hasPict" ref="aada5c9737655b65fcd384446a5bb8906" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__dmxWinPriv.html#aada5c9737655b65fcd384446a5bb8906">_dmxWinPriv::hasPict</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af0c3737de0bf15b112b7d9aba3774196"></a><!-- doxytag: member="_dmxWinPriv::isShaped" ref="af0c3737de0bf15b112b7d9aba3774196" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__dmxWinPriv.html#af0c3737de0bf15b112b7d9aba3774196">_dmxWinPriv::isShaped</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71a163660368e9309d1369164246946f"></a><!-- doxytag: member="_dmxWinPriv::mapped" ref="a71a163660368e9309d1369164246946f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__dmxWinPriv.html#a71a163660368e9309d1369164246946f">_dmxWinPriv::mapped</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c19fce485c4b7c630e5af24ac8d2b64"></a><!-- doxytag: member="_dmxWinPriv::offscreen" ref="a6c19fce485c4b7c630e5af24ac8d2b64" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__dmxWinPriv.html#a6c19fce485c4b7c630e5af24ac8d2b64">_dmxWinPriv::offscreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a408078f183c5a02daa555c9df1f310f2"></a><!-- doxytag: member="_dmxWinPriv::restacked" ref="a408078f183c5a02daa555c9df1f310f2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Bool <a class="el" href="struct__dmxWinPriv.html#a408078f183c5a02daa555c9df1f310f2">_dmxWinPriv::restacked</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, and <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a19177a0167fccfd592c7f45c929c2be9"></a><!-- doxytag: member="_dmxWinPriv::visual" ref="a19177a0167fccfd592c7f45c929c2be9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Visual* <a class="el" href="struct__dmxWinPriv.html#a19177a0167fccfd592c7f45c929c2be9">_dmxWinPriv::visual</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, and <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9e9f2544f80c5f6988afbc36be92f71f"></a><!-- doxytag: member="_dmxWinPriv::window" ref="a9e9f2544f80c5f6988afbc36be92f71f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Window <a class="el" href="struct__dmxWinPriv.html#a9e9f2544f80c5f6988afbc36be92f71f">_dmxWinPriv::window</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxextension_8c.html#a3d9d96382bf12f21023b8983412073ac">dmxBECreateWindowTree()</a>, <a class="el" href="dmxwindow_8h.html#a978ad158f0c814ca10dc965c5f7b74c2">dmxBEDestroyWindow()</a>, <a class="el" href="dmxwindow_8h.html#a5d63a05eab33981615afdf523a44c697">dmxChangeBorderWidth()</a>, <a class="el" href="dmxwindow_8h.html#ae6f0ba304627ea760df9e9c53f7bbae6">dmxChangeWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#ad78bdba42db62285cf174f072a63a81a">dmxCopyWindow()</a>, <a class="el" href="dmxwindow_8h.html#afefa2121a2898700d285e77730a52c4d">dmxCreateAndRealizeWindow()</a>, <a class="el" href="dmxwindow_8c.html#a85749ac991a90590437409977222d827">dmxCreateNonRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#aebb0ce7ac51645832a20c7d6a7d21d9c">dmxCreateWindow()</a>, <a class="el" href="dmxpict_8c.html#a314fad65d3e8f6470ed95e052348df3d">dmxDoCreatePicture()</a>, <a class="el" href="dmxwindow_8c.html#aa3d29fd7e2f88855318fbc5cb739e1b9">dmxDoRestackWindow()</a>, <a class="el" href="dmxwindow_8c.html#acf115ae2724d655dd75267f8b96f1986">dmxDoSetShape()</a>, <a class="el" href="dmxextension_8h.html#a1780283a6dd8f6d66e802b0c9b916f48">dmxForceWindowCreation()</a>, <a class="el" href="dmxextension_8h.html#a81cd222e07016da8ee5c87c44a03312a">dmxGetWindowAttributes()</a>, <a class="el" href="dmxwindow_8h.html#adba873c51adf03b8af700c67fc6fba9b">dmxPositionWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac75f5d6332a78eeac4e0e185cf326045">dmxRealizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#ab07d7010858aa078f26396f420fdea8c">dmxReparentWindow()</a>, <a class="el" href="dmxwindow_8h.html#a817739d4921329f1cf71f2af6fcacfc2">dmxResizeRootWindow()</a>, <a class="el" href="dmxwindow_8h.html#ac3811e381fef200b5cd3207478df66e1">dmxResizeWindow()</a>, <a class="el" href="dmxwindow_8h.html#a21e147f295faee8e53eb162071dc66ad">dmxRestackWindow()</a>, <a class="el" href="dmxwindow_8h.html#aa14e289855150f41c4f574afea427bb0">dmxSetShape()</a>, <a class="el" href="dmxwindow_8h.html#aeab9f468cc2c9374658213ee90a234a0">dmxUnrealizeWindow()</a>, and <a class="el" href="dmxwindow_8h.html#a02a6991e5248012e287fe4be3a985926">dmxWindowExposures()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxwindow_8h_source.html">dmxwindow.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__dmxWinPriv.html">_dmxWinPriv</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/struct__myPrivate.html b/hw/dmx/doc/html/struct__myPrivate.html
new file mode 100644
index 0000000..39296d1
--- /dev/null
+++ b/hw/dmx/doc/html/struct__myPrivate.html
@@ -0,0 +1,1160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('struct__myPrivate.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>_myPrivate Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="_myPrivate" -->
+<p><code>#include &lt;<a class="el" href="usb-private_8h_source.html">usb-private.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br/>
+&#160;&#160;<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a">button1</a> = 0x0001,
+<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0">button2</a> = 0x0002,
+<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395">button3</a> = 0x0004,
+<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0">button4</a> = 0x0008,
+<br/>
+&#160;&#160;<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469">button5</a> = 0x0010
+<br/>
+ }</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br/>
+&#160;&#160;<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a">button1</a> = 0x0001,
+<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0">button2</a> = 0x0002,
+<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395">button3</a> = 0x0004,
+<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0">button4</a> = 0x0008,
+<br/>
+&#160;&#160;<a class="el" href="struct__myPrivate.html#ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469">button5</a> = 0x0010
+<br/>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Volumes Home jeremy src <br class="typebreak"/>
+freedesktop src xserver hw dmx <br class="typebreak"/>
+input dmxbackend c Volumes <br class="typebreak"/>
+Home jeremy src freedesktop <br class="typebreak"/>
+src xserver hw dmx input <br class="typebreak"/>
+dmxbackend c Volumes Home <br class="typebreak"/>
+jeremy src freedesktop src <br class="typebreak"/>
+xserver hw dmx input <br class="typebreak"/>
+dmxbackend c Volumes Home <br class="typebreak"/>
+jeremy src freedesktop src <br class="typebreak"/>
+xserver hw dmx input <br class="typebreak"/>
+dmxbackend c&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a2a31c79813c7055c766ddf46eb614500">DMX_COMMON_PRIVATE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a2097f51728e0db5f4fdc91e7d0613bf7">myScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a0018b915c37ea1c6f329efebbb03f297">grabbedScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#aeb80240bdd4d585ecf2ab890a2e74369">lastX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a25344ec18eba85efb5017bf848f152f4">lastY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a6e729bd1a19bb488a215d22e8cdc5bdc">centerX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ae9759d71e19697ba4ab27cf944deab9c">centerY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a8e9a33e0e90a65241cf26f3c03e8b629">relative</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ad3ad48a8cbc0038ae091dbd8bd9e55a1">newscreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a7a3f2b74b35ff19e8f00857d34e892f3">initialized</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevicePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ab5f8fb12758800c1fbcd95b731ebbee8">mou</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DevicePtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a8247a272435f00e939e150d7dd7db1e0">kbd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ab7925907f71458986fba416d8c9b36e1">entered</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ac1dfcacdf4e49a146bb96f5e6ad0e5ab">offX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a3969310e24e8d98d0456e41d7b10bd6d">offY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a83c7e1a18938a3186ff337ed3a1a6b92">DMX_COMMON_PRIVATE</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">globalX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">globalY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">curX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">curY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">width</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">height</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#acedad74bc71aef05c22a25b63a435f02">consWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ab0fb948041c7994127e526d6904a1c93">consHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a9f848bc9be43096be0590740a9531c4c">xScale</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a9d41da04ff8e8b84f9ee138edffb16c7">yScale</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XlibGC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">gc</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XlibGC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">gcDet</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XlibGC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">gcRev</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">XlibGC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ac926e46006665b40b4189f3a62172fa2">gcCur</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a9d7f5ad2b2066a328c982a2ed051cd94">grabbed</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">fine</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">captured</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a5e949540b57f13f311f6e32847bc9ad1">cursorNormal</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a82b111d9769d9ca67449808c86effd49">cursorGrabbed</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Cursor&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a78c2f55261e44ab6a5f7fd7a3c03a887">cursorEmpty</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">Pixmap&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">pixmap</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CloseScreenProcPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">CloseScreen</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a6e7a5e6234e0718d5f0d8ba03d902fcd">next</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">fd</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a463f3cda6fa6032ea0d976d35cd11c30">vtno</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#abac94345370dae8caaf80f882ef14c8c">vtcurrent</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ade5d3520bc20cf979894ab2e2faf4903">kbdtrans</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct termios&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a3151cfbe868cf35d0e070d554ac21ee0">kbdtty</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ae0dbb095f346fd577827af796f70cfe8">kbdType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">CARD32&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">kbdState</a> [NUM_STATE_ENTRIES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DeviceIntPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">pKeyboard</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a35c7eda9702b723812312689bf412424">prefix</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a7b46718db81521ae01ffbbe8f32a0203">switched</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">SWITCHRETPROC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ab4797772b07f0fc6aca12ca15bf58b26">switch_return</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a263e4371987e44a409cae181d97ce60b">switch_return_data</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ac184b2b8c6283dc678512c5f5990c0f2">pitch</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a6a27aa80849de66952d95ab65914d6da">duration</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DeviceIntPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">pMouse</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct termios&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a94623d180c53cc9a3902ce2c1f75529b">tty</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum _myPrivate:: { ... } &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a8e004313d6a4cb5e86c02c2b32576af5">buttons</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum _myPrivate:: { ... } &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ac202904614deb8a72aa309f152950e6b">buttons</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">DeviceIntPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">pDevice</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">mask</a> [EV_MAX/8+1]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#af4532a0338cfa7325e8e3b2e3deb770f">numRel</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a2ef864f533851d1c4a2a9f6c44400692">numAbs</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a06ca4d02bb8f2a1795251f496ffd3cb2">numLeds</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#ad2d732244cdd84a0cc50bec620d50846">relmap</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#afc48f38bcefc200e681475c06fdacad6">absmap</a> [DMX_MAX_AXES]</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">dmxInput</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Each device has a private area that is visible only from inside the driver code. </p>
+</div><hr/><h2>Member Enumeration Documentation</h2>
+<a class="anchor" id="af1a1a0435d59396c7e2235842cffb6b9"></a><!-- doxytag: member="_myPrivate::@0" ref="af1a1a0435d59396c7e2235842cffb6b9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">anonymous enum</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a"></a><!-- doxytag: member="button1" ref="ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a" args="" -->button1</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0"></a><!-- doxytag: member="button2" ref="ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0" args="" -->button2</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395"></a><!-- doxytag: member="button3" ref="ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395" args="" -->button3</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0"></a><!-- doxytag: member="button4" ref="ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0" args="" -->button4</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469"></a><!-- doxytag: member="button5" ref="ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469" args="" -->button5</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45"></a><!-- doxytag: member="_myPrivate::@1" ref="ad7747ddf42978fb5e40c383bd85bcc45" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">anonymous enum</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a"></a><!-- doxytag: member="button1" ref="ad7747ddf42978fb5e40c383bd85bcc45a70d1e40b6c587d484e6e3d4c11d3040a" args="" -->button1</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0"></a><!-- doxytag: member="button2" ref="ad7747ddf42978fb5e40c383bd85bcc45a61b8d27f01d3717a6cfe90924197bcb0" args="" -->button2</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395"></a><!-- doxytag: member="button3" ref="ad7747ddf42978fb5e40c383bd85bcc45a54c59f9aec5d977b6d24c4b99e231395" args="" -->button3</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0"></a><!-- doxytag: member="button4" ref="ad7747ddf42978fb5e40c383bd85bcc45a057f70c74cc98a84ce5ee712a4da49d0" args="" -->button4</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469"></a><!-- doxytag: member="button5" ref="ad7747ddf42978fb5e40c383bd85bcc45aa3a302e413ac7ef9acf3ba6fc7d8b469" args="" -->button5</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Field Documentation</h2>
+<a class="anchor" id="afc48f38bcefc200e681475c06fdacad6"></a><!-- doxytag: member="_myPrivate::absmap" ref="afc48f38bcefc200e681475c06fdacad6" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#afc48f38bcefc200e681475c06fdacad6">_myPrivate::absmap</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Absolute axis map </p>
+
+</div>
+</div>
+<a class="anchor" id="a8e004313d6a4cb5e86c02c2b32576af5"></a><!-- doxytag: member="_myPrivate::buttons" ref="a8e004313d6a4cb5e86c02c2b32576af5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum { ... } <a class="el" href="struct__myPrivate.html#a8e004313d6a4cb5e86c02c2b32576af5">_myPrivate::buttons</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac202904614deb8a72aa309f152950e6b"></a><!-- doxytag: member="_myPrivate::buttons" ref="ac202904614deb8a72aa309f152950e6b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum { ... } <a class="el" href="struct__myPrivate.html#a8e004313d6a4cb5e86c02c2b32576af5">_myPrivate::buttons</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a9a4d5563651c4cdda4472c78afb06b1b"></a><!-- doxytag: member="_myPrivate::captured" ref="a9a4d5563651c4cdda4472c78afb06b1b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a9a4d5563651c4cdda4472c78afb06b1b">_myPrivate::captured</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, and <a class="el" href="dmxconsole_8h.html#aadf02f44bcb19eb2d0f8507a397a73fb">dmxConsoleUncapture()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6e729bd1a19bb488a215d22e8cdc5bdc"></a><!-- doxytag: member="_myPrivate::centerX" ref="a6e729bd1a19bb488a215d22e8cdc5bdc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a6e729bd1a19bb488a215d22e8cdc5bdc">_myPrivate::centerX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae9759d71e19697ba4ab27cf944deab9c"></a><!-- doxytag: member="_myPrivate::centerY" ref="ae9759d71e19697ba4ab27cf944deab9c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ae9759d71e19697ba4ab27cf944deab9c">_myPrivate::centerY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#a36fc142bcd1dcb22ee46fb68dd443ebc">dmxBackendComputeCenter()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2686564b0b207181c342b8751f15d54e"></a><!-- doxytag: member="_myPrivate::CloseScreen" ref="a2686564b0b207181c342b8751f15d54e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CloseScreenProcPtr <a class="el" href="struct__myPrivate.html#a2686564b0b207181c342b8751f15d54e">_myPrivate::CloseScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>, and <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab0fb948041c7994127e526d6904a1c93"></a><!-- doxytag: member="_myPrivate::consHeight" ref="ab0fb948041c7994127e526d6904a1c93" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ab0fb948041c7994127e526d6904a1c93">_myPrivate::consHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acedad74bc71aef05c22a25b63a435f02"></a><!-- doxytag: member="_myPrivate::consWidth" ref="acedad74bc71aef05c22a25b63a435f02" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#acedad74bc71aef05c22a25b63a435f02">_myPrivate::consWidth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a78c2f55261e44ab6a5f7fd7a3c03a887"></a><!-- doxytag: member="_myPrivate::cursorEmpty" ref="a78c2f55261e44ab6a5f7fd7a3c03a887" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Cursor <a class="el" href="struct__myPrivate.html#a78c2f55261e44ab6a5f7fd7a3c03a887">_myPrivate::cursorEmpty</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a82b111d9769d9ca67449808c86effd49"></a><!-- doxytag: member="_myPrivate::cursorGrabbed" ref="a82b111d9769d9ca67449808c86effd49" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Cursor <a class="el" href="struct__myPrivate.html#a82b111d9769d9ca67449808c86effd49">_myPrivate::cursorGrabbed</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5e949540b57f13f311f6e32847bc9ad1"></a><!-- doxytag: member="_myPrivate::cursorNormal" ref="a5e949540b57f13f311f6e32847bc9ad1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Cursor <a class="el" href="struct__myPrivate.html#a5e949540b57f13f311f6e32847bc9ad1">_myPrivate::cursorNormal</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aaefe49f1fcf601c454ca47cb30227856"></a><!-- doxytag: member="_myPrivate::curX" ref="aaefe49f1fcf601c454ca47cb30227856" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#aaefe49f1fcf601c454ca47cb30227856">_myPrivate::curX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, and <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="adb85f2dced703990e83c3a7067308223"></a><!-- doxytag: member="_myPrivate::curY" ref="adb85f2dced703990e83c3a7067308223" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#adb85f2dced703990e83c3a7067308223">_myPrivate::curY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, and <a class="el" href="dmxconsole_8c.html#a2b430aacdd54f91c8d3f3600daeba404">dmxConsoleMoveAbsolute()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a83c7e1a18938a3186ff337ed3a1a6b92"></a><!-- doxytag: member="_myPrivate::DMX_COMMON_PRIVATE" ref="a83c7e1a18938a3186ff337ed3a1a6b92" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__myPrivate.html#a2a31c79813c7055c766ddf46eb614500">_myPrivate::DMX_COMMON_PRIVATE</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2a31c79813c7055c766ddf46eb614500"></a><!-- doxytag: member="_myPrivate::DMX_COMMON_PRIVATE" ref="a2a31c79813c7055c766ddf46eb614500" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Volumes Home jeremy src freedesktop src xserver hw dmx input dmxbackend c Volumes Home jeremy src freedesktop src xserver hw dmx input dmxbackend c Volumes Home jeremy src freedesktop src xserver hw dmx input dmxbackend c Volumes Home jeremy src freedesktop src xserver hw dmx input dmxbackend c <a class="el" href="struct__myPrivate.html#a2a31c79813c7055c766ddf46eb614500">_myPrivate::DMX_COMMON_PRIVATE</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a0d76644b5072fa20b8470cc0f7bb8958"></a><!-- doxytag: member="_myPrivate::dmxInput" ref="a0d76644b5072fa20b8470cc0f7bb8958" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXInputInfo.html">DMXInputInfo</a>* <a class="el" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">_myPrivate::dmxInput</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>For pretty-printing </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>, and <a class="el" href="dmxconsole_8c.html#a7d50c99c929a09ffebd10b1e3df8a99e">dmxDump()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a27aa80849de66952d95ab65914d6da"></a><!-- doxytag: member="_myPrivate::duration" ref="a6a27aa80849de66952d95ab65914d6da" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned long <a class="el" href="struct__myPrivate.html#a6a27aa80849de66952d95ab65914d6da">_myPrivate::duration</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Bell duration </p>
+
+</div>
+</div>
+<a class="anchor" id="ab7925907f71458986fba416d8c9b36e1"></a><!-- doxytag: member="_myPrivate::entered" ref="ab7925907f71458986fba416d8c9b36e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ab7925907f71458986fba416d8c9b36e1">_myPrivate::entered</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6b26eb0acc0b932c8dee8277501e6273"></a><!-- doxytag: member="_myPrivate::fd" ref="a6b26eb0acc0b932c8dee8277501e6273" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>File descriptor </p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8h.html#aaeba8e3220761201a64b5da3e2f85e52">kbdLinuxCreatePrivate()</a>, <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>, <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>, <a class="el" href="lnx-ms_8h.html#a7d7777681993bc701468245e42c04282">msLinuxCreatePrivate()</a>, <a class="el" href="lnx-ps2_8h.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">ps2LinuxCreatePrivate()</a>, <a class="el" href="usb-common_8h.html#a580f9f4ac56071b925cbf63d8b9dc706">usbCreatePrivate()</a>, and <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a77d289afcee06f9959065231a116b2a4"></a><!-- doxytag: member="_myPrivate::fine" ref="a77d289afcee06f9959065231a116b2a4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a77d289afcee06f9959065231a116b2a4">_myPrivate::fine</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#ae70541f26e4a4ff6360090393d622b41">dmxConsoleCapture()</a>, and <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a309900033b471a595518e7949e741a78"></a><!-- doxytag: member="_myPrivate::gc" ref="a309900033b471a595518e7949e741a78" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XlibGC <a class="el" href="struct__myPrivate.html#a309900033b471a595518e7949e741a78">_myPrivate::gc</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxcursor_8h.html#a84c92b801c5802879047e74401f62e94">dmxBECreateCursor()</a>, <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac926e46006665b40b4189f3a62172fa2"></a><!-- doxytag: member="_myPrivate::gcCur" ref="ac926e46006665b40b4189f3a62172fa2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XlibGC <a class="el" href="struct__myPrivate.html#ac926e46006665b40b4189f3a62172fa2">_myPrivate::gcCur</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, and <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac1cc93ea7cc6840242aea4afd1654812"></a><!-- doxytag: member="_myPrivate::gcDet" ref="ac1cc93ea7cc6840242aea4afd1654812" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XlibGC <a class="el" href="struct__myPrivate.html#ac1cc93ea7cc6840242aea4afd1654812">_myPrivate::gcDet</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, and <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af2293e0e10fbb8014f4d5634c24e9d44"></a><!-- doxytag: member="_myPrivate::gcRev" ref="af2293e0e10fbb8014f4d5634c24e9d44" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">XlibGC <a class="el" href="struct__myPrivate.html#af2293e0e10fbb8014f4d5634c24e9d44">_myPrivate::gcRev</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a4d898acda21ed431ce0ee21303930153">dmxCloseConsole()</a>, <a class="el" href="dmxconsole_8c.html#a1197a51c042b3536fdb3132ac0feec54">dmxConsoleClearCursor()</a>, and <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5d2265df9e523e1bd4a0c81506b82cb"></a><!-- doxytag: member="_myPrivate::globalX" ref="ac5d2265df9e523e1bd4a0c81506b82cb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ac5d2265df9e523e1bd4a0c81506b82cb">_myPrivate::globalX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afbe8cb18da83776018a774b99eb17c14"></a><!-- doxytag: member="_myPrivate::globalY" ref="afbe8cb18da83776018a774b99eb17c14" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#afbe8cb18da83776018a774b99eb17c14">_myPrivate::globalY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>, and <a class="el" href="dmxcursor_8c.html#a1c7f5d94ee32f85ec027c53b881fc697">dmxCursorOffScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d7f5ad2b2066a328c982a2ed051cd94"></a><!-- doxytag: member="_myPrivate::grabbed" ref="a9d7f5ad2b2066a328c982a2ed051cd94" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a9d7f5ad2b2066a328c982a2ed051cd94">_myPrivate::grabbed</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0018b915c37ea1c6f329efebbb03f297"></a><!-- doxytag: member="_myPrivate::grabbedScreen" ref="a0018b915c37ea1c6f329efebbb03f297" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXScreenInfo.html">DMXScreenInfo</a>* <a class="el" href="struct__myPrivate.html#a0018b915c37ea1c6f329efebbb03f297">_myPrivate::grabbedScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad45b674e1ab04442ec268ea80cc8c439"></a><!-- doxytag: member="_myPrivate::height" ref="ad45b674e1ab04442ec268ea80cc8c439" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ad45b674e1ab04442ec268ea80cc8c439">_myPrivate::height</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7a3f2b74b35ff19e8f00857d34e892f3"></a><!-- doxytag: member="_myPrivate::initialized" ref="a7a3f2b74b35ff19e8f00857d34e892f3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a7a3f2b74b35ff19e8f00857d34e892f3">_myPrivate::initialized</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247a272435f00e939e150d7dd7db1e0"></a><!-- doxytag: member="_myPrivate::kbd" ref="a8247a272435f00e939e150d7dd7db1e0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevicePtr <a class="el" href="struct__myPrivate.html#a8247a272435f00e939e150d7dd7db1e0">_myPrivate::kbd</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a35c7b19223e75cef1eebc0467fb2514d"></a><!-- doxytag: member="_myPrivate::kbdState" ref="a35c7b19223e75cef1eebc0467fb2514d" args="[NUM_STATE_ENTRIES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CARD32 <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Keyboard state </p>
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">kbdLinuxKeyDown()</a>, <a class="el" href="lnx-keyboard_8c.html#a0667fd33b8b30b74319818c9e1752950">kbdLinuxKeyState()</a>, <a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">kbdUSBKeyDown()</a>, and <a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">kbdUSBKeyState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ade5d3520bc20cf979894ab2e2faf4903"></a><!-- doxytag: member="_myPrivate::kbdtrans" ref="ade5d3520bc20cf979894ab2e2faf4903" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ade5d3520bc20cf979894ab2e2faf4903">_myPrivate::kbdtrans</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3151cfbe868cf35d0e070d554ac21ee0"></a><!-- doxytag: member="_myPrivate::kbdtty" ref="a3151cfbe868cf35d0e070d554ac21ee0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct termios <a class="el" href="struct__myPrivate.html#a3151cfbe868cf35d0e070d554ac21ee0">_myPrivate::kbdtty</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae0dbb095f346fd577827af796f70cfe8"></a><!-- doxytag: member="_myPrivate::kbdType" ref="ae0dbb095f346fd577827af796f70cfe8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ae0dbb095f346fd577827af796f70cfe8">_myPrivate::kbdType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aeb80240bdd4d585ecf2ab890a2e74369"></a><!-- doxytag: member="_myPrivate::lastX" ref="aeb80240bdd4d585ecf2ab890a2e74369" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#aeb80240bdd4d585ecf2ab890a2e74369">_myPrivate::lastX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxConsoleMoveRelative()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a25344ec18eba85efb5017bf848f152f4"></a><!-- doxytag: member="_myPrivate::lastY" ref="a25344ec18eba85efb5017bf848f152f4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a25344ec18eba85efb5017bf848f152f4">_myPrivate::lastY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#ab395efb910b074e2c4c727c0d63ba79d">dmxConsoleMoveRelative()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5e71754533023837d932a24bd25ff602"></a><!-- doxytag: member="_myPrivate::mask" ref="a5e71754533023837d932a24bd25ff602" args="[EV_MAX/8+1]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">_myPrivate::mask</a>[EV_MAX/8+1]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Mask </p>
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#afdd1f3231a4059e6c13d81cb5b472ab6">dmxConsoleInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab5f8fb12758800c1fbcd95b731ebbee8"></a><!-- doxytag: member="_myPrivate::mou" ref="ab5f8fb12758800c1fbcd95b731ebbee8" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DevicePtr <a class="el" href="struct__myPrivate.html#ab5f8fb12758800c1fbcd95b731ebbee8">_myPrivate::mou</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a2097f51728e0db5f4fdc91e7d0613bf7"></a><!-- doxytag: member="_myPrivate::myScreen" ref="a2097f51728e0db5f4fdc91e7d0613bf7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a2097f51728e0db5f4fdc91e7d0613bf7">_myPrivate::myScreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxbackend_8c.html#ad19eff278a8cb7748201a1e654c4bf32">dmxBackendFindOverlapping()</a>, and <a class="el" href="dmxbackend_8c.html#a110847ce3c1d359156a025cf0dfcd734">dmxBackendSameDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad3ad48a8cbc0038ae091dbd8bd9e55a1"></a><!-- doxytag: member="_myPrivate::newscreen" ref="ad3ad48a8cbc0038ae091dbd8bd9e55a1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ad3ad48a8cbc0038ae091dbd8bd9e55a1">_myPrivate::newscreen</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6e7a5e6234e0718d5f0d8ba03d902fcd"></a><!-- doxytag: member="_myPrivate::next" ref="a6e7a5e6234e0718d5f0d8ba03d902fcd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>* <a class="el" href="struct__myPrivate.html#a6e7a5e6234e0718d5f0d8ba03d902fcd">_myPrivate::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#aa38653f98dd899952cf2b0803ec67bf7">dmxCloseConsoleScreen()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2ef864f533851d1c4a2a9f6c44400692"></a><!-- doxytag: member="_myPrivate::numAbs" ref="a2ef864f533851d1c4a2a9f6c44400692" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a2ef864f533851d1c4a2a9f6c44400692">_myPrivate::numAbs</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a06ca4d02bb8f2a1795251f496ffd3cb2"></a><!-- doxytag: member="_myPrivate::numLeds" ref="a06ca4d02bb8f2a1795251f496ffd3cb2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a06ca4d02bb8f2a1795251f496ffd3cb2">_myPrivate::numLeds</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Counts </p>
+
+</div>
+</div>
+<a class="anchor" id="af4532a0338cfa7325e8e3b2e3deb770f"></a><!-- doxytag: member="_myPrivate::numRel" ref="af4532a0338cfa7325e8e3b2e3deb770f" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#af4532a0338cfa7325e8e3b2e3deb770f">_myPrivate::numRel</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ac1dfcacdf4e49a146bb96f5e6ad0e5ab"></a><!-- doxytag: member="_myPrivate::offX" ref="ac1dfcacdf4e49a146bb96f5e6ad0e5ab" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ac1dfcacdf4e49a146bb96f5e6ad0e5ab">_myPrivate::offX</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a3969310e24e8d98d0456e41d7b10bd6d"></a><!-- doxytag: member="_myPrivate::offY" ref="a3969310e24e8d98d0456e41d7b10bd6d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a3969310e24e8d98d0456e41d7b10bd6d">_myPrivate::offY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae08ddb2f15fe104faf25f51f05c26033"></a><!-- doxytag: member="_myPrivate::pDevice" ref="ae08ddb2f15fe104faf25f51f05c26033" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DeviceIntPtr <a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">_myPrivate::pDevice</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Device (mouse or other) </p>
+
+<p>Referenced by <a class="el" href="usb-common_8h.html#a580f9f4ac56071b925cbf63d8b9dc706">usbCreatePrivate()</a>, and <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac184b2b8c6283dc678512c5f5990c0f2"></a><!-- doxytag: member="_myPrivate::pitch" ref="ac184b2b8c6283dc678512c5f5990c0f2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ac184b2b8c6283dc678512c5f5990c0f2">_myPrivate::pitch</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Keyboard device Bell pitch </p>
+
+</div>
+</div>
+<a class="anchor" id="a6384e7e09282c2d561b987b972ec41fb"></a><!-- doxytag: member="_myPrivate::pixmap" ref="a6384e7e09282c2d561b987b972ec41fb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Pixmap <a class="el" href="struct__myPrivate.html#a6384e7e09282c2d561b987b972ec41fb">_myPrivate::pixmap</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a54f9e8e06f4ead9df8ff103fffff278e">dmxConsoleCreateEmptyCursor()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, <a class="el" href="dmxconsole_8c.html#a276766fb2f2449f248420e3177c36072">dmxConsoleDrawFineCursor()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1f72c73bb97bf77b8f5359eabf81fb79"></a><!-- doxytag: member="_myPrivate::pKeyboard" ref="a1f72c73bb97bf77b8f5359eabf81fb79" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DeviceIntPtr <a class="el" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">_myPrivate::pKeyboard</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8h.html#aaeba8e3220761201a64b5da3e2f85e52">kbdLinuxCreatePrivate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3e46e1ccb546bbadfa5ebb165a8b11d4"></a><!-- doxytag: member="_myPrivate::pMouse" ref="a3e46e1ccb546bbadfa5ebb165a8b11d4" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">DeviceIntPtr <a class="el" href="struct__myPrivate.html#a3e46e1ccb546bbadfa5ebb165a8b11d4">_myPrivate::pMouse</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-ms_8h.html#a7d7777681993bc701468245e42c04282">msLinuxCreatePrivate()</a>, and <a class="el" href="lnx-ps2_8h.html#ab6e438a481e24f8c6ef7d731b8ee4fb8">ps2LinuxCreatePrivate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35c7eda9702b723812312689bf412424"></a><!-- doxytag: member="_myPrivate::prefix" ref="a35c7eda9702b723812312689bf412424" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned char <a class="el" href="struct__myPrivate.html#a35c7eda9702b723812312689bf412424">_myPrivate::prefix</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a67b95ff06cbdb5de12cc01954aa7b67e">kbdLinuxPrefixMapping()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8e9a33e0e90a65241cf26f3c03e8b629"></a><!-- doxytag: member="_myPrivate::relative" ref="a8e9a33e0e90a65241cf26f3c03e8b629" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a8e9a33e0e90a65241cf26f3c03e8b629">_myPrivate::relative</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad2d732244cdd84a0cc50bec620d50846"></a><!-- doxytag: member="_myPrivate::relmap" ref="ad2d732244cdd84a0cc50bec620d50846" args="[DMX_MAX_AXES]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#ad2d732244cdd84a0cc50bec620d50846">_myPrivate::relmap</a>[DMX_MAX_AXES]</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Relative axis map </p>
+
+</div>
+</div>
+<a class="anchor" id="ab4797772b07f0fc6aca12ca15bf58b26"></a><!-- doxytag: member="_myPrivate::switch_return" ref="ab4797772b07f0fc6aca12ca15bf58b26" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">SWITCHRETPROC <a class="el" href="struct__myPrivate.html#ab4797772b07f0fc6aca12ca15bf58b26">_myPrivate::switch_return</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>, and <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a263e4371987e44a409cae181d97ce60b"></a><!-- doxytag: member="_myPrivate::switch_return_data" ref="a263e4371987e44a409cae181d97ce60b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void* <a class="el" href="struct__myPrivate.html#a263e4371987e44a409cae181d97ce60b">_myPrivate::switch_return_data</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>, and <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7b46718db81521ae01ffbbe8f32a0203"></a><!-- doxytag: member="_myPrivate::switched" ref="a7b46718db81521ae01ffbbe8f32a0203" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a7b46718db81521ae01ffbbe8f32a0203">_myPrivate::switched</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a93a481bcaf8d735c29c8b8114cf68eba">kbdLinuxVTSignalHandler()</a>, and <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94623d180c53cc9a3902ce2c1f75529b"></a><!-- doxytag: member="_myPrivate::tty" ref="a94623d180c53cc9a3902ce2c1f75529b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct termios <a class="el" href="struct__myPrivate.html#a94623d180c53cc9a3902ce2c1f75529b">_myPrivate::tty</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="abac94345370dae8caaf80f882ef14c8c"></a><!-- doxytag: member="_myPrivate::vtcurrent" ref="abac94345370dae8caaf80f882ef14c8c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#abac94345370dae8caaf80f882ef14c8c">_myPrivate::vtcurrent</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a463f3cda6fa6032ea0d976d35cd11c30"></a><!-- doxytag: member="_myPrivate::vtno" ref="a463f3cda6fa6032ea0d976d35cd11c30" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#a463f3cda6fa6032ea0d976d35cd11c30">_myPrivate::vtno</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a7e6977d8d414fb1b62710835ca763af4">kbdLinuxVTSwitch()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af746fe4a014fddf10bfeb6c64a543918"></a><!-- doxytag: member="_myPrivate::width" ref="af746fe4a014fddf10bfeb6c64a543918" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="struct__myPrivate.html#af746fe4a014fddf10bfeb6c64a543918">_myPrivate::width</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8h.html#a9c2ec3c63c36955d2458283dbd62b605">dmxConsoleCollectEvents()</a>, <a class="el" href="dmxconsole_8c.html#ae190afd60f808521f7ecdc32d3a0326c">dmxConsoleDraw()</a>, and <a class="el" href="dmxconsole_8c.html#af9111e31dfe8cc6e5a531f66fd11b108">dmxConsoleUpdateFineCursor()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9f848bc9be43096be0590740a9531c4c"></a><!-- doxytag: member="_myPrivate::xScale" ref="a9f848bc9be43096be0590740a9531c4c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="struct__myPrivate.html#a9f848bc9be43096be0590740a9531c4c">_myPrivate::xScale</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a775cc5d6380d9b514484678c74945a17">scalex()</a>, and <a class="el" href="dmxconsole_8c.html#a8d0da535d8543184dd5c418d123806ec">unscalex()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d41da04ff8e8b84f9ee138edffb16c7"></a><!-- doxytag: member="_myPrivate::yScale" ref="a9d41da04ff8e8b84f9ee138edffb16c7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="struct__myPrivate.html#a9d41da04ff8e8b84f9ee138edffb16c7">_myPrivate::yScale</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxconsole_8c.html#a522fcecd527755f128ded24ed2449e67">scaley()</a>, and <a class="el" href="dmxconsole_8c.html#abbad6ed54f9edf3c3a92321eb2d6b424">unscaley()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following files:<ul>
+<li><a class="el" href="dmxbackend_8c.html">dmxbackend.c</a></li>
+<li><a class="el" href="lnx-ms_8c.html">lnx-ms.c</a></li>
+<li><a class="el" href="lnx-ps2_8c.html">lnx-ps2.c</a></li>
+<li><a class="el" href="dmxcommon_8c.html">dmxcommon.c</a></li>
+<li><a class="el" href="dmxconsole_8c.html">dmxconsole.c</a></li>
+<li><a class="el" href="lnx-keyboard_8c.html">lnx-keyboard.c</a></li>
+<li><a class="el" href="usb-private_8h_source.html">usb-private.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="struct__myPrivate.html">_myPrivate</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structdmxGlxVisualPrivate.html b/hw/dmx/doc/html/structdmxGlxVisualPrivate.html
new file mode 100644
index 0000000..1223861
--- /dev/null
+++ b/hw/dmx/doc/html/structdmxGlxVisualPrivate.html
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structdmxGlxVisualPrivate.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>dmxGlxVisualPrivate Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="dmxGlxVisualPrivate" -->
+<p><code>#include &lt;<a class="el" href="dmx__glxvisuals_8h_source.html">dmx_glxvisuals.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">x_visual_depth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">x_visual_class</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>GLX Visual private area. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="a33df80a1990066d8f5a98977efde76de"></a><!-- doxytag: member="dmxGlxVisualPrivate::x_visual_class" ref="a33df80a1990066d8f5a98977efde76de" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structdmxGlxVisualPrivate.html#a33df80a1990066d8f5a98977efde76de">dmxGlxVisualPrivate::x_visual_class</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a22b2f774126458d7577f14bc5bdc40fb"></a><!-- doxytag: member="dmxGlxVisualPrivate::x_visual_depth" ref="a22b2f774126458d7577f14bc5bdc40fb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structdmxGlxVisualPrivate.html#a22b2f774126458d7577f14bc5bdc40fb">dmxGlxVisualPrivate::x_visual_depth</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxinit_8c.html#a51c195c51f4f09e981384a4215f82321">InitOutput()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmx__glxvisuals_8h_source.html">dmx_glxvisuals.h</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structdmxGlxVisualPrivate.html">dmxGlxVisualPrivate</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/structstack.html b/hw/dmx/doc/html/structstack.html
new file mode 100644
index 0000000..d376fd6
--- /dev/null
+++ b/hw/dmx/doc/html/structstack.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li><a href="classes.html"><span>Data&#160;Structure&#160;Index</span></a></li>
+ <li><a href="functions.html"><span>Data&#160;Fields</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('structstack.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<h1>stack Struct Reference</h1> </div>
+</div>
+<div class="contents">
+<!-- doxytag: class="stack" --><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstack.html#ae523dc895d308415be2aa9a6b6bdd40e">base</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstack.html#aab48b0e87fe50c07ec5a9ca59c8fb671">comment</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstack.html#ae67df02e6190f43909f5e055425d237e">step</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structstack.html">stack</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structstack.html#a6f0c4fc768c3baa72d3ac9466defd42c">next</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Stack of indentation information used for pretty-printing configuration information. </p>
+</div><hr/><h2>Field Documentation</h2>
+<a class="anchor" id="ae523dc895d308415be2aa9a6b6bdd40e"></a><!-- doxytag: member="stack::base" ref="ae523dc895d308415be2aa9a6b6bdd40e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structstack.html#ae523dc895d308415be2aa9a6b6bdd40e">stack::base</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>, and <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aab48b0e87fe50c07ec5a9ca59c8fb671"></a><!-- doxytag: member="stack::comment" ref="aab48b0e87fe50c07ec5a9ca59c8fb671" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structstack.html#aab48b0e87fe50c07ec5a9ca59c8fb671">stack::comment</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#ac839095403e872d1a2c5c5bf1fb84d34">dmxConfigPushComment()</a>, and <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6f0c4fc768c3baa72d3ac9466defd42c"></a><!-- doxytag: member="stack::next" ref="a6f0c4fc768c3baa72d3ac9466defd42c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct <a class="el" href="structstack.html">stack</a>* <a class="el" href="structstack.html#a6f0c4fc768c3baa72d3ac9466defd42c">stack::next</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#acfbbca478338b0756a3a98db05c51a01">dmxConfigPopState()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae67df02e6190f43909f5e055425d237e"></a><!-- doxytag: member="stack::step" ref="ae67df02e6190f43909f5e055425d237e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="structstack.html#ae67df02e6190f43909f5e055425d237e">stack::step</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="dmxprint_8c.html#acf88c97e19872aeccfceacb4782e15ec">dmxConfigPushState()</a>, and <a class="el" href="dmxprint_8c.html#a640bd88024bf58bbc7613804eadc23ef">dmxConfigPushStep()</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="dmxprint_8c.html">dmxprint.c</a></li>
+</ul>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="structstack.html">stack</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/tab_a.png b/hw/dmx/doc/html/tab_a.png
new file mode 100644
index 0000000..2d99ef2
--- /dev/null
+++ b/hw/dmx/doc/html/tab_a.png
Binary files differ
diff --git a/hw/dmx/doc/html/tab_b.png b/hw/dmx/doc/html/tab_b.png
new file mode 100644
index 0000000..b2c3d2b
--- /dev/null
+++ b/hw/dmx/doc/html/tab_b.png
Binary files differ
diff --git a/hw/dmx/doc/html/tab_h.png b/hw/dmx/doc/html/tab_h.png
new file mode 100644
index 0000000..c11f48f
--- /dev/null
+++ b/hw/dmx/doc/html/tab_h.png
Binary files differ
diff --git a/hw/dmx/doc/html/tab_s.png b/hw/dmx/doc/html/tab_s.png
new file mode 100644
index 0000000..978943a
--- /dev/null
+++ b/hw/dmx/doc/html/tab_s.png
Binary files differ
diff --git a/hw/dmx/doc/html/tabs.css b/hw/dmx/doc/html/tabs.css
new file mode 100644
index 0000000..2192056
--- /dev/null
+++ b/hw/dmx/doc/html/tabs.css
@@ -0,0 +1,59 @@
+.tabs, .tabs2, .tabs3 {
+ background-image: url('tab_b.png');
+ width: 100%;
+ z-index: 101;
+ font-size: 13px;
+}
+
+.tabs2 {
+ font-size: 10px;
+}
+.tabs3 {
+ font-size: 9px;
+}
+
+.tablist {
+ margin: 0;
+ padding: 0;
+ display: table;
+}
+
+.tablist li {
+ float: left;
+ display: table-cell;
+ background-image: url('tab_b.png');
+ line-height: 36px;
+ list-style: none;
+}
+
+.tablist a {
+ display: block;
+ padding: 0 20px;
+ font-weight: bold;
+ background-image:url('tab_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color: #283A5D;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+ outline: none;
+}
+
+.tabs3 .tablist a {
+ padding: 0 10px;
+}
+
+.tablist a:hover {
+ background-image: url('tab_h.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+ text-decoration: none;
+}
+
+.tablist li.current a {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
diff --git a/hw/dmx/doc/html/usb-common_8c.html b/hw/dmx/doc/html/usb-common_8c.html
new file mode 100644
index 0000000..b7d415e
--- /dev/null
+++ b/hw/dmx/doc/html/usb-common_8c.html
@@ -0,0 +1,799 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-common_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-common.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="usb-private_8h_source.html">usb-private.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-mouse_8h_source.html">usb-mouse.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a4745b9c19ea1cc480dc2b58e59d1e9bb">USB_COMMON_DEBUG</a>&#160;&#160;&#160;1</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a5340233a04762d00a2fc39e922489cbd">GETNAME</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a362570e9b2c9ac295638be490c81d1fb">LOG1INPUT</a>(p, f, a)&#160;&#160;&#160;dmxLogInput(p-&gt;dmxInput,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#ab34476eaeb97ba2e10bab547085c22b8">LOG3INPUT</a>(p, f, a, b, c)&#160;&#160;&#160;dmxLogInput(p-&gt;dmxInput,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#aa9a2c0ce5f5776ac17b498dc1d90ce1f">LOG5INPUT</a>(p, f, a, b, c, d, e)&#160;&#160;&#160;dmxLogInput(p-&gt;dmxInput,f,a,b,c,d,e)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a7581da9bfd7ebf4fe3703352df521931">PRESS</a>(b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a2b4d2480737f9eb52f80998518486f01">RELEASE</a>(b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>(bit)&#160;&#160;&#160;(priv-&gt;mask[(bit)/8] &amp; (1 &lt;&lt; ((bit)%8)))</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a228e7b7d6adf81ad78bc848896044085">test_bits</a>(bit)&#160;&#160;&#160;(bits[(bit)/8] &amp; (1 &lt;&lt; ((bit)%8)))</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, int minButton, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, const char *filename, const char *devname, int fd)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a> (DevicePtr pDev, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a> type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#aa86d87cabbc0971c51452970b7dc879f">usbOff</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a580f9f4ac56071b925cbf63d8b9dc706">usbCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8c.html#a0eca0051ed4a3a117d504d6a82c65313">usbDestroyPrivate</a> (pointer priv)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Routines that are common between <em><a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a></em>, <em><a class="el" href="usb-mouse_8c.html">usb-mouse.c</a></em>, and <em><a class="el" href="usb-other_8c.html">usb-other.c</a></em> </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="usb&#45;common.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="usb&#45;common.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="usb&#45;common.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="usb&#45;common.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="usb&#45;common.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="usb&#45;common.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a5340233a04762d00a2fc39e922489cbd"></a><!-- doxytag: member="usb&#45;common.c::GETNAME" ref="a5340233a04762d00a2fc39e922489cbd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETNAME</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment">((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDevice-&gt;public.devicePrivate)) \
+ -&gt;name
+</pre></div>
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="usb&#45;common.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, <a class="el" href="usb-common_8h.html#aa86d87cabbc0971c51452970b7dc879f">usbOff()</a>, and <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="usb&#45;common.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="usb&#45;common.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a362570e9b2c9ac295638be490c81d1fb"></a><!-- doxytag: member="usb&#45;common.c::LOG1INPUT" ref="a362570e9b2c9ac295638be490c81d1fb" args="(p, f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1INPUT</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">p, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLogInput(p-&gt;dmxInput,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="usb&#45;common.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="usb&#45;common.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab34476eaeb97ba2e10bab547085c22b8"></a><!-- doxytag: member="usb&#45;common.c::LOG3INPUT" ref="ab34476eaeb97ba2e10bab547085c22b8" args="(p, f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3INPUT</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">p, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLogInput(p-&gt;dmxInput,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa9a2c0ce5f5776ac17b498dc1d90ce1f"></a><!-- doxytag: member="usb&#45;common.c::LOG5INPUT" ref="aa9a2c0ce5f5776ac17b498dc1d90ce1f" args="(p, f, a, b, c, d, e)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG5INPUT</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">p, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">d, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">e&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLogInput(p-&gt;dmxInput,f,a,b,c,d,e)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="usb&#45;common.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7581da9bfd7ebf4fe3703352df521931"></a><!-- doxytag: member="usb&#45;common.c::PRESS" ref="a7581da9bfd7ebf4fe3703352df521931" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define PRESS</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ enqueue(pDev, ButtonPress, 0, 0, NULL, block); \
+ } <span class="keywordflow">while</span> (0)
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a2b4d2480737f9eb52f80998518486f01"></a><!-- doxytag: member="usb&#45;common.c::RELEASE" ref="a2b4d2480737f9eb52f80998518486f01" args="(b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define RELEASE</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b</td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keywordflow">do</span> { \
+ enqueue(pDev, ButtonRelease, 0, 0, NULL, block); \
+ } <span class="keywordflow">while</span> (0)
+</pre></div>
+</div>
+</div>
+<a class="anchor" id="a36b621e66020a8ee4641d56c73c4226b"></a><!-- doxytag: member="usb&#45;common.c::test_bit" ref="a36b621e66020a8ee4641d56c73c4226b" args="(bit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define test_bit</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">bit</td><td>)</td>
+ <td>&#160;&#160;&#160;(priv-&gt;mask[(bit)/8] &amp; (1 &lt;&lt; ((bit)%8)))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a228e7b7d6adf81ad78bc848896044085"></a><!-- doxytag: member="usb&#45;common.c::test_bits" ref="a228e7b7d6adf81ad78bc848896044085" args="(bit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define test_bits</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">bit</td><td>)</td>
+ <td>&#160;&#160;&#160;(bits[(bit)/8] &amp; (1 &lt;&lt; ((bit)%8)))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4745b9c19ea1cc480dc2b58e59d1e9bb"></a><!-- doxytag: member="usb&#45;common.c::USB_COMMON_DEBUG" ref="a4745b9c19ea1cc480dc2b58e59d1e9bb" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define USB_COMMON_DEBUG&#160;&#160;&#160;1</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a580f9f4ac56071b925cbf63d8b9dc706"></a><!-- doxytag: member="usb&#45;common.c::usbCreatePrivate" ref="a580f9f4ac56071b925cbf63d8b9dc706" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer usbCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">_myPrivate::pDevice</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0eca0051ed4a3a117d504d6a82c65313"></a><!-- doxytag: member="usb&#45;common.c::usbDestroyPrivate" ref="a0eca0051ed4a3a117d504d6a82c65313" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7f9b3a6d320a9ddbed689f4e12acb443"></a><!-- doxytag: member="usb&#45;common.c::usbInit" ref="a7f9b3a6d320a9ddbed689f4e12acb443" args="(DevicePtr pDev, usbType type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a>&#160;</td>
+ <td class="paramname"><em>type</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialized <em>pDev</em> as a <em>usbMouse</em>, <em>usbKeyboard</em>, or <em>usbOther</em> device. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>, <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>, <a class="el" href="usb-common_8c.html#a228e7b7d6adf81ad78bc848896044085">test_bits</a>, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usbMouse</a>, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usbOther</a>, and <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8h.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit()</a>, <a class="el" href="usb-mouse_8h.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit()</a>, and <a class="el" href="usb-other_8h.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa86d87cabbc0971c51452970b7dc879f"></a><!-- doxytag: member="usb&#45;common.c::usbOff" ref="aa86d87cabbc0971c51452970b7dc879f" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a01c83154e667f74a79fac7b951208646"></a><!-- doxytag: member="usb&#45;common.c::usbPrint" ref="a01c83154e667f74a79fac7b951208646" args="(myPrivate *priv, const char *filename, const char *devname, int fd)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void usbPrint </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>filename</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>devname</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>fd</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="usb-private_8h.html#a28f782ce9e5d1e3cff987901a7bf6823">ABS_BRAKE</a>, <a class="el" href="usb-private_8h.html#acf2960996b3a73cfa447e18a655690c5">ABS_GAS</a>, <a class="el" href="usb-private_8h.html#abc57d88f908f35bd3c82ba7dff0d97e7">ABS_WHEEL</a>, <a class="el" href="usb-private_8h.html#a97886fd107ad9e34bf130fe2e8a5799a">EV_FF</a>, <a class="el" href="usb-private_8h.html#af2e56f461a160409ab75afaa916beebf">EV_MSC</a>, <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, <a class="el" href="usb-common_8c.html#a5340233a04762d00a2fc39e922489cbd">GETNAME</a>, <a class="el" href="usb-private_8h.html#acc1dccaea09503c64e9dfb635e19b29a">LED_MISC</a>, <a class="el" href="usb-private_8h.html#a06e2b597089e33458df03d81fa441995">LED_MUTE</a>, <a class="el" href="usb-private_8h.html#ad578ee0c4ea73206378c55bba1135e84">LED_SLEEP</a>, <a class="el" href="usb-private_8h.html#a59fd9fe6c0cd23e8154bc7578d3676a5">LED_SUSPEND</a>, <a class="el" href="usb-common_8c.html#a362570e9b2c9ac295638be490c81d1fb">LOG1INPUT</a>, <a class="el" href="usb-common_8c.html#ab34476eaeb97ba2e10bab547085c22b8">LOG3INPUT</a>, <a class="el" href="usb-common_8c.html#aa9a2c0ce5f5776ac17b498dc1d90ce1f">LOG5INPUT</a>, <a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">_myPrivate::pDevice</a>, <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>, and <a class="el" href="usb-common_8c.html#a228e7b7d6adf81ad78bc848896044085">test_bits</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae20f3b14463c8e288041f9970e388950"></a><!-- doxytag: member="usb&#45;common.c::usbRead" ref="ae20f3b14463c8e288041f9970e388950" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, int minButton, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>minButton</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function.</p>
+<p>Since USB devices return EV_KEY events for buttons and keys, <em>minButton</em> is used to decide if a Button or Key event should be queued. </p>
+
+<p>References <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a3f6f623d8a62c69c55ec94d33d29af06">DMX_ABSOLUTE</a>, <a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>, <a class="el" href="dmxinputinit_8h.html#a009c1c06db97e0347237f11a701db349a065d85ca14ad2eb8f7bae4eaffac6412">DMX_RELATIVE</a>, <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="usb-common_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>, <a class="el" href="lnx-ms_8c.html#a7581da9bfd7ebf4fe3703352df521931">PRESS</a>, and <a class="el" href="lnx-ms_8c.html#a2b4d2480737f9eb52f80998518486f01">RELEASE</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-mouse_8c.html#ae823cb66bf7678148ffadf3202034921">mouUSBRead()</a>, and <a class="el" href="usb-other_8c.html#a3c2a6d36c58f4372068d019364831151">othUSBRead()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-common_8c.html">usb-common.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-common_8h.html b/hw/dmx/doc/html/usb-common_8h.html
new file mode 100644
index 0000000..55c79b5
--- /dev/null
+++ b/hw/dmx/doc/html/usb-common_8h.html
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-common_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-common.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="usb-common_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a> { <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usbMouse</a>,
+<a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>,
+<a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usbOther</a>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">pointer&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8h.html#a580f9f4ac56071b925cbf63d8b9dc706">usbCreatePrivate</a> (DeviceIntPtr pDevice)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8h.html#a0eca0051ed4a3a117d504d6a82c65313">usbDestroyPrivate</a> (pointer priv)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8h.html#aea8c9cef438c8851ef7f47d7167152cb">usbRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, int minButton, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a> (DevicePtr pDev, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a> type)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-common_8h.html#aa86d87cabbc0971c51452970b7dc879f">usbOff</a> (DevicePtr pDev)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to common USB support. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="usb-common_8c.html">usb-common.c</a> </dd>
+<dd>
+<a class="el" href="usb-mouse_8c.html">usb-mouse.c</a> </dd>
+<dd>
+<a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a> </dd>
+<dd>
+<a class="el" href="usb-other_8c.html">usb-other.c</a> </dd></dl>
+</div><hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="a5e4410bf95babe73bcecc612691fc2d0"></a><!-- doxytag: member="usb&#45;common.h::usbType" ref="a5e4410bf95babe73bcecc612691fc2d0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7"></a><!-- doxytag: member="usbMouse" ref="a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7" args="" -->usbMouse</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3"></a><!-- doxytag: member="usbKeyboard" ref="a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3" args="" -->usbKeyboard</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb"></a><!-- doxytag: member="usbOther" ref="a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb" args="" -->usbOther</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a580f9f4ac56071b925cbf63d8b9dc706"></a><!-- doxytag: member="usb&#45;common.h::usbCreatePrivate" ref="a580f9f4ac56071b925cbf63d8b9dc706" args="(DeviceIntPtr pDevice)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">pointer usbCreatePrivate </td>
+ <td>(</td>
+ <td class="paramtype">DeviceIntPtr&#160;</td>
+ <td class="paramname"><em>pDevice</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Create a private structure for use within this file. </p>
+
+<p>References <a class="el" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">_myPrivate::fd</a>, and <a class="el" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">_myPrivate::pDevice</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0eca0051ed4a3a117d504d6a82c65313"></a><!-- doxytag: member="usb&#45;common.h::usbDestroyPrivate" ref="a0eca0051ed4a3a117d504d6a82c65313" args="(pointer priv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbDestroyPrivate </td>
+ <td>(</td>
+ <td class="paramtype">pointer&#160;</td>
+ <td class="paramname"><em>priv</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Destroy a private structure. </p>
+
+</div>
+</div>
+<a class="anchor" id="a7f9b3a6d320a9ddbed689f4e12acb443"></a><!-- doxytag: member="usb&#45;common.h::usbInit" ref="a7f9b3a6d320a9ddbed689f4e12acb443" args="(DevicePtr pDev, usbType type)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a>&#160;</td>
+ <td class="paramname"><em>type</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialized <em>pDev</em> as a <em>usbMouse</em>, <em>usbKeyboard</em>, or <em>usbOther</em> device. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>, <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="dmxsigio_8c.html#a39d33ce33804efd4d52606d59071c6d8">O_NONBLOCK</a>, <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>, <a class="el" href="usb-common_8c.html#a228e7b7d6adf81ad78bc848896044085">test_bits</a>, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usbMouse</a>, <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usbOther</a>, and <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8h.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit()</a>, <a class="el" href="usb-mouse_8h.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit()</a>, and <a class="el" href="usb-other_8h.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa86d87cabbc0971c51452970b7dc879f"></a><!-- doxytag: member="usb&#45;common.h::usbOff" ref="aa86d87cabbc0971c51452970b7dc879f" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbOff </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> off (i.e., stop taking input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-common_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aea8c9cef438c8851ef7f47d7167152cb"></a><!-- doxytag: member="usb&#45;common.h::usbRead" ref="aea8c9cef438c8851ef7f47d7167152cb" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, int minButton, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void usbRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>minButton</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-common_8h.html">usb-common.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-common_8h_source.html b/hw/dmx/doc/html/usb-common_8h_source.html
new file mode 100644
index 0000000..4757a17
--- /dev/null
+++ b/hw/dmx/doc/html/usb-common_8h_source.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-common_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>usb-common.h</h1> </div>
+</div>
+<div class="contents">
+<a href="usb-common_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00038"></a>00038 <span class="preprocessor">#ifndef _USB_COMMON_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define _USB_COMMON_H_</span>
+<a name="l00040"></a><a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">00040</a> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keyword">enum</span> {
+<a name="l00041"></a><a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">00041</a> <a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usbMouse</a>,
+<a name="l00042"></a><a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">00042</a> <a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>,
+<a name="l00043"></a><a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">00043</a> <a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usbOther</a>
+<a name="l00044"></a>00044 } <a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a>;
+<a name="l00045"></a>00045
+<a name="l00046"></a>00046 <span class="keyword">extern</span> pointer <a class="code" href="usb-common_8c.html#a580f9f4ac56071b925cbf63d8b9dc706">usbCreatePrivate</a>(DeviceIntPtr pDevice);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-common_8c.html#a0eca0051ed4a3a117d504d6a82c65313">usbDestroyPrivate</a>(pointer priv);
+<a name="l00048"></a>00048 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead</a>(DevicePtr pDev,
+<a name="l00049"></a>00049 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00050"></a>00050 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00051"></a>00051 <span class="keywordtype">int</span> minButton,
+<a name="l00052"></a>00052 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00053"></a>00053 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>(DevicePtr pDev, <a class="code" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0">usbType</a> type);
+<a name="l00054"></a>00054 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-common_8c.html#aa86d87cabbc0971c51452970b7dc879f">usbOff</a>(DevicePtr pDev);
+<a name="l00055"></a>00055 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-common_8h.html">usb-common.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-keyboard_8c.html b/hw/dmx/doc/html/usb-keyboard_8c.html
new file mode 100644
index 0000000..c41eafa
--- /dev/null
+++ b/hw/dmx/doc/html/usb-keyboard_8c.html
@@ -0,0 +1,768 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-keyboard_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>usb-keyboard.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;atKeynames.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-private_8h_source.html">usb-private.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-keyboard_8h_source.html">usb-keyboard.h</a>&quot;</code><br/>
+<code>#include &lt;xkbsrv.h&gt;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6a3bdd45bcb120470819f4ef1ffabc57">USB_KEYBOARD_DEBUG</a>&#160;&#160;&#160;0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">GLYPHS_PER_KEY</a>&#160;&#160;&#160;4</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">NUM_KEYCODES</a>&#160;&#160;&#160;248</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>&#160;&#160;&#160;8</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">MAX_KEYCODE</a>&#160;&#160;&#160;(NUM_KEYCODES + MIN_KEYCODE - 1)</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">kbdUSBKeyDown</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int keyCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">kbdUSBKeyState</a> (<a class="el" href="struct__myPrivate.html">myPrivate</a> *priv, int type, int keyCode)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">kbdUSBCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert</a> (DevicePtr pDev, unsigned int scanCode, int value, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap</a> (DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static KeySym&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a> [NUM_KEYCODES *GLYPHS_PER_KEY]</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code implements a low-level device driver for a USB keyboard under Linux. The keymap description is derived from code by Thomas Roell, Orest Zborowski. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="usb&#45;keyboard.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="usb&#45;keyboard.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="usb&#45;keyboard.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="usb&#45;keyboard.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="usb&#45;keyboard.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="usb&#45;keyboard.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="usb&#45;keyboard.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>, <a class="el" href="usb-keyboard_8h.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">kbdUSBCtrl()</a>, <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn()</a>, and <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6238ada986dd7e452a89773c2252a96d"></a><!-- doxytag: member="usb&#45;keyboard.c::GLYPHS_PER_KEY" ref="a6238ada986dd7e452a89773c2252a96d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GLYPHS_PER_KEY&#160;&#160;&#160;4</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="usb&#45;keyboard.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac769af5d0ea9b1ab3a1cd61572f8f302"></a><!-- doxytag: member="usb&#45;keyboard.c::MAX_KEYCODE" ref="ac769af5d0ea9b1ab3a1cd61572f8f302" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MAX_KEYCODE&#160;&#160;&#160;(NUM_KEYCODES + MIN_KEYCODE - 1)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4204c7bd1b89b76ee0bd11d53741d4e6"></a><!-- doxytag: member="usb&#45;keyboard.c::MIN_KEYCODE" ref="a4204c7bd1b89b76ee0bd11d53741d4e6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MIN_KEYCODE&#160;&#160;&#160;8</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#a6338eb254610cdbf7942ad91f23c36fe">kbdLinuxConvert()</a>, <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="usb&#45;keyboard.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6dbb3fc1c4a78ddba8904d186c8b2784"></a><!-- doxytag: member="usb&#45;keyboard.c::NUM_KEYCODES" ref="a6dbb3fc1c4a78ddba8904d186c8b2784" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NUM_KEYCODES&#160;&#160;&#160;248</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6a3bdd45bcb120470819f4ef1ffabc57"></a><!-- doxytag: member="usb&#45;keyboard.c::USB_KEYBOARD_DEBUG" ref="a6a3bdd45bcb120470819f4ef1ffabc57" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define USB_KEYBOARD_DEBUG&#160;&#160;&#160;0</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a1bdbc94af66450a58735130ce8b994d0"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBConvert" ref="a1bdbc94af66450a58735130ce8b994d0" args="(DevicePtr pDev, unsigned int scanCode, int value, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdUSBConvert </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>scanCode</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>value</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="lnx-keyboard_8c.html#a508da29b3082d7901ebf5c7397bd1a88">kbdLinuxKeyDown()</a>, <a class="el" href="usb-keyboard_8c.html#ac5b3c28b56eee8c08253f2c93247c2fb">kbdUSBKeyDown()</a>, <a class="el" href="usb-keyboard_8c.html#a31da2502826ab88638635abb2b719cae">kbdUSBKeyState()</a>, and <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0e9cdd2a76b14cad8a054f2e6e1dbc08"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBCtrl" ref="a0e9cdd2a76b14cad8a054f2e6e1dbc08" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the LEDs. </p>
+
+<p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2513592fe5b9c9f0cafcb299c6531d50"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBGetInfo" ref="a2513592fe5b9c9f0cafcb299c6531d50" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="accd75bb2b1ea015ca086fb41c472546b"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBGetMap" ref="accd75bb2b1ea015ca086fb41c472546b" args="(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdUSBGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeySymsPtr&#160;</td>
+ <td class="paramname"><em>pKeySyms</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CARD8 *&#160;</td>
+ <td class="paramname"><em>pModMap</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="usb-keyboard_8c.html#a6238ada986dd7e452a89773c2252a96d">GLYPHS_PER_KEY</a>, <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, <a class="el" href="usb-keyboard_8c.html#ac769af5d0ea9b1ab3a1cd61572f8f302">MAX_KEYCODE</a>, <a class="el" href="usb-keyboard_8c.html#a4204c7bd1b89b76ee0bd11d53741d4e6">MIN_KEYCODE</a>, and <a class="el" href="usb-keyboard_8c.html#a6dbb3fc1c4a78ddba8904d186c8b2784">NUM_KEYCODES</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a294cdaa0f31f5f463562c72107b569f2"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBInit" ref="a294cdaa0f31f5f463562c72107b569f2" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac5b3c28b56eee8c08253f2c93247c2fb"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBKeyDown" ref="ac5b3c28b56eee8c08253f2c93247c2fb" args="(myPrivate *priv, int keyCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int kbdUSBKeyDown </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>keyCode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a>, and <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a31da2502826ab88638635abb2b719cae"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBKeyState" ref="a31da2502826ab88638635abb2b719cae" args="(myPrivate *priv, int type, int keyCode)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void kbdUSBKeyState </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct__myPrivate.html">myPrivate</a> *&#160;</td>
+ <td class="paramname"><em>priv</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>type</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>keyCode</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">_myPrivate::kbdState</a>, and <a class="el" href="lnx-keyboard_8c.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab1326e68df2758918fd0e9aa06387424"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBOn" ref="ab1326e68df2758918fd0e9aa06387424" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int kbdUSBOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a75d61db123cbd10084ecdee9f18a30bf"></a><!-- doxytag: member="usb&#45;keyboard.c::kbdUSBRead" ref="a75d61db123cbd10084ecdee9f18a30bf" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read an event from the <em>pDev</em> device. If the event is a motion event, enqueue it with the <em>motion</em> function. Otherwise, check for special keys with the <em>checkspecial</em> function and enqueue the event with the <em>enqueue</em> function. The <em>block</em> type is passed to the functions so that they may block SIGIO handling as appropriate to the caller of this function. </p>
+
+<p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="usb-keyboard_8c.html#a1bdbc94af66450a58735130ce8b994d0">kbdUSBConvert()</a>, and <a class="el" href="usb-keyboard_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a2187a19657fb0b38c67dbafc7dd74c4d"></a><!-- doxytag: member="usb&#45;keyboard.c::map" ref="a2187a19657fb0b38c67dbafc7dd74c4d" args="[NUM_KEYCODES *GLYPHS_PER_KEY]" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">KeySym <a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>[NUM_KEYCODES *GLYPHS_PER_KEY]<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="lnx-keyboard_8c.html#ad3e8695c18469949e1ed00f7cd8055a5">kbdLinuxGetMap()</a>, <a class="el" href="lnx-keyboard_8c.html#acc3cbed3f7e836f032b2e131baeb4800">kbdLinuxReadKernelMapping()</a>, and <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-keyboard_8h.html b/hw/dmx/doc/html/usb-keyboard_8h.html
new file mode 100644
index 0000000..19ce6e5
--- /dev/null
+++ b/hw/dmx/doc/html/usb-keyboard_8h.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-keyboard_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-keyboard.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="usb-keyboard_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8h.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8h.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8h.html#a2f9f160c14e7911c167f03c9eab139e7">kbdUSBRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-keyboard_8h.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">kbdUSBCtrl</a> (DevicePtr pDev, KeybdCtrl *ctrl)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to USB keyboard driver. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a> </dd>
+<dd>
+<a class="el" href="usb-common_8c.html">usb-common.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a0e9cdd2a76b14cad8a054f2e6e1dbc08"></a><!-- doxytag: member="usb&#45;keyboard.h::kbdUSBCtrl" ref="a0e9cdd2a76b14cad8a054f2e6e1dbc08" args="(DevicePtr pDev, KeybdCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">KeybdCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Set the LEDs. </p>
+
+<p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2513592fe5b9c9f0cafcb299c6531d50"></a><!-- doxytag: member="usb&#45;keyboard.h::kbdUSBGetInfo" ref="a2513592fe5b9c9f0cafcb299c6531d50" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a24b09c34e0cf80ec33f093e908206be4">_DMXLocalInitInfo::focusClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb7446114b5bdb0baf52806c9a1d249c">_DMXLocalInitInfo::force</a>, <a class="el" href="struct__DMXLocalInitInfo.html#af19caac0e20a9106b73714c9c7991ce5">_DMXLocalInitInfo::kbdFeedbackClass</a>, <a class="el" href="usb-keyboard_8c.html#accd75bb2b1ea015ca086fb41c472546b">kbdUSBGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a214969f0843dcb70d8f7577f58bafa48">_DMXLocalInitInfo::keyboard</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a2e345080abf875ce6f85e63ed631cbcd">_DMXLocalInitInfo::modMap</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a92de3dbbb88844f90aa431f93e16ee05">_DMXLocalInitInfo::names</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a294cdaa0f31f5f463562c72107b569f2"></a><!-- doxytag: member="usb&#45;keyboard.h::kbdUSBInit" ref="a294cdaa0f31f5f463562c72107b569f2" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0ac0ee79f0c48b61dfd08fff502a2752a3">usbKeyboard</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-keyboard_8h.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab1326e68df2758918fd0e9aa06387424"></a><!-- doxytag: member="usb&#45;keyboard.h::kbdUSBOn" ref="ab1326e68df2758918fd0e9aa06387424" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int kbdUSBOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-keyboard_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2f9f160c14e7911c167f03c9eab139e7"></a><!-- doxytag: member="usb&#45;keyboard.h::kbdUSBRead" ref="a2f9f160c14e7911c167f03c9eab139e7" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void kbdUSBRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-keyboard_8h.html">usb-keyboard.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-keyboard_8h_source.html b/hw/dmx/doc/html/usb-keyboard_8h_source.html
new file mode 100644
index 0000000..b9da0b7
--- /dev/null
+++ b/hw/dmx/doc/html/usb-keyboard_8h_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-keyboard_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>usb-keyboard.h</h1> </div>
+</div>
+<div class="contents">
+<a href="usb-keyboard_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _USB_KEYBOARD_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _USB_KEYBOARD_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-keyboard_8c.html#a294cdaa0f31f5f463562c72107b569f2">kbdUSBInit</a>(DevicePtr pDev);
+<a name="l00040"></a>00040 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-keyboard_8c.html#a2513592fe5b9c9f0cafcb299c6531d50">kbdUSBGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00041"></a>00041 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="usb-keyboard_8c.html#ab1326e68df2758918fd0e9aa06387424">kbdUSBOn</a>(DevicePtr pDev);
+<a name="l00042"></a>00042 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-keyboard_8c.html#a75d61db123cbd10084ecdee9f18a30bf">kbdUSBRead</a>(DevicePtr pDev,
+<a name="l00043"></a>00043 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00044"></a>00044 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00045"></a>00045 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00046"></a>00046 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-keyboard_8c.html#a0e9cdd2a76b14cad8a054f2e6e1dbc08">kbdUSBCtrl</a>(DevicePtr pDev, KeybdCtrl *ctrl);
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-keyboard_8h.html">usb-keyboard.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-mouse_8c.html b/hw/dmx/doc/html/usb-mouse_8c.html
new file mode 100644
index 0000000..ff5ca50
--- /dev/null
+++ b/hw/dmx/doc/html/usb-mouse_8c.html
@@ -0,0 +1,507 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-mouse_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-mouse.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="usb-private_8h_source.html">usb-private.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-mouse_8h_source.html">usb-mouse.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#ae823cb66bf7678148ffadf3202034921">mouUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a919a8e16f26a0742cda7c9824270501b">mouUSBOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a006f4bb1b13582dc5d54ba662b84a4d7">mouUSBGetMap</a> (DevicePtr pDev, unsigned char *<a class="el" href="usb-keyboard_8c.html#a2187a19657fb0b38c67dbafc7dd74c4d">map</a>, int *nButtons)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8c.html#a422205f883732c44c29093a832254579">mouUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code implements a low-level device driver for a USB mouse. </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="usb&#45;mouse.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="usb&#45;mouse.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="usb&#45;mouse.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="usb&#45;mouse.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="usb&#45;mouse.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="usb&#45;mouse.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="usb&#45;mouse.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="usb-mouse_8h.html#a919a8e16f26a0742cda7c9824270501b">mouUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="usb&#45;mouse.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="usb&#45;mouse.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="usb&#45;mouse.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="usb&#45;mouse.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="usb&#45;mouse.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a422205f883732c44c29093a832254579"></a><!-- doxytag: member="usb&#45;mouse.c::mouUSBGetInfo" ref="a422205f883732c44c29093a832254579" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="usb-mouse_8c.html#a006f4bb1b13582dc5d54ba662b84a4d7">mouUSBGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a006f4bb1b13582dc5d54ba662b84a4d7"></a><!-- doxytag: member="usb&#45;mouse.c::mouUSBGetMap" ref="a006f4bb1b13582dc5d54ba662b84a4d7" args="(DevicePtr pDev, unsigned char *map, int *nButtons)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void mouUSBGetMap </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned char *&#160;</td>
+ <td class="paramname"><em>map</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>nButtons</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c0a19ce4ec02df96f781152a8cc5d36"></a><!-- doxytag: member="usb&#45;mouse.c::mouUSBInit" ref="a6c0a19ce4ec02df96f781152a8cc5d36" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usbMouse</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-mouse_8h.html#a919a8e16f26a0742cda7c9824270501b">mouUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a919a8e16f26a0742cda7c9824270501b"></a><!-- doxytag: member="usb&#45;mouse.c::mouUSBOn" ref="a919a8e16f26a0742cda7c9824270501b" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int mouUSBOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-mouse_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-mouse_8c.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae823cb66bf7678148ffadf3202034921"></a><!-- doxytag: member="usb&#45;mouse.c::mouUSBRead" ref="ae823cb66bf7678148ffadf3202034921" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read the USB device using <a class="el" href="usb-common_8h.html#aea8c9cef438c8851ef7f47d7167152cb">usbRead</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-mouse_8c.html">usb-mouse.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-mouse_8h.html b/hw/dmx/doc/html/usb-mouse_8h.html
new file mode 100644
index 0000000..285e0c1
--- /dev/null
+++ b/hw/dmx/doc/html/usb-mouse_8h.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-mouse_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-mouse.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="usb-mouse_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8h.html#afb9d774d978b63fed427dc72d94f632d">mouUSBRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8h.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8h.html#a422205f883732c44c29093a832254579">mouUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8h.html#a919a8e16f26a0742cda7c9824270501b">mouUSBOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-mouse_8h.html#a62cd25ae1a19bea910edcbf10c2d8686">mouUSBCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to USB mouse driver. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="usb-mouse_8c.html">usb-mouse.c</a> </dd>
+<dd>
+<a class="el" href="usb-common_8c.html">usb-common.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a62cd25ae1a19bea910edcbf10c2d8686"></a><!-- doxytag: member="usb&#45;mouse.h::mouUSBCtrl" ref="a62cd25ae1a19bea910edcbf10c2d8686" args="(DevicePtr pDev, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a422205f883732c44c29093a832254579"></a><!-- doxytag: member="usb&#45;mouse.h::mouUSBGetInfo" ref="a422205f883732c44c29093a832254579" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a58b2e6764967add7eda1c1f2f0860abc">_DMXLocalInitInfo::buttonClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a43d86cc82219794bba7ba1ee66472a45">_DMXLocalInitInfo::map</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="usb-mouse_8c.html#a006f4bb1b13582dc5d54ba662b84a4d7">mouUSBGetMap()</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a9264f367a1c1e252679299b00f94458c">_DMXLocalInitInfo::numButtons</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a1c52bc6e1c328ef9e808a111dd050fc2">_DMXLocalInitInfo::ptrFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6c0a19ce4ec02df96f781152a8cc5d36"></a><!-- doxytag: member="usb&#45;mouse.h::mouUSBInit" ref="a6c0a19ce4ec02df96f781152a8cc5d36" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0a6bd9e53b1b5835e304e54ba13a227de7">usbMouse</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-mouse_8h.html#a919a8e16f26a0742cda7c9824270501b">mouUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a919a8e16f26a0742cda7c9824270501b"></a><!-- doxytag: member="usb&#45;mouse.h::mouUSBOn" ref="a919a8e16f26a0742cda7c9824270501b" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int mouUSBOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-mouse_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-mouse_8c.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afb9d774d978b63fed427dc72d94f632d"></a><!-- doxytag: member="usb&#45;mouse.h::mouUSBRead" ref="afb9d774d978b63fed427dc72d94f632d" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void mouUSBRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-mouse_8h.html">usb-mouse.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-mouse_8h_source.html b/hw/dmx/doc/html/usb-mouse_8h_source.html
new file mode 100644
index 0000000..c4767a3
--- /dev/null
+++ b/hw/dmx/doc/html/usb-mouse_8h_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-mouse_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>usb-mouse.h</h1> </div>
+</div>
+<div class="contents">
+<a href="usb-mouse_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _USB_MOU_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _USB_MOU_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-mouse_8c.html#ae823cb66bf7678148ffadf3202034921">mouUSBRead</a>(DevicePtr pDev,
+<a name="l00040"></a>00040 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00041"></a>00041 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00042"></a>00042 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00043"></a>00043 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-mouse_8c.html#a6c0a19ce4ec02df96f781152a8cc5d36">mouUSBInit</a>(DevicePtr pDev);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-mouse_8c.html#a422205f883732c44c29093a832254579">mouUSBGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="usb-mouse_8c.html#a919a8e16f26a0742cda7c9824270501b">mouUSBOn</a>(DevicePtr pDev);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-mouse_8h.html#a62cd25ae1a19bea910edcbf10c2d8686">mouUSBCtrl</a>(DevicePtr pDev, PtrCtrl *ctrl);
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-mouse_8h.html">usb-mouse.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-other_8c.html b/hw/dmx/doc/html/usb-other_8c.html
new file mode 100644
index 0000000..1551dbe
--- /dev/null
+++ b/hw/dmx/doc/html/usb-other_8c.html
@@ -0,0 +1,490 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-other_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-other.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="usb-private_8h_source.html">usb-private.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="usb-other_8h_source.html">usb-other.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a837722a322e811d5e42242655f277b87">LOG0</a>(f)&#160;&#160;&#160;dmxLog(dmxDebug,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#aab4b3434c36117a2ecdddec40716d97a">LOG1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a16da5d597d9bfb9e569a9bfb6996382c">LOG2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a8247f0bca25789d2ac27674eb26e223f">LOG3</a>(f, a, b, c)&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a6bce6020b913db8afe5d94bc63d1b355">FATAL0</a>(f)&#160;&#160;&#160;dmxLog(dmxFatal,f)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a11bcea7c6bc7dbe400a3855f5b8676ce">FATAL1</a>(f, a)&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a7952c9e9fe9c75be4964fc53a4299183">FATAL2</a>(f, a, b)&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a11a17082bee3b1b8217ce8a12adcf814">MOTIONPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a017080ce5e42667a6582cf858e7185cd">ENQUEUEPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#aa35a985e998ad5e2187e13434dca118a">CHECKPROC</a>&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a52220397ecea855b3a99746e451426e1">BLOCK</a>&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>(bit)&#160;&#160;&#160;(priv-&gt;mask[(bit)/8] &amp; (1 &lt;&lt; ((bit)%8)))</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a3c2a6d36c58f4372068d019364831151">othUSBRead</a> (DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a1f1af19f36fcccfc6b67c814fb360573">othUSBOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8c.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>This code implements a low-level device driver for a non-keyboard, non-mouse USB device (e.g., a joystick or gamepad). </p>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a52220397ecea855b3a99746e451426e1"></a><!-- doxytag: member="usb&#45;other.c::BLOCK" ref="a52220397ecea855b3a99746e451426e1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BLOCK&#160;&#160;&#160;<a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aa35a985e998ad5e2187e13434dca118a"></a><!-- doxytag: member="usb&#45;other.c::CHECKPROC" ref="aa35a985e998ad5e2187e13434dca118a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define CHECKPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a017080ce5e42667a6582cf858e7185cd"></a><!-- doxytag: member="usb&#45;other.c::ENQUEUEPROC" ref="a017080ce5e42667a6582cf858e7185cd" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ENQUEUEPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a6bce6020b913db8afe5d94bc63d1b355"></a><!-- doxytag: member="usb&#45;other.c::FATAL0" ref="a6bce6020b913db8afe5d94bc63d1b355" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxFatal,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11bcea7c6bc7dbe400a3855f5b8676ce"></a><!-- doxytag: member="usb&#45;other.c::FATAL1" ref="a11bcea7c6bc7dbe400a3855f5b8676ce" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a7952c9e9fe9c75be4964fc53a4299183"></a><!-- doxytag: member="usb&#45;other.c::FATAL2" ref="a7952c9e9fe9c75be4964fc53a4299183" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define FATAL2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxFatal,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aacf069d346230dd96812d5395728eef2"></a><!-- doxytag: member="usb&#45;other.c::GETPRIV" ref="aacf069d346230dd96812d5395728eef2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define GETPRIV</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<b>Value:</b><div class="fragment"><pre class="fragment"><a class="code" href="struct__myPrivate.html">myPrivate</a> *priv \
+ = ((<a class="code" href="dmxinput_8h.html#adb148db00fe0adf1938b815b9b934d26">DMXLocalInputInfoPtr</a>)(pDev-&gt;devicePrivate))-&gt;private
+</pre></div>
+<p>Referenced by <a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo()</a>, and <a class="el" href="usb-other_8h.html#a1f1af19f36fcccfc6b67c814fb360573">othUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a837722a322e811d5e42242655f277b87"></a><!-- doxytag: member="usb&#45;other.c::LOG0" ref="a837722a322e811d5e42242655f277b87" args="(f)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG0</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f</td><td>)</td>
+ <td>&#160;&#160;&#160;dmxLog(dmxDebug,f)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="aab4b3434c36117a2ecdddec40716d97a"></a><!-- doxytag: member="usb&#45;other.c::LOG1" ref="aab4b3434c36117a2ecdddec40716d97a" args="(f, a)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG1</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a16da5d597d9bfb9e569a9bfb6996382c"></a><!-- doxytag: member="usb&#45;other.c::LOG2" ref="a16da5d597d9bfb9e569a9bfb6996382c" args="(f, a, b)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG2</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8247f0bca25789d2ac27674eb26e223f"></a><!-- doxytag: member="usb&#45;other.c::LOG3" ref="a8247f0bca25789d2ac27674eb26e223f" args="(f, a, b, c)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LOG3</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">f, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">a, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">b, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">c&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;dmxLog(dmxDebug,f,a,b,c)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a11a17082bee3b1b8217ce8a12adcf814"></a><!-- doxytag: member="usb&#45;other.c::MOTIONPROC" ref="a11a17082bee3b1b8217ce8a12adcf814" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MOTIONPROC&#160;&#160;&#160;<a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a36b621e66020a8ee4641d56c73c4226b"></a><!-- doxytag: member="usb&#45;other.c::test_bit" ref="a36b621e66020a8ee4641d56c73c4226b" args="(bit)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define test_bit</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">bit</td><td>)</td>
+ <td>&#160;&#160;&#160;(priv-&gt;mask[(bit)/8] &amp; (1 &lt;&lt; ((bit)%8)))</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a35a421bfc49015d8ed37cac84746ba78"></a><!-- doxytag: member="usb&#45;other.c::othUSBGetInfo" ref="a35a421bfc49015d8ed37cac84746ba78" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">_DMXLocalInitInfo::belFeedbackClass</a>, <a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">_DMXLocalInitInfo::ledFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo::numAbsAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1b551c84928693ea1b2edebf6c4fcff"></a><!-- doxytag: member="usb&#45;other.c::othUSBInit" ref="ad1b551c84928693ea1b2edebf6c4fcff" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usbOther</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-other_8h.html#a1f1af19f36fcccfc6b67c814fb360573">othUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1f1af19f36fcccfc6b67c814fb360573"></a><!-- doxytag: member="usb&#45;other.c::othUSBOn" ref="a1f1af19f36fcccfc6b67c814fb360573" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int othUSBOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-other_8c.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3c2a6d36c58f4372068d019364831151"></a><!-- doxytag: member="usb&#45;other.c::othUSBRead" ref="a3c2a6d36c58f4372068d019364831151" args="(DevicePtr pDev, MOTIONPROC motion, ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">MOTIONPROC&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">ENQUEUEPROC&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">CHECKPROC&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">BLOCK&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Read the USB device using <a class="el" href="usb-common_8h.html#aea8c9cef438c8851ef7f47d7167152cb">usbRead</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#ae20f3b14463c8e288041f9970e388950">usbRead()</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-other_8c.html">usb-other.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-other_8h.html b/hw/dmx/doc/html/usb-other_8h.html
new file mode 100644
index 0000000..6e92891
--- /dev/null
+++ b/hw/dmx/doc/html/usb-other_8h.html
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-other_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>usb-other.h File Reference</h1> </div>
+</div>
+<div class="contents">
+
+<p><a href="usb-other_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8h.html#a901d4789dd6f963fb642427bc6816033">othUSBRead</a> (DevicePtr pDev, <a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion, <a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue, <a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial, <a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8h.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8h.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo</a> (DevicePtr pDev, <a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8h.html#a1f1af19f36fcccfc6b67c814fb360573">othUSBOn</a> (DevicePtr pDev)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-other_8h.html#a968e84db8d818b0fdd455cf61a1da058">othUSBCtrl</a> (DevicePtr pDev, PtrCtrl *ctrl)</td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Interface to USB generic driver. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="usb-other_8c.html">usb-other.c</a> </dd>
+<dd>
+<a class="el" href="usb-common_8c.html">usb-common.c</a> </dd></dl>
+</div><hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a968e84db8d818b0fdd455cf61a1da058"></a><!-- doxytag: member="usb&#45;other.h::othUSBCtrl" ref="a968e84db8d818b0fdd455cf61a1da058" args="(DevicePtr pDev, PtrCtrl *ctrl)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBCtrl </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">PtrCtrl *&#160;</td>
+ <td class="paramname"><em>ctrl</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a35a421bfc49015d8ed37cac84746ba78"></a><!-- doxytag: member="usb&#45;other.h::othUSBGetInfo" ref="a35a421bfc49015d8ed37cac84746ba78" args="(DevicePtr pDev, DMXLocalInitInfoPtr info)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBGetInfo </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a>&#160;</td>
+ <td class="paramname"><em>info</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Fill the <em>info</em> structure with information needed to initialize <em>pDev</em>. </p>
+
+<p>References <a class="el" href="struct__DMXLocalInitInfo.html#a088c60acc5806ebcc401fa1da108b3f5">_DMXLocalInitInfo::belFeedbackClass</a>, <a class="el" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a06626a99542714bbd032e9e12a8c6b55">_DMXLocalInitInfo::keyClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a02861e7e9c24381a229567d36e7a68b7">_DMXLocalInitInfo::keySyms</a>, <a class="el" href="struct__DMXLocalInitInfo.html#accf423e8cf2614500108be41ed23492d">_DMXLocalInitInfo::ledFeedbackClass</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5de8a5ac80a30840cba0d9f3074289ca">_DMXLocalInitInfo::maxres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a63477e691c43eca2dbf569fb0feb74be">_DMXLocalInitInfo::maxval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a139fed62b89a92d80997166c8cfcdebf">_DMXLocalInitInfo::minres</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a0c47ee21909227a1ea5d40ba473e0e25">_DMXLocalInitInfo::minval</a>, <a class="el" href="struct__DMXLocalInitInfo.html#aa7576ebc7b4f56d51da6a21fcd7b07d4">_DMXLocalInitInfo::numAbsAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#a5e192625179bbed020a720e448c789aa">_DMXLocalInitInfo::numRelAxes</a>, <a class="el" href="struct__DMXLocalInitInfo.html#abb910012dc1abde90f954354f8ceb2a1">_DMXLocalInitInfo::res</a>, <a class="el" href="usb-common_8c.html#a36b621e66020a8ee4641d56c73c4226b">test_bit</a>, and <a class="el" href="struct__DMXLocalInitInfo.html#a9af277d2da1ade2138488a413e9c5ceb">_DMXLocalInitInfo::valuatorClass</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad1b551c84928693ea1b2edebf6c4fcff"></a><!-- doxytag: member="usb&#45;other.h::othUSBInit" ref="ad1b551c84928693ea1b2edebf6c4fcff" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBInit </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Initialize <em>pDev</em> using <a class="el" href="usb-common_8h.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit</a>. </p>
+
+<p>References <a class="el" href="usb-common_8c.html#a7f9b3a6d320a9ddbed689f4e12acb443">usbInit()</a>, and <a class="el" href="usb-common_8h.html#a5e4410bf95babe73bcecc612691fc2d0acf68ef2e5cae37647c412e73c93960fb">usbOther</a>.</p>
+
+<p>Referenced by <a class="el" href="usb-other_8h.html#a1f1af19f36fcccfc6b67c814fb360573">othUSBOn()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1f1af19f36fcccfc6b67c814fb360573"></a><!-- doxytag: member="usb&#45;other.h::othUSBOn" ref="a1f1af19f36fcccfc6b67c814fb360573" args="(DevicePtr pDev)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int othUSBOn </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<p>Turn <em>pDev</em> on (i.e., take input from <em>pDev</em>). </p>
+
+<p>References <a class="el" href="usb-other_8c.html#aacf069d346230dd96812d5395728eef2">GETPRIV</a>, and <a class="el" href="usb-other_8c.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a901d4789dd6f963fb642427bc6816033"></a><!-- doxytag: member="usb&#45;other.h::othUSBRead" ref="a901d4789dd6f963fb642427bc6816033" args="(DevicePtr pDev, dmxMotionProcPtr motion, dmxEnqueueProcPtr enqueue, dmxCheckSpecialProcPtr checkspecial, DMXBlockType block)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void othUSBRead </td>
+ <td>(</td>
+ <td class="paramtype">DevicePtr&#160;</td>
+ <td class="paramname"><em>pDev</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a>&#160;</td>
+ <td class="paramname"><em>motion</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a>&#160;</td>
+ <td class="paramname"><em>enqueue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a>&#160;</td>
+ <td class="paramname"><em>checkspecial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a>&#160;</td>
+ <td class="paramname"><em>block</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-other_8h.html">usb-other.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-other_8h_source.html b/hw/dmx/doc/html/usb-other_8h_source.html
new file mode 100644
index 0000000..c0ba6a2
--- /dev/null
+++ b/hw/dmx/doc/html/usb-other_8h_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-other_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>usb-other.h</h1> </div>
+</div>
+<div class="contents">
+<a href="usb-other_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00037"></a>00037 <span class="preprocessor">#ifndef _USB_OTHER_H_</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define _USB_OTHER_H_</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-other_8c.html#a3c2a6d36c58f4372068d019364831151">othUSBRead</a>(DevicePtr pDev,
+<a name="l00040"></a>00040 <a class="code" href="dmxinputinit_8h.html#a1279820425966adabf5c77357e4a289c">dmxMotionProcPtr</a> motion,
+<a name="l00041"></a>00041 <a class="code" href="dmxinputinit_8h.html#adbd955b9ddbc5ffe38ff65e3f068f205">dmxEnqueueProcPtr</a> enqueue,
+<a name="l00042"></a>00042 <a class="code" href="dmxinputinit_8h.html#a838cb45fd92d5cf506e4179b601f7dbc">dmxCheckSpecialProcPtr</a> checkspecial,
+<a name="l00043"></a>00043 <a class="code" href="dmxinput_8h.html#a3a7195ab3516c5354bac4ca80b2eedb7">DMXBlockType</a> block);
+<a name="l00044"></a>00044 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-other_8c.html#ad1b551c84928693ea1b2edebf6c4fcff">othUSBInit</a>(DevicePtr pDev);
+<a name="l00045"></a>00045 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-other_8c.html#a35a421bfc49015d8ed37cac84746ba78">othUSBGetInfo</a>(DevicePtr pDev, <a class="code" href="struct__DMXLocalInitInfo.html">DMXLocalInitInfoPtr</a> info);
+<a name="l00046"></a>00046 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="usb-other_8c.html#a1f1af19f36fcccfc6b67c814fb360573">othUSBOn</a>(DevicePtr pDev);
+<a name="l00047"></a>00047 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="usb-other_8h.html#a968e84db8d818b0fdd455cf61a1da058">othUSBCtrl</a>(DevicePtr pDev, PtrCtrl *ctrl);
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-other_8h.html">usb-other.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-private_8h.html b/hw/dmx/doc/html/usb-private_8h.html
new file mode 100644
index 0000000..236fab5
--- /dev/null
+++ b/hw/dmx/doc/html/usb-private_8h.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-private_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Defines</a> &#124;
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<h1>usb-private.h File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxinputinit_8h_source.html">dmxinputinit.h</a>&quot;</code><br/>
+<code>#include &quot;inputstr.h&quot;</code><br/>
+<code>#include &lt;X11/Xos.h&gt;</code><br/>
+<code>#include &lt;errno.h&gt;</code><br/>
+<code>#include &lt;linux/input.h&gt;</code><br/>
+<code>#include &quot;<a class="el" href="usb-common_8h_source.html">usb-common.h</a>&quot;</code><br/>
+</div>
+<p><a href="usb-private_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__myPrivate.html">_myPrivate</a></td></tr>
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#af2e56f461a160409ab75afaa916beebf">EV_MSC</a>&#160;&#160;&#160;0x04</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a97886fd107ad9e34bf130fe2e8a5799a">EV_FF</a>&#160;&#160;&#160;0x15</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#ad578ee0c4ea73206378c55bba1135e84">LED_SLEEP</a>&#160;&#160;&#160;0x05</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a59fd9fe6c0cd23e8154bc7578d3676a5">LED_SUSPEND</a>&#160;&#160;&#160;0x06</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a06e2b597089e33458df03d81fa441995">LED_MUTE</a>&#160;&#160;&#160;0x07</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#acc1dccaea09503c64e9dfb635e19b29a">LED_MISC</a>&#160;&#160;&#160;0x08</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a0774f9bbd6ba5b888d42a088b906deaf">BTN_DEAD</a>&#160;&#160;&#160;0x12f</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#ad7efb66d8b7e7e5ef815d869534a769e">BTN_THUMBL</a>&#160;&#160;&#160;0x13d</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#ab637d656fd23697017c9b50be714119d">BTN_THUMBR</a>&#160;&#160;&#160;0x13e</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#af0896a7858b26c8c2eb9d8406f2aa32c">MSC_SERIAL</a>&#160;&#160;&#160;0x00</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#abe411125a4bc2a57b8656a3d44acfc0d">MSC_MAX</a>&#160;&#160;&#160;0x07</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#abc57d88f908f35bd3c82ba7dff0d97e7">ABS_WHEEL</a>&#160;&#160;&#160;0x08</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#acf2960996b3a73cfa447e18a655690c5">ABS_GAS</a>&#160;&#160;&#160;0x09</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a28f782ce9e5d1e3cff987901a7bf6823">ABS_BRAKE</a>&#160;&#160;&#160;0x0a</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>&#160;&#160;&#160;(256/32)</td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="usb-private_8h.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a></td></tr>
+</table>
+<hr/><a name="_details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>Private header file for USB support. This file provides Linux-specific include files and the definition of the private structure. </p>
+<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="usb-common_8c.html">usb-common.c</a> </dd>
+<dd>
+<a class="el" href="usb-keyboard_8c.html">usb-keyboard.c</a> </dd>
+<dd>
+<a class="el" href="usb-mouse_8c.html">usb-mouse.c</a> </dd>
+<dd>
+<a class="el" href="usb-other_8c.html">usb-other.c</a> </dd></dl>
+</div><hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a28f782ce9e5d1e3cff987901a7bf6823"></a><!-- doxytag: member="usb&#45;private.h::ABS_BRAKE" ref="a28f782ce9e5d1e3cff987901a7bf6823" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABS_BRAKE&#160;&#160;&#160;0x0a</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acf2960996b3a73cfa447e18a655690c5"></a><!-- doxytag: member="usb&#45;private.h::ABS_GAS" ref="acf2960996b3a73cfa447e18a655690c5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABS_GAS&#160;&#160;&#160;0x09</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abc57d88f908f35bd3c82ba7dff0d97e7"></a><!-- doxytag: member="usb&#45;private.h::ABS_WHEEL" ref="abc57d88f908f35bd3c82ba7dff0d97e7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ABS_WHEEL&#160;&#160;&#160;0x08</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0774f9bbd6ba5b888d42a088b906deaf"></a><!-- doxytag: member="usb&#45;private.h::BTN_DEAD" ref="a0774f9bbd6ba5b888d42a088b906deaf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BTN_DEAD&#160;&#160;&#160;0x12f</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ad7efb66d8b7e7e5ef815d869534a769e"></a><!-- doxytag: member="usb&#45;private.h::BTN_THUMBL" ref="ad7efb66d8b7e7e5ef815d869534a769e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BTN_THUMBL&#160;&#160;&#160;0x13d</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ab637d656fd23697017c9b50be714119d"></a><!-- doxytag: member="usb&#45;private.h::BTN_THUMBR" ref="ab637d656fd23697017c9b50be714119d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define BTN_THUMBR&#160;&#160;&#160;0x13e</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a97886fd107ad9e34bf130fe2e8a5799a"></a><!-- doxytag: member="usb&#45;private.h::EV_FF" ref="a97886fd107ad9e34bf130fe2e8a5799a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define EV_FF&#160;&#160;&#160;0x15</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af2e56f461a160409ab75afaa916beebf"></a><!-- doxytag: member="usb&#45;private.h::EV_MSC" ref="af2e56f461a160409ab75afaa916beebf" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define EV_MSC&#160;&#160;&#160;0x04</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acc1dccaea09503c64e9dfb635e19b29a"></a><!-- doxytag: member="usb&#45;private.h::LED_MISC" ref="acc1dccaea09503c64e9dfb635e19b29a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LED_MISC&#160;&#160;&#160;0x08</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a06e2b597089e33458df03d81fa441995"></a><!-- doxytag: member="usb&#45;private.h::LED_MUTE" ref="a06e2b597089e33458df03d81fa441995" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LED_MUTE&#160;&#160;&#160;0x07</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad578ee0c4ea73206378c55bba1135e84"></a><!-- doxytag: member="usb&#45;private.h::LED_SLEEP" ref="ad578ee0c4ea73206378c55bba1135e84" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LED_SLEEP&#160;&#160;&#160;0x05</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a59fd9fe6c0cd23e8154bc7578d3676a5"></a><!-- doxytag: member="usb&#45;private.h::LED_SUSPEND" ref="a59fd9fe6c0cd23e8154bc7578d3676a5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define LED_SUSPEND&#160;&#160;&#160;0x06</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="usb-common_8c.html#a01c83154e667f74a79fac7b951208646">usbPrint()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abe411125a4bc2a57b8656a3d44acfc0d"></a><!-- doxytag: member="usb&#45;private.h::MSC_MAX" ref="abe411125a4bc2a57b8656a3d44acfc0d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MSC_MAX&#160;&#160;&#160;0x07</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="af0896a7858b26c8c2eb9d8406f2aa32c"></a><!-- doxytag: member="usb&#45;private.h::MSC_SERIAL" ref="af0896a7858b26c8c2eb9d8406f2aa32c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MSC_SERIAL&#160;&#160;&#160;0x00</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a4551482d17e969e4de70a669be3afc74"></a><!-- doxytag: member="usb&#45;private.h::NUM_STATE_ENTRIES" ref="a4551482d17e969e4de70a669be3afc74" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define NUM_STATE_ENTRIES&#160;&#160;&#160;(256/32)</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Typedef Documentation</h2>
+<a class="anchor" id="a25692217bddf2b6c089525b325afccf1"></a><!-- doxytag: member="usb&#45;private.h::myPrivate" ref="a25692217bddf2b6c089525b325afccf1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">typedef struct <a class="el" href="struct__myPrivate.html">_myPrivate</a> <a class="el" href="struct__myPrivate.html">myPrivate</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-private_8h.html">usb-private.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/usb-private_8h_source.html b/hw/dmx/doc/html/usb-private_8h_source.html
new file mode 100644
index 0000000..593b38d
--- /dev/null
+++ b/hw/dmx/doc/html/usb-private_8h_source.html
@@ -0,0 +1,166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('usb-private_8h.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<h1>usb-private.h</h1> </div>
+</div>
+<div class="contents">
+<a href="usb-private_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
+<a name="l00002"></a>00002 <span class="comment"> * Copyright 2002 Red Hat Inc., Durham, North Carolina.</span>
+<a name="l00003"></a>00003 <span class="comment"> *</span>
+<a name="l00004"></a>00004 <span class="comment"> * All Rights Reserved.</span>
+<a name="l00005"></a>00005 <span class="comment"> *</span>
+<a name="l00006"></a>00006 <span class="comment"> * Permission is hereby granted, free of charge, to any person obtaining</span>
+<a name="l00007"></a>00007 <span class="comment"> * a copy of this software and associated documentation files (the</span>
+<a name="l00008"></a>00008 <span class="comment"> * &quot;Software&quot;), to deal in the Software without restriction, including</span>
+<a name="l00009"></a>00009 <span class="comment"> * without limitation on the rights to use, copy, modify, merge,</span>
+<a name="l00010"></a>00010 <span class="comment"> * publish, distribute, sublicense, and/or sell copies of the Software,</span>
+<a name="l00011"></a>00011 <span class="comment"> * and to permit persons to whom the Software is furnished to do so,</span>
+<a name="l00012"></a>00012 <span class="comment"> * subject to the following conditions:</span>
+<a name="l00013"></a>00013 <span class="comment"> *</span>
+<a name="l00014"></a>00014 <span class="comment"> * The above copyright notice and this permission notice (including the</span>
+<a name="l00015"></a>00015 <span class="comment"> * next paragraph) shall be included in all copies or substantial</span>
+<a name="l00016"></a>00016 <span class="comment"> * portions of the Software.</span>
+<a name="l00017"></a>00017 <span class="comment"> *</span>
+<a name="l00018"></a>00018 <span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span>
+<a name="l00019"></a>00019 <span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span>
+<a name="l00020"></a>00020 <span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span>
+<a name="l00021"></a>00021 <span class="comment"> * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS</span>
+<a name="l00022"></a>00022 <span class="comment"> * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN</span>
+<a name="l00023"></a>00023 <span class="comment"> * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN</span>
+<a name="l00024"></a>00024 <span class="comment"> * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</span>
+<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE.</span>
+<a name="l00026"></a>00026 <span class="comment"> */</span>
+<a name="l00027"></a>00027
+<a name="l00028"></a>00028 <span class="comment">/*</span>
+<a name="l00029"></a>00029 <span class="comment"> * Authors:</span>
+<a name="l00030"></a>00030 <span class="comment"> * Rickard E. (Rik) Faith &lt;faith@redhat.com&gt;</span>
+<a name="l00031"></a>00031 <span class="comment"> *</span>
+<a name="l00032"></a>00032 <span class="comment"> */</span>
+<a name="l00033"></a>00033
+<a name="l00040"></a>00040 <span class="preprocessor">#ifndef _USB_PRIVATE_H_</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#define _USB_PRIVATE_H_</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 <span class="preprocessor">#include &quot;<a class="code" href="dmxinputinit_8h.html">dmxinputinit.h</a>&quot;</span>
+<a name="l00044"></a>00044 <span class="preprocessor">#include &quot;inputstr.h&quot;</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#include &lt;X11/Xos.h&gt;</span>
+<a name="l00046"></a>00046 <span class="preprocessor">#include &lt;errno.h&gt;</span>
+<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;linux/input.h&gt;</span>
+<a name="l00048"></a>00048 <span class="preprocessor">#include &quot;<a class="code" href="usb-common_8h.html">usb-common.h</a>&quot;</span>
+<a name="l00049"></a>00049
+<a name="l00050"></a>00050 <span class="comment">/* Support for force feedback was</span>
+<a name="l00051"></a>00051 <span class="comment"> * introduced in Linxu 2.4.10 */</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#ifndef EV_MSC</span>
+<a name="l00053"></a><a class="code" href="usb-private_8h.html#af2e56f461a160409ab75afaa916beebf">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define EV_MSC 0x04</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#ifndef EV_FF</span>
+<a name="l00056"></a><a class="code" href="usb-private_8h.html#a97886fd107ad9e34bf130fe2e8a5799a">00056</a> <span class="preprocessor"></span><span class="preprocessor">#define EV_FF 0x15</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_SLEEP</span>
+<a name="l00059"></a><a class="code" href="usb-private_8h.html#ad578ee0c4ea73206378c55bba1135e84">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define LED_SLEEP 0x05</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00061"></a>00061 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_SUSPEND</span>
+<a name="l00062"></a><a class="code" href="usb-private_8h.html#a59fd9fe6c0cd23e8154bc7578d3676a5">00062</a> <span class="preprocessor"></span><span class="preprocessor">#define LED_SUSPEND 0x06</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_MUTE</span>
+<a name="l00065"></a><a class="code" href="usb-private_8h.html#a06e2b597089e33458df03d81fa441995">00065</a> <span class="preprocessor"></span><span class="preprocessor">#define LED_MUTE 0x07</span>
+<a name="l00066"></a>00066 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#ifndef LED_MISC</span>
+<a name="l00068"></a><a class="code" href="usb-private_8h.html#acc1dccaea09503c64e9dfb635e19b29a">00068</a> <span class="preprocessor"></span><span class="preprocessor">#define LED_MISC 0x08</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00070"></a>00070 <span class="preprocessor"></span><span class="preprocessor">#ifndef BTN_DEAD</span>
+<a name="l00071"></a><a class="code" href="usb-private_8h.html#a0774f9bbd6ba5b888d42a088b906deaf">00071</a> <span class="preprocessor"></span><span class="preprocessor">#define BTN_DEAD 0x12f</span>
+<a name="l00072"></a>00072 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span><span class="preprocessor">#ifndef BTN_THUMBL</span>
+<a name="l00074"></a><a class="code" href="usb-private_8h.html#ad7efb66d8b7e7e5ef815d869534a769e">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define BTN_THUMBL 0x13d</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00076"></a>00076 <span class="preprocessor"></span><span class="preprocessor">#ifndef BTN_THUMBR</span>
+<a name="l00077"></a><a class="code" href="usb-private_8h.html#ab637d656fd23697017c9b50be714119d">00077</a> <span class="preprocessor"></span><span class="preprocessor">#define BTN_THUMBR 0x13e</span>
+<a name="l00078"></a>00078 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00079"></a>00079 <span class="preprocessor"></span><span class="preprocessor">#ifndef MSC_SERIAL</span>
+<a name="l00080"></a><a class="code" href="usb-private_8h.html#af0896a7858b26c8c2eb9d8406f2aa32c">00080</a> <span class="preprocessor"></span><span class="preprocessor">#define MSC_SERIAL 0x00</span>
+<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span><span class="preprocessor">#ifndef MSC_MAX</span>
+<a name="l00083"></a><a class="code" href="usb-private_8h.html#abe411125a4bc2a57b8656a3d44acfc0d">00083</a> <span class="preprocessor"></span><span class="preprocessor">#define MSC_MAX 0x07</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00085"></a>00085 <span class="preprocessor"></span>
+<a name="l00086"></a>00086 <span class="comment">/* Support for older kernels. */</span>
+<a name="l00087"></a>00087 <span class="preprocessor">#ifndef ABS_WHEEL</span>
+<a name="l00088"></a><a class="code" href="usb-private_8h.html#abc57d88f908f35bd3c82ba7dff0d97e7">00088</a> <span class="preprocessor"></span><span class="preprocessor">#define ABS_WHEEL 0x08</span>
+<a name="l00089"></a>00089 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#ifndef ABS_GAS</span>
+<a name="l00091"></a><a class="code" href="usb-private_8h.html#acf2960996b3a73cfa447e18a655690c5">00091</a> <span class="preprocessor"></span><span class="preprocessor">#define ABS_GAS 0x09</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00093"></a>00093 <span class="preprocessor"></span><span class="preprocessor">#ifndef ABS_BRAKE</span>
+<a name="l00094"></a><a class="code" href="usb-private_8h.html#a28f782ce9e5d1e3cff987901a7bf6823">00094</a> <span class="preprocessor"></span><span class="preprocessor">#define ABS_BRAKE 0x0a</span>
+<a name="l00095"></a>00095 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00096"></a>00096 <span class="preprocessor"></span>
+<a name="l00097"></a><a class="code" href="usb-private_8h.html#a4551482d17e969e4de70a669be3afc74">00097</a> <span class="preprocessor">#define NUM_STATE_ENTRIES (256/32)</span>
+<a name="l00098"></a>00098 <span class="preprocessor"></span>
+<a name="l00099"></a>00099 <span class="comment">/* Private area for USB devices. */</span>
+<a name="l00100"></a>00100 <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="struct__myPrivate.html">_myPrivate</a> {
+<a name="l00101"></a><a class="code" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">00101</a> DeviceIntPtr <a class="code" href="struct__myPrivate.html#ae08ddb2f15fe104faf25f51f05c26033">pDevice</a>;
+<a name="l00102"></a>00102 <span class="keywordtype">int</span> <a class="code" href="struct__myPrivate.html#a6b26eb0acc0b932c8dee8277501e6273">fd</a>;
+<a name="l00103"></a><a class="code" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">00103</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="struct__myPrivate.html#a5e71754533023837d932a24bd25ff602">mask</a>[EV_MAX/8 + 1];
+<a name="l00104"></a><a class="code" href="struct__myPrivate.html#af4532a0338cfa7325e8e3b2e3deb770f">00104</a> <span class="keywordtype">int</span> <a class="code" href="struct__myPrivate.html#af4532a0338cfa7325e8e3b2e3deb770f">numRel</a>, <a class="code" href="struct__myPrivate.html#a2ef864f533851d1c4a2a9f6c44400692">numAbs</a>, <a class="code" href="struct__myPrivate.html#a06ca4d02bb8f2a1795251f496ffd3cb2">numLeds</a>;
+<a name="l00105"></a><a class="code" href="struct__myPrivate.html#ad2d732244cdd84a0cc50bec620d50846">00105</a> <span class="keywordtype">int</span> <a class="code" href="struct__myPrivate.html#ad2d732244cdd84a0cc50bec620d50846">relmap</a>[<a class="code" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00106"></a><a class="code" href="struct__myPrivate.html#afc48f38bcefc200e681475c06fdacad6">00106</a> <span class="keywordtype">int</span> <a class="code" href="struct__myPrivate.html#afc48f38bcefc200e681475c06fdacad6">absmap</a>[<a class="code" href="dmxevents_8c.html#a144e2f1a618a0d14e2c9ce4fda50104a">DMX_MAX_AXES</a>];
+<a name="l00108"></a>00108 CARD32 <a class="code" href="struct__myPrivate.html#a35c7b19223e75cef1eebc0467fb2514d">kbdState</a>[<a class="code" href="usb-private_8h.html#a4551482d17e969e4de70a669be3afc74">NUM_STATE_ENTRIES</a>];
+<a name="l00109"></a>00109 DeviceIntPtr <a class="code" href="struct__myPrivate.html#a1f72c73bb97bf77b8f5359eabf81fb79">pKeyboard</a>;
+<a name="l00111"></a>00111 <span class="keywordtype">int</span> <a class="code" href="struct__myPrivate.html#ac184b2b8c6283dc678512c5f5990c0f2">pitch</a>;
+<a name="l00112"></a>00112 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="struct__myPrivate.html#a6a27aa80849de66952d95ab65914d6da">duration</a>;
+<a name="l00114"></a>00114 <span class="comment">/* FIXME: dmxInput is never initialized */</span>
+<a name="l00115"></a><a class="code" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">00115</a> <a class="code" href="struct__DMXInputInfo.html">DMXInputInfo</a> *<a class="code" href="struct__myPrivate.html#a0d76644b5072fa20b8470cc0f7bb8958">dmxInput</a>;
+<a name="l00116"></a>00116 } <a class="code" href="dmxbackend_8c.html#a25692217bddf2b6c089525b325afccf1">myPrivate</a>;
+<a name="l00117"></a>00117 <span class="preprocessor">#endif</span>
+</pre></div></div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="usb-private_8h.html">usb-private.h</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/vdltodmx_8c.html b/hw/dmx/doc/html/vdltodmx_8c.html
new file mode 100644
index 0000000..36c2825
--- /dev/null
+++ b/hw/dmx/doc/html/vdltodmx_8c.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('vdltodmx_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<h1>vdltodmx.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &quot;<a class="el" href="dmxconfig_8h_source.html">dmxconfig.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprint_8h_source.html">dmxprint.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxcompat_8h_source.html">dmxcompat.h</a>&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vdltodmx_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a><!-- doxytag: member="vdltodmx.c::main" ref="a3c04138a5bfe5d72780bb7e82a18e627" args="(int argc, char **argv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxConfigPrint()</a>, <a class="el" href="dmxcompat_8c.html#a1ef0f6bb5be6a9851f12c38122662bef">dmxVDLRead()</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="vdltodmx_8c.html">vdltodmx.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/html/xdmxconfig_8c.html b/hw/dmx/doc/html/xdmxconfig_8c.html
new file mode 100644
index 0000000..804150d
--- /dev/null
+++ b/hw/dmx/doc/html/xdmxconfig_8c.html
@@ -0,0 +1,2427 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+ <title>File Index</title>
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+ </head>
+ <body>
+<!-- Generated by Doxygen 1.7.3 -->
+ <div id="navrow1" class="tabs">
+ <ul class="tablist">
+ <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+ <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
+ <li class="current"><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div id="navrow2" class="tabs2">
+ <ul class="tablist">
+ <li><a href="files.html"><span>File&#160;List</span></a></li>
+ <li><a href="globals.html"><span>Globals</span></a></li>
+ </ul>
+ </div>
+</div>
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+ initNavTree('xdmxconfig_8c.html','');
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Defines</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<h1>xdmxconfig.c File Reference</h1> </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br/>
+<code>#include &lt;stdlib.h&gt;</code><br/>
+<code>#include &lt;X11/Intrinsic.h&gt;</code><br/>
+<code>#include &lt;X11/StringDefs.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/Form.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/Box.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/Command.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/SimpleMenu.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/SmeBSB.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/MenuButton.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/Viewport.h&gt;</code><br/>
+<code>#include &lt;X11/Xaw/Dialog.h&gt;</code><br/>
+<code>#include &lt;X11/keysym.h&gt;</code><br/>
+<code>#include &lt;X11/Xmu/SysUtil.h&gt;</code><br/>
+<code>#include &quot;Canvas.h&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxparse_8h_source.html">dmxparse.h</a>&quot;</code><br/>
+<code>#include &quot;<a class="el" href="dmxprint_8h_source.html">dmxprint.h</a>&quot;</code><br/>
+<code>#include &quot;dmxlog.h&quot;</code><br/>
+</div><table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a434eeb6abc7e5d18d14dd477befa412a">DMX_INFO</a>&#160;&#160;&#160;&quot;xdmxconfig v0.9\nCopyright 2002 Red Hat Inc.\n&quot;</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#acb087e20636d2017ac49f3cbb4129083">DMX_MAIN_WIDTH</a>&#160;&#160;&#160;800</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a6ed01845a734215a4ebe763b980e371b">DMX_MAIN_HEIGHT</a>&#160;&#160;&#160;600</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ac3ced6b90c92cd30147cab91dd5cb3ac">DMX_DATA_WIDTH</a>&#160;&#160;&#160;200</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a9bdedff1c4e130521fc21098486373f5">DMX_DATA_HEIGHT</a>&#160;&#160;&#160;200</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a4a00c4b6ff866ade978aed2dc1e7869c">DMX_CANVAS_WIDTH</a>&#160;&#160;&#160;400</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aeef510f1ba3b95b6c6bccdf44c368a9b">DMX_CANVAS_HEIGHT</a>&#160;&#160;&#160;500</td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716">dmxConfigStateOpen</a>,
+<a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a387ae4d1cea5ba75911cb467d76d0996">dmxConfigStateSave</a>
+ }</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">yyparse</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims</a> (int *maxWidth, int *maxHeight)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a3bc158b6dffde7c1880143b39a5cdd45">scalex</a> (int x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aa2d08afe50deaa3274b6b1006795cf30">scaley</a> (int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a4a62777857ee3d909f62c658676d616f">unscalex</a> (int x)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a96116525a27fadda21e883223f4b35b7">unscaley</a> (int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw</a> (Region region)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">dmxConfigSelectCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a861864048083f1d533e5e51f96d74284">dmxConfigGetValueString</a> (char **d, Widget w)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile</a> (void)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay</a> (int x, int y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition</a> (Widget popup)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#afa957a538d9f0f4ea74ff29f68f499e9">dmxConfigPlaceMenu</a> (Widget w, XEvent *event, String *params, Cardinal *num_params)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove</a> (int deltaX, int deltaY)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae65368a94fe9f60eb2fbfa083db4ea9b">dmxConfigCanvasResize</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aadfc47cfd989e655d03dda6ccd2ba3bf">dmxConfigCanvasExpose</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">dmxConfigOpenCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">dmxConfigSaveCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a63d22122002cecb690732604266cb1e6">dmxConfigCanCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aee0b69600ad12890c06000770f1c655f">dmxConfigECCanCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a51a4a8ca6b21891e2fa70c466faee77c">dmxConfigAboutCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a8bbd18621db9d5b385f4904e5acd0af1">dmxConfigAboutOkCallback</a> (Widget w, XtPointer closure, XtPointer CallData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">dmxConfigQuitCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a94afad40dc987f0eebe60b259f653972">dmxConfigQuitOkCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a883bd47f35bdd31db9a612b8aa569f52">dmxConfigQuitCanCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a8d3ad76031d45149189806723870a81c">dmxConfigEDCanCallback</a> (Widget w, XtPointer closure, XtPointer callData)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction</a> (Widget w, XEvent *event, String *params, Cardinal *num_params)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">FILE *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a7d0525177e2bcd01130c2d88219eaea7">dmxConfigCurrent</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae231cf2b287cec0f4b9dce3f5bcb4870">dmxConfigNewVirtual</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae7d68549ff5ad989a28258671bf1a007">dmxConfigCurrentDisplay</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a5b85ce4267bf51937e8f8873fcd0f898">dmxConfigNewDisplay</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a9d4629bf6b66304ec1dae9aefcb8e690">dmxConfigGrabbed</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a71a96fb97110e965bceec5e6a5e8c082">dmxConfigGrabbedFine</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a68f7d459bce6cc9feb1f45d161080379">dmxConfigGrabbedX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#afd652683b9230abcc541aba117ec13fe">dmxConfigGrabbedY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">dmxConfigFilename</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static GC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">dmxConfigGC</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static GC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">dmxConfigGCRev</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static GC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">dmxConfigGCHL</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a759c2efde7d196076ce7af7e02c720d3">dmxConfigGCInit</a> = 0</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Dimension&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ad159f52770b5cc4224709338a4fd3f8c">dmxConfigWidgetWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Dimension&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae8e507a8ffea650807baebab3b720027">dmxConfigWidgetHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Dimension&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">dmxConfigWallWidth</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Dimension&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">dmxConfigWallHeight</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">dmxConfigScaleX</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">dmxConfigScaleY</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static enum { ... } &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">dmxConfigState</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">cnamebox</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ade389d0f04ea208e93527bb1d8bd8a1c">cdimbox</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">opendialog</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aeb035d7eb4ec0fd86074b4729a1bcb1e">namebox</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ad5d5209613aeed1c3d40068bd107bf56">dimbox</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#acb241369adbfdc70fec382d0d306e012">rtbox</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#ac277ca719048235d195e2fe39e16e280">origbox</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">okbutton</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#acad0e44da558823cb3c1d09d76652bb0">buttonpopup</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a655e2589b88ef8902e7c022e496d8170">ecbutton</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#aa702bb96d419e4b93256107f61f54b96">dcbutton</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a210a7f8748e7ac28c44be94bb607840d">ndbutton0</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a191091047c7a786b2994aa7cabbf9d19">ndbutton1</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a7cd605cfca87d28f931794de0132fb91">edbutton</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a43d831fb3dc9d33f8f6732e9407a3fa6">ddbutton</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">ecpopup</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">ecdialog0</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">ecdialog1</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">edpopup</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">eddialog0</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">eddialog1</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">eddialog2</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">aboutpopup</a></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static Widget&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">quitpopup</a></td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="aeef510f1ba3b95b6c6bccdf44c368a9b"></a><!-- doxytag: member="xdmxconfig.c::DMX_CANVAS_HEIGHT" ref="aeef510f1ba3b95b6c6bccdf44c368a9b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_CANVAS_HEIGHT&#160;&#160;&#160;500</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4a00c4b6ff866ade978aed2dc1e7869c"></a><!-- doxytag: member="xdmxconfig.c::DMX_CANVAS_WIDTH" ref="a4a00c4b6ff866ade978aed2dc1e7869c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_CANVAS_WIDTH&#160;&#160;&#160;400</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9bdedff1c4e130521fc21098486373f5"></a><!-- doxytag: member="xdmxconfig.c::DMX_DATA_HEIGHT" ref="a9bdedff1c4e130521fc21098486373f5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_DATA_HEIGHT&#160;&#160;&#160;200</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac3ced6b90c92cd30147cab91dd5cb3ac"></a><!-- doxytag: member="xdmxconfig.c::DMX_DATA_WIDTH" ref="ac3ced6b90c92cd30147cab91dd5cb3ac" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_DATA_WIDTH&#160;&#160;&#160;200</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a434eeb6abc7e5d18d14dd477befa412a"></a><!-- doxytag: member="xdmxconfig.c::DMX_INFO" ref="a434eeb6abc7e5d18d14dd477befa412a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_INFO&#160;&#160;&#160;&quot;xdmxconfig v0.9\nCopyright 2002 Red Hat Inc.\n&quot;</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6ed01845a734215a4ebe763b980e371b"></a><!-- doxytag: member="xdmxconfig.c::DMX_MAIN_HEIGHT" ref="a6ed01845a734215a4ebe763b980e371b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAIN_HEIGHT&#160;&#160;&#160;600</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acb087e20636d2017ac49f3cbb4129083"></a><!-- doxytag: member="xdmxconfig.c::DMX_MAIN_WIDTH" ref="acb087e20636d2017ac49f3cbb4129083" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DMX_MAIN_WIDTH&#160;&#160;&#160;800</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Enumeration Type Documentation</h2>
+<a class="anchor" id="a99fb83031ce9923c84392b4e92f956b5"></a><!-- doxytag: member="xdmxconfig.c::@2" ref="a99fb83031ce9923c84392b4e92f956b5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">anonymous enum</td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
+<tr><td valign="top"><em><a class="anchor" id="a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716"></a><!-- doxytag: member="dmxConfigStateOpen" ref="a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716" args="" -->dmxConfigStateOpen</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign="top"><em><a class="anchor" id="a99fb83031ce9923c84392b4e92f956b5a387ae4d1cea5ba75911cb467d76d0996"></a><!-- doxytag: member="dmxConfigStateSave" ref="a99fb83031ce9923c84392b4e92f956b5a387ae4d1cea5ba75911cb467d76d0996" args="" -->dmxConfigStateSave</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a51a4a8ca6b21891e2fa70c466faee77c"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigAboutCallback" ref="a51a4a8ca6b21891e2fa70c466faee77c" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigAboutCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">aboutpopup</a>, and <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8bbd18621db9d5b385f4904e5acd0af1"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigAboutOkCallback" ref="a8bbd18621db9d5b385f4904e5acd0af1" args="(Widget w, XtPointer closure, XtPointer CallData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigAboutOkCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>CallData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">aboutpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a63d22122002cecb690732604266cb1e6"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanCallback" ref="a63d22122002cecb690732604266cb1e6" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0022a47d55808c033aabd96274fc938c"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanvasDraw" ref="a0022a47d55808c033aabd96274fc938c" args="(Region region)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanvasDraw </td>
+ <td>(</td>
+ <td class="paramtype">Region&#160;</td>
+ <td class="paramname"><em>region</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a>, <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs()</a>, <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">dmxConfigGC</a>, <a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">dmxConfigGCHL</a>, <a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">dmxConfigGCRev</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, <a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">dmxConfigScaleX</a>, <a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">dmxConfigScaleY</a>, <a class="el" href="xdmxconfig_8c.html#ae8e507a8ffea650807baebab3b720027">dmxConfigWidgetHeight</a>, and <a class="el" href="xdmxconfig_8c.html#ad159f52770b5cc4224709338a4fd3f8c">dmxConfigWidgetWidth</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aadfc47cfd989e655d03dda6ccd2ba3bf">dmxConfigCanvasExpose()</a>, <a class="el" href="xdmxconfig_8c.html#ae65368a94fe9f60eb2fbfa083db4ea9b">dmxConfigCanvasResize()</a>, <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">dmxConfigSelectCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aadfc47cfd989e655d03dda6ccd2ba3bf"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanvasExpose" ref="aadfc47cfd989e655d03dda6ccd2ba3bf" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanvasExpose </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa752b592d62b06f4b420d22692f29b00"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanvasGCs" ref="aa752b592d62b06f4b420d22692f29b00" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanvasGCs </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a>, <a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">dmxConfigGC</a>, <a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">dmxConfigGCHL</a>, <a class="el" href="xdmxconfig_8c.html#a759c2efde7d196076ce7af7e02c720d3">dmxConfigGCInit</a>, and <a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">dmxConfigGCRev</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a13fbf7edd9b02f114ad1459e938b8344"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanvasInput" ref="a13fbf7edd9b02f114ad1459e938b8344" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanvasInput </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxprop_8c.html#ac49dfab9200d48f835ce64819c4fc878">display</a>, <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#a9d4629bf6b66304ec1dae9aefcb8e690">dmxConfigGrabbed</a>, <a class="el" href="xdmxconfig_8c.html#a71a96fb97110e965bceec5e6a5e8c082">dmxConfigGrabbedFine</a>, <a class="el" href="xdmxconfig_8c.html#a68f7d459bce6cc9feb1f45d161080379">dmxConfigGrabbedX</a>, <a class="el" href="xdmxconfig_8c.html#afd652683b9230abcc541aba117ec13fe">dmxConfigGrabbedY</a>, <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>, <a class="el" href="xdmxconfig_8c.html#a4a62777857ee3d909f62c658676d616f">unscalex()</a>, and <a class="el" href="xdmxconfig_8c.html#a96116525a27fadda21e883223f4b35b7">unscaley()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae65368a94fe9f60eb2fbfa083db4ea9b"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanvasResize" ref="ae65368a94fe9f60eb2fbfa083db4ea9b" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanvasResize </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abaa67963ecba1a6fcfd7634707dc5d76"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCanvasUpdate" ref="abaa67963ecba1a6fcfd7634707dc5d76" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCanvasUpdate </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a>, <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">dmxConfigGC</a>, <a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">dmxConfigGCHL</a>, <a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">dmxConfigGCRev</a>, <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">dmxConfigWallHeight</a>, <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">dmxConfigWallWidth</a>, <a class="el" href="xdmxconfig_8c.html#ae8e507a8ffea650807baebab3b720027">dmxConfigWidgetHeight</a>, <a class="el" href="xdmxconfig_8c.html#ad159f52770b5cc4224709338a4fd3f8c">dmxConfigWidgetWidth</a>, <a class="el" href="dmxclient_8h.html#a17dcc767f86e6823829de8f847a5d2d4">GC</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="xdmxconfig_8c.html#a3bc158b6dffde7c1880143b39a5cdd45">scalex()</a>, <a class="el" href="xdmxconfig_8c.html#aa2d08afe50deaa3274b6b1006795cf30">scaley()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, and <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>, and <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab59efe1092cb70a8d02bd2a1502af0cd"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCopystrings" ref="ab59efe1092cb70a8d02bd2a1502af0cd" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigCopystrings </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acc57e594c41a31b38edea45eba6e8f16"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigDataUpdate" ref="acc57e594c41a31b38edea45eba6e8f16" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigDataUpdate </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#ade389d0f04ea208e93527bb1d8bd8a1c">cdimbox</a>, <a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">cnamebox</a>, <a class="el" href="xdmxconfig_8c.html#aa702bb96d419e4b93256107f61f54b96">dcbutton</a>, <a class="el" href="xdmxconfig_8c.html#a43d831fb3dc9d33f8f6732e9407a3fa6">ddbutton</a>, <a class="el" href="xdmxconfig_8c.html#ad5d5209613aeed1c3d40068bd107bf56">dimbox</a>, <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">dmxConfigWallHeight</a>, <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">dmxConfigWallWidth</a>, <a class="el" href="xdmxconfig_8c.html#a655e2589b88ef8902e7c022e496d8170">ecbutton</a>, <a class="el" href="xdmxconfig_8c.html#a7cd605cfca87d28f931794de0132fb91">edbutton</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, <a class="el" href="xdmxconfig_8c.html#aeb035d7eb4ec0fd86074b4729a1bcb1e">namebox</a>, <a class="el" href="xdmxconfig_8c.html#a210a7f8748e7ac28c44be94bb607840d">ndbutton0</a>, <a class="el" href="xdmxconfig_8c.html#a191091047c7a786b2994aa7cabbf9d19">ndbutton1</a>, <a class="el" href="xdmxconfig_8c.html#ac277ca719048235d195e2fe39e16e280">origbox</a>, <a class="el" href="struct__DMXConfigDisplay.html#a576c44a633c820745e0166b0328c9428">_DMXConfigDisplay::rootHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa6e3eafb8797b5218c3febec39a319d8">_DMXConfigDisplay::rootWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a1ae1cae8ca5882ca871ac9aa84e63b19">_DMXConfigDisplay::rootX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a3f8f845a6294f7b2b4d4963296368572">_DMXConfigDisplay::rootXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#afdc4e97d421a7d12002d627cc208e239">_DMXConfigDisplay::rootY</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#ac741ca152d7feff75a0f610c98f575a9">_DMXConfigDisplay::rootYSign</a>, <a class="el" href="xdmxconfig_8c.html#acb241369adbfdc70fec382d0d306e012">rtbox</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, and <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a29d7ea0fe8e7e20edf26ee543028cca6"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigDCCallback" ref="a29d7ea0fe8e7e20edf26ee543028cca6" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigDCCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="dmxparse_8c.html#a6e48a41d83e97afcbd542a210ea30258">dmxConfigFreeVirtual()</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aee0b69600ad12890c06000770f1c655f">dmxConfigECCanCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acab7168870835df41469f4ea2b56c13a"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigDDCallback" ref="acab7168870835df41469f4ea2b56c13a" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigDDCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8c.html#a34126fa5dccdee442dce2b2413c43c53">dmxConfigFreeDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, and <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a8d3ad76031d45149189806723870a81c">dmxConfigEDCanCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a681e5ac2d93a83db4f0a02ea0bc41d56"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigECCallback" ref="a681e5ac2d93a83db4f0a02ea0bc41d56" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigECCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>, <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">ecdialog0</a>, <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">ecdialog1</a>, <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">ecpopup</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, and <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aee0b69600ad12890c06000770f1c655f"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigECCanCallback" ref="aee0b69600ad12890c06000770f1c655f" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigECCanCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">ecpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a759724b0922bbbc5251cec70f4545f62"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigECOkCallback" ref="a759724b0922bbbc5251cec70f4545f62" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigECOkCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#a861864048083f1d533e5e51f96d74284">dmxConfigGetValueString()</a>, <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">ecdialog0</a>, <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">ecdialog1</a>, <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">ecpopup</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, and <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a650e49b1096bf4cefd2df87e8b793ada"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigEDCallback" ref="a650e49b1096bf4cefd2df87e8b793ada" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigEDCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>, <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">eddialog0</a>, <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">eddialog1</a>, <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">eddialog2</a>, <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">edpopup</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, and <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8d3ad76031d45149189806723870a81c"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigEDCanCallback" ref="a8d3ad76031d45149189806723870a81c" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigEDCanCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">edpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a800f59119db8e601c14f8440ec6b0d3b"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigEDOkCallback" ref="a800f59119db8e601c14f8440ec6b0d3b" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigEDOkCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#a861864048083f1d533e5e51f96d74284">dmxConfigGetValueString()</a>, <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">eddialog0</a>, <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">eddialog1</a>, <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">eddialog2</a>, <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">edpopup</a>, <a class="el" href="struct__DMXConfigDisplay.html#aa44b268403b84baaba5f943b00c0caa1">_DMXConfigDisplay::name</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#abd861ea01ca7d68f78d195c3b0542b52">_DMXConfigDisplay::scrnX</a>, <a class="el" href="struct__DMXConfigDisplay.html#a4f8d37c6f5e5f14882ea980fa1af87d6">_DMXConfigDisplay::scrnXSign</a>, <a class="el" href="struct__DMXConfigDisplay.html#a0c2fbfb2cac1ca86e8e94cccc96c6079">_DMXConfigDisplay::scrnY</a>, and <a class="el" href="struct__DMXConfigDisplay.html#acff064fb3eb17d33c13ca5e19a13840c">_DMXConfigDisplay::scrnYSign</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abfb1f5247a95984159ec5fb29816646f"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigFindDisplay" ref="abfb1f5247a95984159ec5fb29816646f" args="(int x, int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static <a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> dmxConfigFindDisplay </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="xdmxconfig_8c.html#a3bc158b6dffde7c1880143b39a5cdd45">scalex()</a>, <a class="el" href="xdmxconfig_8c.html#aa2d08afe50deaa3274b6b1006795cf30">scaley()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, and <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afb9ea91851b47b3bf82704e724872380"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGetDims" ref="afb9ea91851b47b3bf82704e724872380" args="(int *maxWidth, int *maxHeight)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigGetDims </td>
+ <td>(</td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>maxWidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int *&#160;</td>
+ <td class="paramname"><em>maxHeight</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="struct__DMXConfigSub.html#ab881a6a0ca612057e889742dd5aaf20e">_DMXConfigSub::display</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88abec41b4db7ba31e88eaaddc8b34eea4f">dmxConfigDisplay</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">dmxConfigWallHeight</a>, <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">dmxConfigWallWidth</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigSub.html#aeb9e7e1226bc01cdc1f256b49e826d43">_DMXConfigSub::next</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, <a class="el" href="struct__DMXConfigSub.html#a459065584f3b92566855167e989f72ab">_DMXConfigSub::type</a>, <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>, and <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a861864048083f1d533e5e51f96d74284"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGetValueString" ref="a861864048083f1d533e5e51f96d74284" args="(char **d, Widget w)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigGetValueString </td>
+ <td>(</td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>d</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a751ab7d5ec127d14a91ca2706af4080f"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigMove" ref="a751ab7d5ec127d14a91ca2706af4080f" args="(int deltaX, int deltaY)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigMove </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>deltaX</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>deltaY</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a>, <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">dmxConfigWallHeight</a>, <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">dmxConfigWallWidth</a>, <a class="el" href="struct__DMXConfigDisplay.html#a66ec2d91b2138ebc44eecbda0033649a">_DMXConfigDisplay::rootXOrigin</a>, and <a class="el" href="struct__DMXConfigDisplay.html#a30bc7bf9c591007b64556743ca932108">_DMXConfigDisplay::rootYOrigin</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa5bb8b402fcb1b940c939f0a27d09c20"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigNCCallback" ref="aa5bb8b402fcb1b940c939f0a27d09c20" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigNCCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#acec532235fc1d75b24779b3ed50aa037">dmxConfigAddEntry()</a>, <a class="el" href="dmxparse_8c.html#a427549ab2ffa269ca34bdb1a60e87bb0">dmxConfigCreateVirtual()</a>, <a class="el" href="xdmxconfig_8c.html#a7d0525177e2bcd01130c2d88219eaea7">dmxConfigCurrent</a>, <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigVirtual.html#a47c8c908e8f4090be638de0560dc36c3">_DMXConfigVirtual::height</a>, and <a class="el" href="struct__DMXConfigVirtual.html#a9f35c8d1f58fdcbc85a2bdfb14a31d71">_DMXConfigVirtual::width</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0c5b6ed72efe40f7b49ee9d1dc168b4f"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigNDCallback" ref="a0c5b6ed72efe40f7b49ee9d1dc168b4f" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigNDCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="dmxparse_8c.html#a75e3403d28e2cb5b3b6da5461ef1bbca">dmxConfigAddSub()</a>, <a class="el" href="dmxparse_8c.html#ab3f5b4d4a5b535faf87b3bf7cb30d2d0">dmxConfigCreateDisplay()</a>, <a class="el" href="xdmxconfig_8c.html#ae7d68549ff5ad989a28258671bf1a007">dmxConfigCurrentDisplay</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="dmxparse_8c.html#a4f26909fb7f97007567e5514839c3a53">dmxConfigSubDisplay()</a>, <a class="el" href="struct__DMXConfigDisplay.html#a713c10234a650fee7fb91f31a6eb76fb">_DMXConfigDisplay::scrnHeight</a>, <a class="el" href="struct__DMXConfigDisplay.html#ad192d6062290e04c1f859eaf68c06122">_DMXConfigDisplay::scrnWidth</a>, and <a class="el" href="struct__DMXConfigVirtual.html#a49c54be6010a37e78bd137a3c30707c6">_DMXConfigVirtual::subentry</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad3b7e59a780559c54a232c43edfa6d63"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigOkAction" ref="ad3b7e59a780559c54a232c43edfa6d63" args="(Widget w, XEvent *event, String *params, Cardinal *num_params)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigOkAction </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>event</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">String *&#160;</td>
+ <td class="paramname"><em>params</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Cardinal *&#160;</td>
+ <td class="paramname"><em>num_params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">ecdialog0</a>, <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">ecdialog1</a>, <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">eddialog0</a>, <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">eddialog1</a>, <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">eddialog2</a>, and <a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">opendialog</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acef742c17749473c5f9d475f3f8289eb"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigOkCallback" ref="acef742c17749473c5f9d475f3f8289eb" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigOkCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">dmxConfigFilename</a>, <a class="el" href="xdmxconfig_8c.html#a861864048083f1d533e5e51f96d74284">dmxConfigGetValueString()</a>, <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, <a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">dmxConfigState</a>, <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716">dmxConfigStateOpen</a>, <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, <a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">opendialog</a>, and <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab6fbceedfbe74858b7cad27ab493acfa"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigOpenCallback" ref="ab6fbceedfbe74858b7cad27ab493acfa" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigOpenCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>, <a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">dmxConfigState</a>, <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a3d56a13f1c60f52f9161283f8206b716">dmxConfigStateOpen</a>, <a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">okbutton</a>, and <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afa957a538d9f0f4ea74ff29f68f499e9"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigPlaceMenu" ref="afa957a538d9f0f4ea74ff29f68f499e9" args="(Widget w, XEvent *event, String *params, Cardinal *num_params)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigPlaceMenu </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XEvent *&#160;</td>
+ <td class="paramname"><em>event</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">String *&#160;</td>
+ <td class="paramname"><em>params</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">Cardinal *&#160;</td>
+ <td class="paramname"><em>num_params</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#acad0e44da558823cb3c1d09d76652bb0">buttonpopup</a>, and <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4433d01cacd4d6897257770d67bd5efa"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigQuitCallback" ref="a4433d01cacd4d6897257770d67bd5efa" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigQuitCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a>, <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>, and <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">quitpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a883bd47f35bdd31db9a612b8aa569f52"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigQuitCanCallback" ref="a883bd47f35bdd31db9a612b8aa569f52" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigQuitCanCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">quitpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94afad40dc987f0eebe60b259f653972"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigQuitOkCallback" ref="a94afad40dc987f0eebe60b259f653972" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigQuitOkCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">quitpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a758bf4b88a266fbb6163ae7af4859829"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigReadFile" ref="a758bf4b88a266fbb6163ae7af4859829" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigReadFile </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a>, <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">dmxConfigFilename</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="dmxprint_8c.html#ae0a45c7fe5f9f4afb7e68856253350be">dmxConfigVirtualPrint()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917faf73564300bdffb23b369b84c842aceea">dmxInfo</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>, <a class="el" href="dmxparse_8h.html#ab138aa8e11f58bcdcc7134adf240ea8c">yydebug</a>, <a class="el" href="dmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a>, and <a class="el" href="dmxconfig_8c.html#a847a2de5c1c28c9d7055a2b89ed7dad7">yyparse()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4ec0abca7568be13fc01acfc871f50cd"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigSaveCallback" ref="a4ec0abca7568be13fc01acfc871f50cd" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigSaveCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#afc3def2e674f36614909916766a13bfd">dmxConfigSetPopupPosition()</a>, <a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">dmxConfigState</a>, <a class="el" href="xdmxconfig_8c.html#a99fb83031ce9923c84392b4e92f956b5a387ae4d1cea5ba75911cb467d76d0996">dmxConfigStateSave</a>, <a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">okbutton</a>, and <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ade14a72ec5cc94f790d99eee1e949e90"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigSelectCallback" ref="ade14a72ec5cc94f790d99eee1e949e90" args="(Widget w, XtPointer closure, XtPointer callData)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigSelectCallback </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>w</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">XtPointer&#160;</td>
+ <td class="paramname"><em>callData</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, and <a class="el" href="dmxprint_8c.html#ae0a45c7fe5f9f4afb7e68856253350be">dmxConfigVirtualPrint()</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afc3def2e674f36614909916766a13bfd"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigSetPopupPosition" ref="afc3def2e674f36614909916766a13bfd" args="(Widget popup)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigSetPopupPosition </td>
+ <td>(</td>
+ <td class="paramtype">Widget&#160;</td>
+ <td class="paramname"><em>popup</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a51a4a8ca6b21891e2fa70c466faee77c">dmxConfigAboutCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">dmxConfigOpenCallback()</a>, <a class="el" href="xdmxconfig_8c.html#afa957a538d9f0f4ea74ff29f68f499e9">dmxConfigPlaceMenu()</a>, <a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">dmxConfigQuitCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">dmxConfigSaveCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae6beaf30866099459c117f1a3600fa77"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigSetupCnamemenu" ref="ae6beaf30866099459c117f1a3600fa77" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigSetupCnamemenu </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">cnamebox</a>, <a class="el" href="xdmxconfig_8c.html#ade14a72ec5cc94f790d99eee1e949e90">dmxConfigSelectCallback()</a>, <a class="el" href="dmxparse_8h.html#a8a6db2b610b57c53d4a4c0e7aeec5f88a4c957b5f3b7c0886587bdb5a47f3face">dmxConfigVirtual</a>, <a class="el" href="struct__DMXConfigVirtual.html#a8478674f4416debdfbdb7bff088c0b3b">_DMXConfigVirtual::name</a>, <a class="el" href="struct__DMXConfigEntry.html#a69f77f180912f1ffce742d974da981d7">_DMXConfigEntry::next</a>, <a class="el" href="struct__DMXConfigEntry.html#a1082665dbe0f9f61e115a63f416f2e32">_DMXConfigEntry::type</a>, and <a class="el" href="struct__DMXConfigEntry.html#a8e77b8273c49b31ba999a7a182a4cb2c">_DMXConfigEntry::virtual</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa55a0e31c52a23a1537c00cda063dc01"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigWriteFile" ref="aa55a0e31c52a23a1537c00cda063dc01" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static void dmxConfigWriteFile </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">dmxConfigFilename</a>, <a class="el" href="dmxprint_8c.html#aeebcf1d84e771f9d64413521173d366a">dmxConfigPrint()</a>, <a class="el" href="dmxlog_8c.html#ab6259430a57c3cffdfc9f6259df0ad23">dmxLog()</a>, <a class="el" href="dmxlog_8h.html#aeed612a5c0be196e23bd6b71b76b917fae81ae2a11fb7ab8eea902f609574210a">dmxWarning</a>, and <a class="el" href="dmxprint_8c.html#a41b4e3023940f8a5c705ea2863f2cd09">str</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3c04138a5bfe5d72780bb7e82a18e627"></a><!-- doxytag: member="xdmxconfig.c::main" ref="a3c04138a5bfe5d72780bb7e82a18e627" args="(int argc, char **argv)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">aboutpopup</a>, <a class="el" href="xdmxconfig_8c.html#acad0e44da558823cb3c1d09d76652bb0">buttonpopup</a>, <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a>, <a class="el" href="xdmxconfig_8c.html#ade389d0f04ea208e93527bb1d8bd8a1c">cdimbox</a>, <a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">cnamebox</a>, <a class="el" href="xdmxconfig_8c.html#aa702bb96d419e4b93256107f61f54b96">dcbutton</a>, <a class="el" href="xdmxconfig_8c.html#a43d831fb3dc9d33f8f6732e9407a3fa6">ddbutton</a>, <a class="el" href="xdmxconfig_8c.html#ad5d5209613aeed1c3d40068bd107bf56">dimbox</a>, <a class="el" href="xdmxconfig_8c.html#aeef510f1ba3b95b6c6bccdf44c368a9b">DMX_CANVAS_HEIGHT</a>, <a class="el" href="xdmxconfig_8c.html#a4a00c4b6ff866ade978aed2dc1e7869c">DMX_CANVAS_WIDTH</a>, <a class="el" href="xdmxconfig_8c.html#a9bdedff1c4e130521fc21098486373f5">DMX_DATA_HEIGHT</a>, <a class="el" href="xdmxconfig_8c.html#ac3ced6b90c92cd30147cab91dd5cb3ac">DMX_DATA_WIDTH</a>, <a class="el" href="xdmxconfig_8c.html#a434eeb6abc7e5d18d14dd477befa412a">DMX_INFO</a>, <a class="el" href="xdmxconfig_8c.html#a6ed01845a734215a4ebe763b980e371b">DMX_MAIN_HEIGHT</a>, <a class="el" href="xdmxconfig_8c.html#acb087e20636d2017ac49f3cbb4129083">DMX_MAIN_WIDTH</a>, <a class="el" href="xdmxconfig_8c.html#a51a4a8ca6b21891e2fa70c466faee77c">dmxConfigAboutCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a8bbd18621db9d5b385f4904e5acd0af1">dmxConfigAboutOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a63d22122002cecb690732604266cb1e6">dmxConfigCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#aadfc47cfd989e655d03dda6ccd2ba3bf">dmxConfigCanvasExpose()</a>, <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>, <a class="el" href="xdmxconfig_8c.html#ae65368a94fe9f60eb2fbfa083db4ea9b">dmxConfigCanvasResize()</a>, <a class="el" href="xdmxconfig_8c.html#ab59efe1092cb70a8d02bd2a1502af0cd">dmxConfigCopystrings()</a>, <a class="el" href="xdmxconfig_8c.html#a29d7ea0fe8e7e20edf26ee543028cca6">dmxConfigDCCallback()</a>, <a class="el" href="xdmxconfig_8c.html#acab7168870835df41469f4ea2b56c13a">dmxConfigDDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#aee0b69600ad12890c06000770f1c655f">dmxConfigECCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a8d3ad76031d45149189806723870a81c">dmxConfigEDCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">dmxConfigFilename</a>, <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">dmxConfigOpenCallback()</a>, <a class="el" href="xdmxconfig_8c.html#afa957a538d9f0f4ea74ff29f68f499e9">dmxConfigPlaceMenu()</a>, <a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">dmxConfigQuitCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a883bd47f35bdd31db9a612b8aa569f52">dmxConfigQuitCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a94afad40dc987f0eebe60b259f653972">dmxConfigQuitOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">dmxConfigSaveCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, <a class="el" href="xdmxconfig_8c.html#a655e2589b88ef8902e7c022e496d8170">ecbutton</a>, <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">ecdialog0</a>, <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">ecdialog1</a>, <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">ecpopup</a>, <a class="el" href="xdmxconfig_8c.html#a7cd605cfca87d28f931794de0132fb91">edbutton</a>, <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">eddialog0</a>, <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">eddialog1</a>, <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">eddialog2</a>, <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">edpopup</a>, <a class="el" href="xdmxconfig_8c.html#aeb035d7eb4ec0fd86074b4729a1bcb1e">namebox</a>, <a class="el" href="xdmxconfig_8c.html#a210a7f8748e7ac28c44be94bb607840d">ndbutton0</a>, <a class="el" href="xdmxconfig_8c.html#a191091047c7a786b2994aa7cabbf9d19">ndbutton1</a>, <a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">okbutton</a>, <a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">opendialog</a>, <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a>, <a class="el" href="xdmxconfig_8c.html#ac277ca719048235d195e2fe39e16e280">origbox</a>, <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">quitpopup</a>, and <a class="el" href="xdmxconfig_8c.html#acb241369adbfdc70fec382d0d306e012">rtbox</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3bc158b6dffde7c1880143b39a5cdd45"></a><!-- doxytag: member="xdmxconfig.c::scalex" ref="a3bc158b6dffde7c1880143b39a5cdd45" args="(int x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int scalex </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">dmxConfigScaleX</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa2d08afe50deaa3274b6b1006795cf30"></a><!-- doxytag: member="xdmxconfig.c::scaley" ref="aa2d08afe50deaa3274b6b1006795cf30" args="(int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int scaley </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">dmxConfigScaleY</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#abfb1f5247a95984159ec5fb29816646f">dmxConfigFindDisplay()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4a62777857ee3d909f62c658676d616f"></a><!-- doxytag: member="xdmxconfig.c::unscalex" ref="a4a62777857ee3d909f62c658676d616f" args="(int x)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int unscalex </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>x</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">dmxConfigScaleX</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a96116525a27fadda21e883223f4b35b7"></a><!-- doxytag: member="xdmxconfig.c::unscaley" ref="a96116525a27fadda21e883223f4b35b7" args="(int y)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">static int unscaley </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>y</em></td><td>)</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>References <a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">dmxConfigScaleY</a>.</p>
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a847a2de5c1c28c9d7055a2b89ed7dad7"></a><!-- doxytag: member="xdmxconfig.c::yyparse" ref="a847a2de5c1c28c9d7055a2b89ed7dad7" args="(void)" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int yyparse </td>
+ <td>(</td>
+ <td class="paramtype">void&#160;</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<hr/><h2>Variable Documentation</h2>
+<a class="anchor" id="a0ae8f8e10b130f61b00f0aeb0aa54f71"></a><!-- doxytag: member="xdmxconfig.c::aboutpopup" ref="a0ae8f8e10b130f61b00f0aeb0aa54f71" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a0ae8f8e10b130f61b00f0aeb0aa54f71">aboutpopup</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a51a4a8ca6b21891e2fa70c466faee77c">dmxConfigAboutCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a8bbd18621db9d5b385f4904e5acd0af1">dmxConfigAboutOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acad0e44da558823cb3c1d09d76652bb0"></a><!-- doxytag: member="xdmxconfig.c::buttonpopup" ref="acad0e44da558823cb3c1d09d76652bb0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#acad0e44da558823cb3c1d09d76652bb0">buttonpopup</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#afa957a538d9f0f4ea74ff29f68f499e9">dmxConfigPlaceMenu()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8aa7fc9518191f57124a67f4a3afdd42"></a><!-- doxytag: member="xdmxconfig.c::canvas" ref="a8aa7fc9518191f57124a67f4a3afdd42" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a8aa7fc9518191f57124a67f4a3afdd42">canvas</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs()</a>, <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ade389d0f04ea208e93527bb1d8bd8a1c"></a><!-- doxytag: member="xdmxconfig.c::cdimbox" ref="ade389d0f04ea208e93527bb1d8bd8a1c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#ade389d0f04ea208e93527bb1d8bd8a1c">cdimbox</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8286e1b3c5833128c8e3903d3b3b8039"></a><!-- doxytag: member="xdmxconfig.c::cnamebox" ref="a8286e1b3c5833128c8e3903d3b3b8039" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a8286e1b3c5833128c8e3903d3b3b8039">cnamebox</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#ae6beaf30866099459c117f1a3600fa77">dmxConfigSetupCnamemenu()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa702bb96d419e4b93256107f61f54b96"></a><!-- doxytag: member="xdmxconfig.c::dcbutton" ref="aa702bb96d419e4b93256107f61f54b96" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#aa702bb96d419e4b93256107f61f54b96">dcbutton</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a43d831fb3dc9d33f8f6732e9407a3fa6"></a><!-- doxytag: member="xdmxconfig.c::ddbutton" ref="a43d831fb3dc9d33f8f6732e9407a3fa6" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a43d831fb3dc9d33f8f6732e9407a3fa6">ddbutton</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad5d5209613aeed1c3d40068bd107bf56"></a><!-- doxytag: member="xdmxconfig.c::dimbox" ref="ad5d5209613aeed1c3d40068bd107bf56" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#ad5d5209613aeed1c3d40068bd107bf56">dimbox</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7d0525177e2bcd01130c2d88219eaea7"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCurrent" ref="a7d0525177e2bcd01130c2d88219eaea7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> <a class="el" href="xdmxconfig_8c.html#a7d0525177e2bcd01130c2d88219eaea7">dmxConfigCurrent</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa5bb8b402fcb1b940c939f0a27d09c20">dmxConfigNCCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae7d68549ff5ad989a28258671bf1a007"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigCurrentDisplay" ref="ae7d68549ff5ad989a28258671bf1a007" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="xdmxconfig_8c.html#ae7d68549ff5ad989a28258671bf1a007">dmxConfigCurrentDisplay</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0c5b6ed72efe40f7b49ee9d1dc168b4f">dmxConfigNDCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af1733e9f6f810a355a158f16f8bc7899"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigEntry" ref="af1733e9f6f810a355a158f16f8bc7899" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigEntry.html">DMXConfigEntryPtr</a> <a class="el" href="xdmxconfig_8c.html#af1733e9f6f810a355a158f16f8bc7899">dmxConfigEntry</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a675632838d5a243f57ee16302a6b7cf9"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigFilename" ref="a675632838d5a243f57ee16302a6b7cf9" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* <a class="el" href="xdmxconfig_8c.html#a675632838d5a243f57ee16302a6b7cf9">dmxConfigFilename</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a758bf4b88a266fbb6163ae7af4859829">dmxConfigReadFile()</a>, <a class="el" href="xdmxconfig_8c.html#aa55a0e31c52a23a1537c00cda063dc01">dmxConfigWriteFile()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa477b9696222130ee598fb12dc1dd6c5"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGC" ref="aa477b9696222130ee598fb12dc1dd6c5" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GC <a class="el" href="xdmxconfig_8c.html#aa477b9696222130ee598fb12dc1dd6c5">dmxConfigGC</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs()</a>, and <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae6e5f9776e42a6b3c72faca8486ce3d1"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGCHL" ref="ae6e5f9776e42a6b3c72faca8486ce3d1" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GC <a class="el" href="xdmxconfig_8c.html#ae6e5f9776e42a6b3c72faca8486ce3d1">dmxConfigGCHL</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs()</a>, and <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a759c2efde7d196076ce7af7e02c720d3"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGCInit" ref="a759c2efde7d196076ce7af7e02c720d3" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="xdmxconfig_8c.html#a759c2efde7d196076ce7af7e02c720d3">dmxConfigGCInit</a> = 0<code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a32768cf28349ecd06adf9b568a79db52"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGCRev" ref="a32768cf28349ecd06adf9b568a79db52" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">GC <a class="el" href="xdmxconfig_8c.html#a32768cf28349ecd06adf9b568a79db52">dmxConfigGCRev</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#aa752b592d62b06f4b420d22692f29b00">dmxConfigCanvasGCs()</a>, and <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9d4629bf6b66304ec1dae9aefcb8e690"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGrabbed" ref="a9d4629bf6b66304ec1dae9aefcb8e690" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="xdmxconfig_8c.html#a9d4629bf6b66304ec1dae9aefcb8e690">dmxConfigGrabbed</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a71a96fb97110e965bceec5e6a5e8c082"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGrabbedFine" ref="a71a96fb97110e965bceec5e6a5e8c082" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="xdmxconfig_8c.html#a71a96fb97110e965bceec5e6a5e8c082">dmxConfigGrabbedFine</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a68f7d459bce6cc9feb1f45d161080379"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGrabbedX" ref="a68f7d459bce6cc9feb1f45d161080379" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="xdmxconfig_8c.html#a68f7d459bce6cc9feb1f45d161080379">dmxConfigGrabbedX</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="afd652683b9230abcc541aba117ec13fe"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigGrabbedY" ref="afd652683b9230abcc541aba117ec13fe" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="xdmxconfig_8c.html#afd652683b9230abcc541aba117ec13fe">dmxConfigGrabbedY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a13fbf7edd9b02f114ad1459e938b8344">dmxConfigCanvasInput()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a5b85ce4267bf51937e8f8873fcd0f898"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigNewDisplay" ref="a5b85ce4267bf51937e8f8873fcd0f898" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigDisplay.html">DMXConfigDisplayPtr</a> <a class="el" href="xdmxconfig_8c.html#a5b85ce4267bf51937e8f8873fcd0f898">dmxConfigNewDisplay</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae231cf2b287cec0f4b9dce3f5bcb4870"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigNewVirtual" ref="ae231cf2b287cec0f4b9dce3f5bcb4870" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct__DMXConfigVirtual.html">DMXConfigVirtualPtr</a> <a class="el" href="xdmxconfig_8c.html#ae231cf2b287cec0f4b9dce3f5bcb4870">dmxConfigNewVirtual</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae459f0fca016b8b403de9bf49e06bd08"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigNotSaved" ref="ae459f0fca016b8b403de9bf49e06bd08" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int <a class="el" href="xdmxconfig_8c.html#ae459f0fca016b8b403de9bf49e06bd08">dmxConfigNotSaved</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>, <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">dmxConfigQuitCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3351557ff2692e424639e5cfd648c94a"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigScaleX" ref="a3351557ff2692e424639e5cfd648c94a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="xdmxconfig_8c.html#a3351557ff2692e424639e5cfd648c94a">dmxConfigScaleX</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#a3bc158b6dffde7c1880143b39a5cdd45">scalex()</a>, and <a class="el" href="xdmxconfig_8c.html#a4a62777857ee3d909f62c658676d616f">unscalex()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a0593aa4d0048daba8d06415335469129"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigScaleY" ref="a0593aa4d0048daba8d06415335469129" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">double <a class="el" href="xdmxconfig_8c.html#a0593aa4d0048daba8d06415335469129">dmxConfigScaleY</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, <a class="el" href="xdmxconfig_8c.html#aa2d08afe50deaa3274b6b1006795cf30">scaley()</a>, and <a class="el" href="xdmxconfig_8c.html#a96116525a27fadda21e883223f4b35b7">unscaley()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a94d7edcf3287b564489ccf5ec288201b"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigState" ref="a94d7edcf3287b564489ccf5ec288201b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum { ... } <a class="el" href="xdmxconfig_8c.html#a94d7edcf3287b564489ccf5ec288201b">dmxConfigState</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">dmxConfigOpenCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">dmxConfigSaveCallback()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a1607f63798909b672cef90f7a8bb3ce2"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigWallHeight" ref="a1607f63798909b672cef90f7a8bb3ce2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Dimension <a class="el" href="xdmxconfig_8c.html#a1607f63798909b672cef90f7a8bb3ce2">dmxConfigWallHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, and <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a08700108cb0b467380001fbaa626cd61"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigWallWidth" ref="a08700108cb0b467380001fbaa626cd61" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Dimension <a class="el" href="xdmxconfig_8c.html#a08700108cb0b467380001fbaa626cd61">dmxConfigWallWidth</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, <a class="el" href="xdmxconfig_8c.html#afb9ea91851b47b3bf82704e724872380">dmxConfigGetDims()</a>, and <a class="el" href="xdmxconfig_8c.html#a751ab7d5ec127d14a91ca2706af4080f">dmxConfigMove()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae8e507a8ffea650807baebab3b720027"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigWidgetHeight" ref="ae8e507a8ffea650807baebab3b720027" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Dimension <a class="el" href="xdmxconfig_8c.html#ae8e507a8ffea650807baebab3b720027">dmxConfigWidgetHeight</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, and <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad159f52770b5cc4224709338a4fd3f8c"></a><!-- doxytag: member="xdmxconfig.c::dmxConfigWidgetWidth" ref="ad159f52770b5cc4224709338a4fd3f8c" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Dimension <a class="el" href="xdmxconfig_8c.html#ad159f52770b5cc4224709338a4fd3f8c">dmxConfigWidgetWidth</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a0022a47d55808c033aabd96274fc938c">dmxConfigCanvasDraw()</a>, and <a class="el" href="xdmxconfig_8c.html#abaa67963ecba1a6fcfd7634707dc5d76">dmxConfigCanvasUpdate()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a655e2589b88ef8902e7c022e496d8170"></a><!-- doxytag: member="xdmxconfig.c::ecbutton" ref="a655e2589b88ef8902e7c022e496d8170" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a655e2589b88ef8902e7c022e496d8170">ecbutton</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a26c26ea49a9040762018c2fee570f9d2"></a><!-- doxytag: member="xdmxconfig.c::ecdialog0" ref="a26c26ea49a9040762018c2fee570f9d2" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a26c26ea49a9040762018c2fee570f9d2">ecdialog0</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a425c2cbc50e36e8e0e584a362ba47e0d"></a><!-- doxytag: member="xdmxconfig.c::ecdialog1" ref="a425c2cbc50e36e8e0e584a362ba47e0d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a425c2cbc50e36e8e0e584a362ba47e0d">ecdialog1</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a3bafacdb9cd693553e468c9b38cd3e38"></a><!-- doxytag: member="xdmxconfig.c::ecpopup" ref="a3bafacdb9cd693553e468c9b38cd3e38" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a3bafacdb9cd693553e468c9b38cd3e38">ecpopup</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a681e5ac2d93a83db4f0a02ea0bc41d56">dmxConfigECCallback()</a>, <a class="el" href="xdmxconfig_8c.html#aee0b69600ad12890c06000770f1c655f">dmxConfigECCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a759724b0922bbbc5251cec70f4545f62">dmxConfigECOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a7cd605cfca87d28f931794de0132fb91"></a><!-- doxytag: member="xdmxconfig.c::edbutton" ref="a7cd605cfca87d28f931794de0132fb91" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a7cd605cfca87d28f931794de0132fb91">edbutton</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a721a151e60708d340e2585488ae8e523"></a><!-- doxytag: member="xdmxconfig.c::eddialog0" ref="a721a151e60708d340e2585488ae8e523" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a721a151e60708d340e2585488ae8e523">eddialog0</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8664a3991accdb9f89987e5a4369dfcc"></a><!-- doxytag: member="xdmxconfig.c::eddialog1" ref="a8664a3991accdb9f89987e5a4369dfcc" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a8664a3991accdb9f89987e5a4369dfcc">eddialog1</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a35536bd91fe1b4aea8aaf8c216215162"></a><!-- doxytag: member="xdmxconfig.c::eddialog2" ref="a35536bd91fe1b4aea8aaf8c216215162" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a35536bd91fe1b4aea8aaf8c216215162">eddialog2</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="af23c4351113634ffc58b365cb6d9b8b7"></a><!-- doxytag: member="xdmxconfig.c::edpopup" ref="af23c4351113634ffc58b365cb6d9b8b7" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#af23c4351113634ffc58b365cb6d9b8b7">edpopup</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a650e49b1096bf4cefd2df87e8b793ada">dmxConfigEDCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a8d3ad76031d45149189806723870a81c">dmxConfigEDCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a800f59119db8e601c14f8440ec6b0d3b">dmxConfigEDOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aeb035d7eb4ec0fd86074b4729a1bcb1e"></a><!-- doxytag: member="xdmxconfig.c::namebox" ref="aeb035d7eb4ec0fd86074b4729a1bcb1e" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#aeb035d7eb4ec0fd86074b4729a1bcb1e">namebox</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a210a7f8748e7ac28c44be94bb607840d"></a><!-- doxytag: member="xdmxconfig.c::ndbutton0" ref="a210a7f8748e7ac28c44be94bb607840d" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a210a7f8748e7ac28c44be94bb607840d">ndbutton0</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a191091047c7a786b2994aa7cabbf9d19"></a><!-- doxytag: member="xdmxconfig.c::ndbutton1" ref="a191091047c7a786b2994aa7cabbf9d19" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a191091047c7a786b2994aa7cabbf9d19">ndbutton1</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="abee71366e59a470de4cb1f16ce83f611"></a><!-- doxytag: member="xdmxconfig.c::okbutton" ref="abee71366e59a470de4cb1f16ce83f611" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#abee71366e59a470de4cb1f16ce83f611">okbutton</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">dmxConfigOpenCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">dmxConfigSaveCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a9f0309382a6f4897d04f0f249108295a"></a><!-- doxytag: member="xdmxconfig.c::opendialog" ref="a9f0309382a6f4897d04f0f249108295a" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a9f0309382a6f4897d04f0f249108295a">opendialog</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#ad3b7e59a780559c54a232c43edfa6d63">dmxConfigOkAction()</a>, <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a2e98b18bed5c7a45a679dca531b228b0"></a><!-- doxytag: member="xdmxconfig.c::openpopup" ref="a2e98b18bed5c7a45a679dca531b228b0" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a2e98b18bed5c7a45a679dca531b228b0">openpopup</a><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a63d22122002cecb690732604266cb1e6">dmxConfigCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#acef742c17749473c5f9d475f3f8289eb">dmxConfigOkCallback()</a>, <a class="el" href="xdmxconfig_8c.html#ab6fbceedfbe74858b7cad27ab493acfa">dmxConfigOpenCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a4ec0abca7568be13fc01acfc871f50cd">dmxConfigSaveCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ac277ca719048235d195e2fe39e16e280"></a><!-- doxytag: member="xdmxconfig.c::origbox" ref="ac277ca719048235d195e2fe39e16e280" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#ac277ca719048235d195e2fe39e16e280">origbox</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a8372ac105b5b86c27efda8f1c3578a21"></a><!-- doxytag: member="xdmxconfig.c::quitpopup" ref="a8372ac105b5b86c27efda8f1c3578a21" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#a8372ac105b5b86c27efda8f1c3578a21">quitpopup</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#a4433d01cacd4d6897257770d67bd5efa">dmxConfigQuitCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a883bd47f35bdd31db9a612b8aa569f52">dmxConfigQuitCanCallback()</a>, <a class="el" href="xdmxconfig_8c.html#a94afad40dc987f0eebe60b259f653972">dmxConfigQuitOkCallback()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="acb241369adbfdc70fec382d0d306e012"></a><!-- doxytag: member="xdmxconfig.c::rtbox" ref="acb241369adbfdc70fec382d0d306e012" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Widget <a class="el" href="xdmxconfig_8c.html#acb241369adbfdc70fec382d0d306e012">rtbox</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>Referenced by <a class="el" href="xdmxconfig_8c.html#acc57e594c41a31b38edea45eba6e8f16">dmxConfigDataUpdate()</a>, and <a class="el" href="xdmxconfig_8c.html#a3c04138a5bfe5d72780bb7e82a18e627">main()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a46af646807e0797e72b6e8945e7ea88b"></a><!-- doxytag: member="xdmxconfig.c::yyin" ref="a46af646807e0797e72b6e8945e7ea88b" args="" -->
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">FILE* <a class="el" href="xdmxconfig_8c.html#a46af646807e0797e72b6e8945e7ea88b">yyin</a></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+</div>
+</div>
+ <div id="nav-path" class="navpath">
+ <ul>
+ <li class="navelem"><a class="el" href="xdmxconfig_8c.html">xdmxconfig.c</a> </li>
+ <hr>
+ <address>
+ <small>
+ Generated June 29, 2004 for <a
+ href="http://dmx.sourceforge.net">Distributed Multihead X</a> by
+ <a href="http://www.doxygen.org/index.html">doxygen</a>
+ 1.3.4.
+ </small>
+ </addres>
+ </hr>
+ </body>
+</html>
diff --git a/hw/dmx/doc/scaled.txt b/hw/dmx/doc/scaled.txt
new file mode 100644
index 0000000..4d2c73a
--- /dev/null
+++ b/hw/dmx/doc/scaled.txt
@@ -0,0 +1,546 @@
+Scaled Window Support in DMX
+
+ Kevin E. Martin
+
+ Rickard E. Faith
+
+ 15 October 2003 (created 19 September 2003)
+
+ This document investigates the possibility of adding scaled window support
+ to the DMX X server, thereby allowing a window or some selected part of
+ the logical DMX area to be displayed using a scaling factor. For example,
+ this might allow the contents of a window to be magnified for easier
+ viewing. In particular, scaling for the VNC client is explored. Copyright
+ 2003 by Red Hat, Inc., Raleigh, North Carolina
+
+ ----------------------------------------------------------------------
+
+ Table of Contents
+
+ Introduction
+
+ DMX
+
+ Problem Statement
+
+ Task
+
+ Previous Work
+
+ VNC
+
+ The X Video Extension
+
+ Possible Solutions
+
+ VNC-like Scaling
+
+ Application-transparent Scaling for DMX
+
+ XCreateScaledWindow API
+
+ Conclusion and Recommendations
+
+Introduction
+
+ DMX
+
+ The DMX X server (Xdmx) is a proxy server that is designed to allow X
+ servers on multiple machines to be combined into a single multi-headed X
+ server. Combined with Xinerama, these heads can appear as a single very
+ high-resolution screen. Typical applications include the creation of a
+ video wall with 16 1280x1024 displays arranged in a rectangle, for a total
+ resolution of of 5120x4096.
+
+ Problem Statement
+
+ Applications displayed on a physically large video wall that provides high
+ pixel-resolution may be difficult to see, especially if the application is
+ designed for use on a typical desktop computer with a relatively small
+ display located close to the human operator. The goal of this paper is to
+ describe and discuss solutions to this problem.
+
+ The original driving problem for this work is to provide scaling for the
+ vncviewer application when displayed using DMX (VNC scaling is currently
+ available only with the Windows client, and there is no plan to extend
+ that capability to other clients). While this specific problem will be
+ addressed in this paper, the general solution space will also be explored,
+ since this may lead to a good solution not only for vncviewer but also for
+ other applications.
+
+ Task
+
+ For reference, here is the original description of the task this paper
+ addresses:
+
+ o Scaled window support (for VNC)
+
+ o Investigate possibility of implementing a "scaled window"
+ extension:
+
+ + Add XCreateScaledWindow call that could be used in place of
+ XCreateWindow
+
+ + All primitives drawn to scaled window would be scaled by
+ appropriate (integral?) scaling factor
+
+ o Alternate approach: special case VNC support
+
+Previous Work
+
+ This section reviews relevant previous work.
+
+ VNC
+
+ Scaling under VNC
+
+ When using the vncviewer program for Windows, it is possible to specify a
+ scaling factor (as numerator and denominator). When scaling is in effect,
+ the viewer software uses StretchBlt (instead of BitBlt) to display the
+ pixels for the user. When this call is made, the viewer already has
+ received all of the pixel information (at full unscaled resolution).
+
+ The scaling in VNC is primitive. It does not conserve bandwidth, it does
+ not treat textual information differently (i.e., by using a suitably
+ scaled font), and it does not provide any anti-aliasing other than that
+ provided by the underlying (Windows-only) system library.
+
+ The X Video Extension
+
+ The X Video Extension is a widely-available extension to the X11 protocol
+ that provides support for streaming video. Integral to this support is the
+ ability to arbitrarily scale the output. In version 2.2 of the X Video
+ specification, support for scaled still images was provided, using both
+ shared memory and traditional transport. The API for this support uses
+ calls that are quite similar to XCreateWindow, XPutImage, and
+ XShmPutImage. Currently, most of the drivers implemented in XFree86 only
+ support data in various YUV formats. However, several modern video
+ adaptors support RGB as well.
+
+ Note, though, that the target output for this scaling is an overlay plane
+ -- so X Video provides functionality that is fundamentally different from
+ that provided by the Windows StrechBlt call.
+
+Possible Solutions
+
+ This section briefly discusses possible solutions, including major
+ advantages and disadvantages from both the implementation and the end-user
+ programmer standpoint.
+
+ VNC-like Scaling
+
+ Software Scaling
+
+ The vncviewer application could be modified to provide software scaling.
+ This is not a general solution, but it does solve one of the goals of this
+ work.
+
+ A prototype of this solution was implemented and a patch against
+ vnc-3.3.7-unixsrc is available in the dmx/external directory. Because of
+ limited time available for this work, all of the edge cases were not
+ considered and the solution works well mainly for integer scaling.
+
+ Currently, vncviewer writes to the X display with XPutImage, XCopyArea,
+ and XFillRectangle. All instances of these calls have to be aware of
+ scaling and must round correctly. In the prototype solution, rounding is
+ incorrect and can cause artifacts.
+
+ A better solution would be to cache all updates to the desktop image in
+ vncviewer and only send the damaged area to the X display with XPutImage.
+ This would allow the damaged area to be computed so that rounding errors
+ do not create artifacts. This method is probably similar to what is used
+ in the Window client. (The whole VNC suite is being re-written in C++ and
+ the forthcoming version 4 has not been evaluated.)
+
+ Scaling with the X Video Extension
+
+ The scaling in the Windows vncviewer application makes use of a scaled
+ blit that is supplied by the underlying system library. Several video
+ cards currently provide support for a scaled blit, and some X servers
+ (including XFree86) expose this capability to applications via the
+ XvPutImage interface of the X Video Extension. The capability exposed by
+ XvPutImage results in the scaled image being drawn to an overlay plane.
+ Most video cards also provide support for a scaled blit into the normal
+ output planes, but this is not exposed via XvPutImage.
+
+ The vncviewer program could be modified to use the X Video Extension to
+ provide scaling under X11 that is similar to the scaling currently
+ provided under Windows. Unfortunately, Xdmx does not currently export the
+ X Video Extension, so this would not provide an immediate solution usable
+ with DMX.
+
+ A very early-stage proof-of-concept prototype was implemented and a
+ preliminary patch against vnc-3.3.7-unixsrc is available in the
+ dmx/external directory. This prototype was implemented to better
+ understand the problems that must be solved to make this solution viable:
+
+ o As noted under the software scaling section above, vncviewer writes to
+ the X display with several different calls. These calls write to the
+ normal output planes and are compatible with XvPutImage, which writes
+ to an overlay plane. To eliminate artifacts caused by this problem,
+ vncviewer should be modified so that a cached copy of the desktop is
+ available, either as a client-side image or a server-side off-screen
+ pixmap, so that XvPutImage would be the only method for writing to the
+ X display.
+
+ o Although several modern graphics adaptors support hardware scaling
+ using an RGB format (e.g., ATI Radeon, nVidia, etc.), XFree86 drivers
+ typically only implement YUV formats. YUV generally compress the pixel
+ information in some way. For example, two commonly implemented
+ formats, YUY2 and UYVY provide intensity information for every RGB
+ pixel, but only provide chroma and luminance information for pairs of
+ horizontal pixels. Since VNC uses pixel-resolution for communicating
+ updates on the wire, additional artifacts are introduced (because
+ there may not be enough information from the wire to update a pair of
+ pixels).
+
+ Further, the well-known problem with YUV encoding is even more evident
+ when the image is a desktop instead of a movie. For example, consider
+ a 1-pixel-wide vertical window border. If the border changes in color
+ but not intensity (e.g., because a window manager uses color to
+ indicate focus), there may or may not be a change in the YUY2 image,
+ depending on the algorithm used for RGB to YUV conversion and on how
+ the border pixel is ordered in the pair of pixels used by the
+ algorithm.
+
+ Many of these artifacts could be eliminated if vncviewer cached a
+ complete RGB image of the desktop, and only did the conversion to YUV
+ for properly aligned areas of damage. The remaining artifacts could be
+ eliminated if an RGB format was used with X Video (which may require
+ the extension of existing XFree86 drivers to support RGB).
+
+ o Most modern video cards support exactly one overlay plane that is
+ suitable for use with X Video. Therefore, only one application can use
+ X Video at any given time. This is a severe limitation in a desktop
+ environment.
+
+ Implementing the X Video Extension for DMX
+
+ The user-level API for X Video is fairly simple, but the underlying
+ support required for the full specification is large. However, since the
+ API provides a method to query supported capabilities, a usable subset of
+ X Video can be implemented that would support XvPutImage and little else.
+ This would require support for the following:
+
+ o X Video Extension API calls, including the following:
+
+ o XvQueryExtension
+
+ o XvQueryAdaptors
+
+ o XvQueryPortAttributes
+
+ o XvFreeAdaptorInfo
+
+ o XvListImageFormats
+
+ o XvGrabPort
+
+ o XvCreateImage
+
+ o XvPutImage
+
+ o XvShmCreateImage
+
+ o XvShmPutImage
+
+ o Support for querying back-end X Video Extension capabilities.
+
+ o Support for sending the image to the back-ends. Because X Video
+ requires sending full images, there may be a trade-off between
+ bandwidth limitations and additional complexity to divide the image up
+ such that is scales properly.
+
+ o Possible support for a software fall-back. For example, if all of the
+ back-ends do not support the X Video Extension, software scaling can
+ be implemented such that the image is sent to the back-end with
+ XPutImage. This pathway would have poor performance.
+
+ Supporting RGB formats for the X Video Extension
+
+ Assuming an XFree86 driver already supports the X Video Extension, and
+ assuming the target hardware supports an RGB format, then adding support
+ for that format is relatively simple and straightforward.
+
+ Scaling with an XPutImageScaled Extension
+
+ Instead of (or in addition to) implementing the X Video Extension in DMX,
+ one obvious solution would be to implement a new extension that provides
+ access to hardware-assisted scaled blits, similar to the StretchBlt call
+ available under Windows. This call would scale RGB images and would not
+ use the overlay plane (unlike the X Video Extension).
+
+ This approach has many of the same advantages and disadvantages as the
+ XCopyAreaScaled Extension, discussed in the next section. Discussion of
+ XPutImageScaled is deferred in favor of XCopyAreaScaled for the following
+ reasons:
+
+ o XPutImageScaled can be emulated with XCopyAreaScaled by first using
+ XPutImage to copy the image to an off-screen pixmap, and then calling
+ XCopyAreaScaled between that off-screen pixmap and the target
+ drawable.
+
+ o Since XCopyAreaScaled would copy between two areas of on-screen or
+ off-screen memory, it has additional uses and can be viewed as
+ efficiently providing a superset of XPutImageScaled functionality.
+
+ Scaling with an XCopyAreaScaled Extension
+
+ As noted in the previous section, because XCopyAreaScaled provides a
+ superset of the functionality provided by XPutImageScaled, we will
+ consider this extension instead.
+
+ First, XCopyAreaScaled would provide for RGB scaling between pixmaps
+ (i.e., on-screen or off-screen areas of memory that reside on the video
+ card). Unlike the X Video Extension, which writes into an overlay plane,
+ XCopyAreaScaled would write into the non-overlay areas of the screen. Key
+ points to consider are as follows:
+
+ o Because different planes are involved, the two scaling operations are
+ usually implemented in hardware differently, so an XCopyAreaScaled
+ extension could be added in a manner that would neither conflict with
+ nor interact with the X Video extension in any way.
+
+ o The XCopyAreaScaled extension provides new functionality that the X
+ Video Extension does not provide. Based on anecdotal feedback, we
+ believe that many people outside the DMX and VNC communities would be
+ excited about this extension.
+
+ o The main drawback to this extension is that it is new and needs to be
+ implemented at the driver level in XFree86 for each video card to be
+ supported. At the present time, it is more likely that the X Video
+ Extension will be implemented for a particular piece hardware because
+ the X Video extension has multimedia uses. However, over time, we
+ would expect the XCopyAreaScaled extension to be implemented along
+ with the X Video extension, especially if it becomes popular.
+
+ o Another drawback is that not all modern cards provide support for a
+ simple scaled blit operation. However, these cards usually do provide
+ a 3D pipeline which could be used to provide this functionality in a
+ manner that is transparent to the client application that is using the
+ XCopyAreaScaled extension. However, this implementation pathway would
+ make this extension somewhat more difficult to implement on certain
+ cards.
+
+ Scaling with OpenGL
+
+ Another general solution to the scaling problem is to use the texture
+ scaling found in all 3D hardware. This ability is already exposed through
+ OpenGL and can be exploited by clients without X server modification
+ (i.e., other than the ability to support OpenGL). An application using
+ OpenGL would transmit the non-scaled image to the X server as a texture,
+ and would then display a single non-transformed rect using that texture.
+ This also works around the single overlay problem with the X Video
+ Extension as well as the need to implement additional scaled primitive
+ extensions.
+
+ The downside is that most OpenGL implementations require power of 2
+ texture sizes and this can be very wasteful of memory if, for example, the
+ application needs to scale a 1025x1025 image, which would require a
+ 2048x2048 texture area (even a 640x480 image would require a 1024x512
+ texture). Another downside is that some OpenGL implementations have a
+ limited about of texture memory and cannot handle textures that are very
+ large. For example, they might limit the texture size to 1024x1024.
+
+ Application-transparent Scaling for DMX
+
+ Back-end Scaling Without Disconnect/Reconnect
+
+ VNC does scaling on the client side (in the vncviewer application).
+ Implementing a similar solution for DMX would require support in the
+ back-end X servers and, therefore, is not a general solution.
+
+ XFree86 already implements some support for "scaling" that could be used
+ with DMX: if, in the XF86Config file, multiple Modes are listed in the
+ Display Subsection of the Screen Section, then pressing Ctrl-Alt-Plus and
+ Ctrl-Alt-Minus can be used to iterate through the listed modes. The
+ display dimensions will change to the dimensions in the Modes line, but
+ the logical dimensions of the X server (i.e., the dimensions that Xdmx
+ knows about) will not change.
+
+ Further, the dimensions of the XFree86 display are under software control
+ (via the XFree86-VidModeExtension), so the Xdmx server could change the
+ screen dimensions on a per-display basis, thereby scaling the information
+ on part of that display.
+
+ However, this scaling appears to have limited use. For example, assume a 4
+ by 4 display wall consisting of 16 1280x1024 displays. If all of the
+ back-end servers were simultaneously configured to display 640x480, the
+ left hand corner of each display would be magnified, but the composite
+ result would be unreadable. Magnifying one display at a time could be
+ usable, but could have limited utility, since the result would still be no
+ larger than a single display.
+
+ Back-end Scaling With Disconnect/Reconnect
+
+ Disconnect and reconnect features are not currently supported in DMX, but
+ are scheduled to be implemented in the future. These features, combined
+ with the XFree86-VidModeExtension Extension, would allow an application to
+ do the following:
+
+ o Disconnect a specific back-end server (via the DMX Extension),
+
+ o reconfigure the XFree86 back-end server resolution, and
+
+ o reconnect the back-end server to DMX -- at a new origin with the new
+ screen resolution.
+
+ For example, consider a display wall consisting of 16 1280x1024 displays
+ with a total resolution of 5120x4096. All of the screens could be
+ disconnected, repositioned, and reconnected each at a resolution of
+ 640x480. The total resolution of the display wall would be 2560x1920,
+ allowing a view of a selected area approximately one-fourth of the size of
+ the DMX display. This change would be completely application independent
+ (except, perhaps, for a DMX-aware window manager). When work at the
+ increased resolution was completed, the back-end servers could be
+ disconnected, reconfigured, and reconnected for the original 5120x4096
+ view.
+
+ Support for this type of scaling can be implemented in a DMX-aware X11
+ client assuming the DMX server support arbitrary disconnect and reconnect
+ semantics. Because this application cannot be written before
+ disconnect/reconnect is implemented, this solution will not be discussed
+ further in this paper.
+
+ Server-side Scaling
+
+ In earlier versions of DMX, a frame buffer was maintained on the server
+ side, and XPutImage was used to move the information from the server to
+ the client (similar to some early VNC implementations). The use of a
+ server-side frame buffer would allow the server to do scaling, but is not
+ a recommended solution because of overall performance issues and
+ server-side memory issues (i.e., the frame buffer would be very large for
+ large display walls).
+
+ Exploration of this path is not recommended.
+
+ XCreateScaledWindow API
+
+ The implementation of X Video Extension in DMX, and the use of XvPutImage
+ by applications requiring scaling requires significant changes in DMX
+ Further, XvPutImage is, essentially a scaled blit, and it is only useful
+ for applications which are already using (or can be modified to use)
+ XPutImage. Therefore, a more general API will be discussed as another
+ possibility.
+
+ X applications typically create windows with the XCreateWindow call. A new
+ extension could provide an XCreateScaledWindow call that could be used in
+ place of the XCreateWindow call and be otherwise transparent to the
+ application. This would allow applications, even those that do not depend
+ on XPutImage, to take advantage of window scaling. In this section we
+ describe how the call would work, what transparency it provides, and how
+ to solve the potential problems that transparency creates.
+
+ XCreateWindow
+
+ The XCreateWindow call takes width and height as parameters. An
+ XCreateScaledWindow call could take all the same parameters, with the
+ addition of a scaling factor.
+
+ XSetWindowAttributes
+
+ An X11 window has several attributes that would have to be scaled:
+
+ o Background and border pixmaps
+
+ o Border width
+
+ o Cursor
+
+ XGetWindowAttributes, XGetGeometry
+
+ For transparency, calls that query the window attributes should return
+ unscaled information. This suggests that all unscaled pixmaps and window
+ attributes should be cached.
+
+ Unfortunately, a window manager requires the scaled geometry to properly
+ decorate the window. The X server can probably determine which client is
+ acting as the window manager (e.g., because that client will select events
+ that are used exclusively by the window manager). However, other Scaled
+ Window Extension aware clients may also need to determine the scaled
+ geometry. Therefore, at least two additional extension calls should be
+ implemented: XGetScaledWindowAttributes and XGetScaledGeometry.
+
+ Popup and Child window positions
+
+ Some applications may position popup and child windows based on an
+ unscaled notion of the main window geometry. In this case, additional
+ modifications to the client would be required.
+
+ Events
+
+ Most events (e.g., for mouse motion) return information about the
+ coordinates at which the even occurred. These coordinates would have to be
+ modified so that unscaled values were presented to the client.
+
+ Implementation
+
+ There are many implementation issues, some of which are similar to the
+ issues involved in implementing the X Video Extension for DMX. The window
+ contents must be scaled, either by performing all operations to a frame
+ buffer and then writing the image to the display (perhaps using hardware
+ scaling support), or by modifying all of the various drawing operations to
+ perform scaling. Because of the complexity involved, the frame buffer
+ option is recommended.
+
+Conclusion and Recommendations
+
+ We recommend a three phase implementation strategy, based on how an
+ application could be written to take advantage of scaling:
+
+ 1. The XCopyAreaScaled extension should be implemented, since this is the
+ ideal solution for applications like VNC, and since making use of this
+ extension will require minimal changes to applications that already
+ use XPutImage or XCopyArea.
+
+ The initial implementation work would include the design of the X
+ protocol extension, writing this up in the usual format for extension
+ documentation, implementation of the protocol transport pieces in
+ XFree86, implementation of a software fall-back in XFree86 and DMX,
+ one example hardware implementation for XFree86, and implementation of
+ support for this extension in DMX.
+
+ We suggest implementing the extension first on the ATI Radeon cards.
+ However, since these cards do not provide a 2D scaled blit primitive,
+ the implementation would have to make use of the 3D texture engine to
+ emulate a scaled blit. This is recommended, since other modern
+ graphics cards also do not provide a simple 2D scaled blit operation
+ and an example of the more difficult implementation pathway would be
+ helpful to others.
+
+ 2. Until XCopyAreaScaled is widely supported, applications that require
+ scaling will have to fall back to another scaling method. We suggest
+ OpenGL as the first fall-back method because it is widely available
+ and supported by DMX.
+
+ A project centered around OpenGL-based scaling would implement this
+ scaling in VNC as an example. This work would include re-writing the
+ vncviewer rendering engine to cache a master copy of the desktop image
+ for all operations.
+
+ 3. Since OpenGL is not implemented everywhere, and may not provide
+ hardware-assisted performance in every implementation, an application
+ that requires scaling should also fall back to using the X Video
+ Extension.
+
+ This project would add support for the X Video Extension to DMX and
+ would add support to VNC to take advantage of this extension without
+ introducing artifacts. This would require modifying the vncviewer
+ rendering engine to cache a master copy of the desktop image for all
+ operations. This project should also add support for the RGB format to
+ at least one XFree86 driver (e.g., ATI Radeon).
+
+ The X Video Extension is one of the few popular extensions that DMX
+ does not support. We recommend implementing the X Video Extension even
+ if scaling is the specific goal of that work.
+
+ We do not recommend implementation of the XCreateScaledWindow extension
+ because of the complexity involved. We do not recommend implementation of
+ the XPutImageScaled extension because it requires the same amount of work
+ as the XCopyAreaScaled extension, but provides less functionality.
+ Further, server-side scaling with a large frame buffer is not recommended
+ because of the performance implications.
+
+ The back-end scaling, especially with disconnect/reconnect support should
+ be explored in the future after disconnect/reconnect is implemented, but
+ not at the present time.
diff --git a/hw/dmx/doc/scaled.xml b/hw/dmx/doc/scaled.xml
new file mode 100644
index 0000000..48c83e0
--- /dev/null
+++ b/hw/dmx/doc/scaled.xml
@@ -0,0 +1,725 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+ <article>
+
+ <articleinfo>
+ <!-- Title information -->
+ <title>Scaled Window Support in DMX</title>
+ <authorgroup>
+ <author><firstname>Kevin E.</firstname><surname>Martin</surname></author>
+ <author><firstname>Rickard E.</firstname><surname>Faith</surname></author>
+ </authorgroup>
+ <pubdate>15 October 2003 (created 19 September 2003)</pubdate>
+ <abstract>
+ <para>
+ This document investigates the possibility of adding scaled window
+ support to the DMX X server, thereby allowing a window or some
+ selected part of the logical DMX area to be displayed using a
+ scaling factor. For example, this might allow the contents of a
+ window to be magnified for easier viewing. In particular, scaling
+ for the VNC client is explored. <emphasis remap="it">Copyright 2003
+ by Red Hat, Inc., Raleigh, North Carolina</emphasis>
+ </para>
+ </abstract>
+ </articleinfo>
+
+ <!-- Begin the document -->
+ <sect1><title>Introduction</title>
+ <sect2><title>DMX</title>
+ <para>
+ The DMX X server (Xdmx) is a proxy server that is designed
+ to allow X servers on multiple machines to be combined into
+ a single multi-headed X server. Combined with Xinerama,
+ these heads can appear as a single very high-resolution
+ screen. Typical applications include the creation of a
+ video wall with 16 1280x1024 displays arranged in a
+ rectangle, for a total resolution of of 5120x4096.
+ </para>
+ </sect2>
+ <sect2><title>Problem Statement</title>
+ <para>
+ Applications displayed on a physically large video wall that
+ provides high pixel-resolution may be difficult to see,
+ especially if the application is designed for use on a
+ typical desktop computer with a relatively small display
+ located close to the human operator. The goal of this paper
+ is to describe and discuss solutions to this problem.
+ </para>
+ <para>
+ The original driving problem for this work is to provide
+ scaling for the <command>vncviewer</command> application when
+ displayed using DMX (VNC scaling is currently available only
+ with the Windows client, and there is no plan to extend that
+ capability to other clients). While this specific problem
+ will be addressed in this paper, the general solution space
+ will also be explored, since this may lead to a good
+ solution not only for <command>vncviewer</command> but also for
+ other applications.
+ </para>
+ </sect2>
+ <sect2><title>Task</title>
+ <para>
+ For reference, here is the original description of the task
+ this paper addresses:
+ <itemizedlist>
+ <listitem><para>Scaled window support (for VNC)
+ <itemizedlist>
+ <listitem><para>
+ Investigate possibility of implementing a "scaled
+ window" extension:
+ <itemizedlist>
+ <listitem><para>
+ Add XCreateScaledWindow call that could be used
+ in place of XCreateWindow
+ </para></listitem>
+ <listitem><para>
+ All primitives drawn to scaled window would be
+ scaled by appropriate (integral?) scaling factor
+ </para></listitem>
+ </itemizedlist>
+ </para></listitem>
+ <listitem><para>
+ Alternate approach: special case VNC support
+ </para></listitem>
+ </itemizedlist>
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1><title>Previous Work</title>
+ <para>
+ This section reviews relevant previous work.
+ </para>
+ <sect2><title>VNC</title>
+ <sect3><title>Scaling under VNC</title>
+ <para>
+ When using the <command>vncviewer</command> program for Windows, it
+ is possible to specify a scaling factor (as numerator and
+ denominator). When scaling is in effect, the viewer
+ software uses StretchBlt (instead of BitBlt) to display
+ the pixels for the user. When this call is made, the
+ viewer already has received all of the pixel information
+ (at full unscaled resolution).
+ </para>
+ <para>
+ The scaling in VNC is primitive. It does not conserve
+ bandwidth, it does not treat textual information
+ differently (i.e., by using a suitably scaled font), and
+ it does not provide any anti-aliasing other than that
+ provided by the underlying (Windows-only) system library.
+ </para>
+ </sect3>
+ </sect2>
+ <sect2><title>The X Video Extension</title>
+ <para>
+ The X Video Extension is a widely-available extension to the
+ X11 protocol that provides support for streaming video.
+ Integral to this support is the ability to arbitrarily scale
+ the output. In version 2.2 of the X Video specification,
+ support for scaled still images was provided, using both
+ shared memory and traditional transport. The API for this
+ support uses calls that are quite similar to XCreateWindow,
+ XPutImage, and XShmPutImage. Currently, most of the drivers
+ implemented in XFree86 only support data in various YUV
+ formats. However, several modern video adaptors support RGB
+ as well.
+ </para>
+ <para>
+ Note, though, that the target output for this scaling is an
+ overlay plane -- so X Video provides functionality that is
+ fundamentally different from that provided by the Windows
+ StrechBlt call.
+ </para>
+ </sect2>
+ </sect1>
+
+ <sect1><title>Possible Solutions</title>
+ <para>
+ This section briefly discusses possible solutions, including
+ major advantages and disadvantages from both the
+ implementation and the end-user programmer standpoint.
+ </para>
+ <sect2><title>VNC-like Scaling</title>
+ <sect3><title>Software Scaling</title>
+ <para>
+ The <command>vncviewer</command> application could be modified to
+ provide software scaling. This is not a general solution,
+ but it does solve one of the goals of this work.
+ </para>
+ <para>
+ A prototype of this solution was implemented and a patch
+ against <filename>vnc-3.3.7-unixsrc</filename> is available in the
+ <filename>dmx/external</filename> directory. Because of limited time
+ available for this work, all of the edge cases were not
+ considered and the solution works well mainly for integer
+ scaling.
+ </para>
+ <para>
+ Currently, <command>vncviewer</command> writes to the X display
+ with XPutImage, XCopyArea, and XFillRectangle. All
+ instances of these calls have to be aware of scaling
+ and must round correctly. In the prototype solution,
+ rounding is incorrect and can cause artifacts.
+ </para>
+ <para>
+ A better solution would be to cache all updates to the
+ desktop image in <command>vncviewer</command> and only send the
+ damaged area to the X display with XPutImage. This would
+ allow the damaged area to be computed so that rounding
+ errors do not create artifacts. This method is probably
+ similar to what is used in the Window client. (The whole
+ VNC suite is being re-written in C++ and the forthcoming
+ version 4 has not been evaluated.)
+ </para>
+ </sect3>
+ <sect3><title>Scaling with the X Video Extension</title>
+ <para>
+ The scaling in the Windows <command>vncviewer</command> application
+ makes use of a scaled blit that is supplied by the
+ underlying system library. Several video cards currently
+ provide support for a scaled blit, and some X servers
+ (including XFree86) expose this capability to applications
+ via the XvPutImage interface of the X Video Extension.
+ The capability exposed by XvPutImage results in the scaled
+ image being drawn to an overlay plane. Most video cards
+ also provide support for a scaled blit into the normal
+ output planes, but this is not exposed via XvPutImage.
+ </para>
+ <para>
+ The <command>vncviewer</command> program could be modified to use
+ the X Video Extension to provide scaling under X11 that is
+ similar to the scaling currently provided under Windows.
+ Unfortunately, Xdmx does not currently export the X Video
+ Extension, so this would not provide an immediate solution
+ usable with DMX.
+ </para>
+ <para>
+ A very early-stage proof-of-concept prototype was
+ implemented and a preliminary patch against
+ <filename>vnc-3.3.7-unixsrc</filename> is available in the
+ <filename>dmx/external</filename> directory. This prototype was
+ implemented to better understand the problems that must be
+ solved to make this solution viable:
+ <itemizedlist>
+ <listitem><para>
+ As noted under the software scaling section above,
+ <command>vncviewer</command> writes to the X display with
+ several different calls. These calls write to the
+ normal output planes and are compatible with
+ XvPutImage, which writes to an overlay plane. To
+ eliminate artifacts caused by this problem,
+ <command>vncviewer</command> should be modified so that a cached
+ copy of the desktop is available, either as a
+ client-side image or a server-side off-screen pixmap,
+ so that XvPutImage would be the only method for
+ writing to the X display.
+ </para></listitem>
+ <listitem>
+ <para>
+ Although several modern graphics adaptors support
+ hardware scaling using an RGB format (e.g., ATI
+ Radeon, nVidia, etc.), XFree86 drivers typically
+ only implement YUV formats. YUV generally compress
+ the pixel information in some way. For example, two
+ commonly implemented formats, YUY2 and UYVY provide
+ intensity information for every RGB pixel, but only
+ provide chroma and luminance information for pairs
+ of horizontal pixels. Since VNC uses
+ pixel-resolution for communicating updates on the
+ wire, additional artifacts are introduced (because
+ there may not be enough information from the wire to
+ update a pair of pixels).
+ </para>
+ <para>
+ Further, the well-known problem with YUV encoding
+ is even more evident when the image is a desktop
+ instead of a movie. For example, consider a
+ 1-pixel-wide vertical window border. If the border
+ changes in color but not intensity (e.g., because a
+ window manager uses color to indicate focus), there
+ may or may not be a change in the YUY2 image,
+ depending on the algorithm used for RGB to YUV
+ conversion and on how the border pixel is ordered in
+ the pair of pixels used by the algorithm.
+ </para>
+ <para>
+ Many of these artifacts could be eliminated if
+ <command>vncviewer</command> cached a complete RGB image of
+ the desktop, and only did the conversion to YUV for
+ properly aligned areas of damage. The remaining artifacts
+ could be eliminated if an RGB format was used with X
+ Video (which may require the extension of existing
+ XFree86 drivers to support RGB).
+ </para>
+ </listitem>
+ <listitem><para>
+ Most modern video cards support exactly one overlay
+ plane that is suitable for use with X Video.
+ Therefore, only one application can use X Video at any
+ given time. This is a severe limitation in a desktop
+ environment.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ <sect4><title>Implementing the X Video Extension for DMX</title>
+ <para>
+ The user-level API for X Video is fairly simple, but the
+ underlying support required for the full specification
+ is large. However, since the API provides a method to
+ query supported capabilities, a usable subset of X
+ Video can be implemented that would support XvPutImage
+ and little else. This would require support for the
+ following:
+ <itemizedlist>
+ <listitem><para>
+ X Video Extension API calls, including the
+ following:
+ <itemizedlist>
+ <listitem><para>XvQueryExtension</para></listitem>
+ <listitem><para>XvQueryAdaptors</para></listitem>
+ <listitem><para>XvQueryPortAttributes</para></listitem>
+ <listitem><para>XvFreeAdaptorInfo</para></listitem>
+ <listitem><para>XvListImageFormats</para></listitem>
+ <listitem><para>XvGrabPort</para></listitem>
+ <listitem><para>XvCreateImage</para></listitem>
+ <listitem><para>XvPutImage</para></listitem>
+ <listitem><para>XvShmCreateImage</para></listitem>
+ <listitem><para>XvShmPutImage</para></listitem>
+ </itemizedlist>
+ </para></listitem>
+ <listitem><para>
+ Support for querying back-end X Video Extension
+ capabilities.
+ </para></listitem>
+ <listitem><para>
+ Support for sending the image to the back-ends.
+ Because X Video requires sending full images, there
+ may be a trade-off between bandwidth limitations and
+ additional complexity to divide the image up such
+ that is scales properly.
+ </para></listitem>
+ <listitem><para>
+ Possible support for a software fall-back. For
+ example, if all of the back-ends do not support the X
+ Video Extension, software scaling can be implemented
+ such that the image is sent to the back-end with
+ XPutImage. This pathway would have poor
+ performance.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ </sect4>
+ <sect4><title>Supporting RGB formats for the X Video Extension</title>
+ <para>
+ Assuming an XFree86 driver already supports the X Video
+ Extension, and assuming the target hardware supports an
+ RGB format, then adding support for that format is
+ relatively simple and straightforward.
+ </para>
+ </sect4>
+ </sect3>
+ <sect3><title>Scaling with an XPutImageScaled Extension</title>
+ <para>
+ Instead of (or in addition to) implementing the X Video
+ Extension in DMX, one obvious solution would be to
+ implement a new extension that provides access to
+ hardware-assisted scaled blits, similar to the StretchBlt
+ call available under Windows. This call would scale RGB
+ images and would not use the overlay plane (unlike the X
+ Video Extension).
+ </para>
+ <para>
+ This approach has many of the same advantages and
+ disadvantages as the XCopyAreaScaled Extension, discussed
+ in the next section. Discussion of XPutImageScaled is
+ deferred in favor of XCopyAreaScaled for the following
+ reasons:
+ <itemizedlist>
+ <listitem><para>
+ XPutImageScaled can be emulated with XCopyAreaScaled
+ by first using XPutImage to copy the image to an
+ off-screen pixmap, and then calling XCopyAreaScaled
+ between that off-screen pixmap and the target
+ drawable.
+ </para></listitem>
+ <listitem><para>
+ Since XCopyAreaScaled would copy between two areas of
+ on-screen or off-screen memory, it has additional uses
+ and can be viewed as efficiently providing a superset
+ of XPutImageScaled functionality.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ </sect3>
+ <sect3><title>Scaling with an XCopyAreaScaled Extension</title>
+ <para>
+ As noted in the previous section, because XCopyAreaScaled
+ provides a superset of the functionality provided by
+ XPutImageScaled, we will consider this extension instead.
+ </para>
+ <para>
+ First, XCopyAreaScaled would provide for RGB scaling
+ between pixmaps (i.e., on-screen or off-screen areas of
+ memory that reside on the video card). Unlike the X Video
+ Extension, which writes into an overlay plane,
+ XCopyAreaScaled would write into the non-overlay areas of
+ the screen. Key points to consider are as follows:
+ <itemizedlist>
+ <listitem><para>
+ Because different planes are involved, the two scaling
+ operations are usually implemented in hardware
+ differently, so an XCopyAreaScaled extension could be
+ added in a manner that would neither conflict with nor
+ interact with the X Video extension in any way.
+ </para></listitem>
+ <listitem><para>
+ The XCopyAreaScaled extension provides new
+ functionality that the X Video Extension does not
+ provide. Based on anecdotal feedback, we believe that
+ many people outside the DMX and VNC communities would
+ be excited about this extension.
+ </para></listitem>
+ <listitem><para>
+ The main drawback to this extension is that it is new
+ and needs to be implemented at the driver level in
+ XFree86 for each video card to be supported. At the
+ present time, it is more likely that the X Video
+ Extension will be implemented for a particular piece
+ hardware because the X Video extension has multimedia
+ uses. However, over time, we would expect the
+ XCopyAreaScaled extension to be implemented along with
+ the X Video extension, especially if it becomes
+ popular.
+ </para></listitem>
+ <listitem><para>
+ Another drawback is that not all modern cards provide
+ support for a simple scaled blit operation. However,
+ these cards usually do provide a 3D pipeline which
+ could be used to provide this functionality in a
+ manner that is transparent to the client application
+ that is using the XCopyAreaScaled extension. However,
+ this implementation pathway would make this extension
+ somewhat more difficult to implement on certain cards.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ </sect3>
+ <sect3><title>Scaling with OpenGL</title>
+ <para>
+ Another general solution to the scaling problem is to use
+ the texture scaling found in all 3D hardware. This
+ ability is already exposed through OpenGL and can be
+ exploited by clients without X server modification (i.e.,
+ other than the ability to support OpenGL). An application
+ using OpenGL would transmit the non-scaled image to the X
+ server as a texture, and would then display a single
+ non-transformed rect using that texture. This also works
+ around the single overlay problem with the X Video
+ Extension as well as the need to implement additional
+ scaled primitive extensions.
+ </para>
+ <para>
+ The downside is that most OpenGL implementations require
+ power of 2 texture sizes and this can be very wasteful of
+ memory if, for example, the application needs to scale a
+ 1025x1025 image, which would require a 2048x2048 texture
+ area (even a 640x480 image would require a 1024x512
+ texture). Another downside is that some OpenGL
+ implementations have a limited about of texture memory and
+ cannot handle textures that are very large. For example,
+ they might limit the texture size to 1024x1024.
+ </para>
+ </sect3>
+ </sect2>
+ <sect2><title>Application-transparent Scaling for DMX
+ </title><sect3><title>Back-end Scaling Without Disconnect/Reconnect</title>
+ <para>
+ VNC does scaling on the client side (in the
+ <command>vncviewer</command> application). Implementing a similar
+ solution for DMX would require support in the back-end X
+ servers and, therefore, is not a general solution.
+ </para>
+ <para>
+ XFree86 already implements some support for "scaling" that
+ could be used with DMX: if, in the XF86Config file,
+ multiple Modes are listed in the Display Subsection of the
+ Screen Section, then pressing Ctrl-Alt-Plus and
+ Ctrl-Alt-Minus can be used to iterate through the listed
+ modes. The display dimensions will change to the
+ dimensions in the Modes line, but the logical dimensions
+ of the X server (i.e., the dimensions that Xdmx knows
+ about) will not change.
+ </para>
+ <para>
+ Further, the dimensions of the XFree86 display are under
+ software control (via the XFree86-VidModeExtension), so
+ the Xdmx server could change the screen dimensions on a
+ per-display basis, thereby scaling the information on part
+ of that display.
+ </para>
+ <para>
+ However, this scaling appears to have limited use. For
+ example, assume a 4 by 4 display wall consisting of 16
+ 1280x1024 displays. If all of the back-end servers were
+ simultaneously configured to display 640x480, the left
+ hand corner of each display would be magnified, but the
+ composite result would be unreadable. Magnifying one
+ display at a time could be usable, but could have limited
+ utility, since the result would still be no larger than a
+ single display.
+ </para>
+ </sect3>
+ <sect3><title>Back-end Scaling With Disconnect/Reconnect</title>
+ <para>
+ Disconnect and reconnect features are not currently
+ supported in DMX, but are scheduled to be implemented in
+ the future. These features, combined with the
+ XFree86-VidModeExtension Extension, would allow an
+ application to do the following:
+ <itemizedlist>
+ <listitem><para>
+ Disconnect a specific back-end server (via the DMX
+ Extension),
+ </para></listitem>
+ <listitem><para>
+ reconfigure the XFree86 back-end server resolution,
+ and
+ </para></listitem>
+ <listitem><para>
+ reconnect the back-end server to DMX -- at a new
+ origin with the new screen resolution.
+ </para></listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ For example, consider a display wall consisting of 16
+ 1280x1024 displays with a total resolution of 5120x4096.
+ All of the screens could be disconnected, repositioned,
+ and reconnected each at a resolution of 640x480. The
+ total resolution of the display wall would be 2560x1920,
+ allowing a view of a selected area approximately
+ one-fourth of the size of the DMX display. This change
+ would be completely application independent (except,
+ perhaps, for a DMX-aware window manager). When work at
+ the increased resolution was completed, the back-end
+ servers could be disconnected, reconfigured, and
+ reconnected for the original 5120x4096 view.
+ </para>
+ <para>
+ Support for this type of scaling can be implemented in a
+ DMX-aware X11 client assuming the DMX server support
+ arbitrary disconnect and reconnect semantics. Because
+ this application cannot be written before
+ disconnect/reconnect is implemented, this solution will
+ not be discussed further in this paper.
+ </para>
+ </sect3>
+ <sect3><title>Server-side Scaling</title>
+ <para>
+ In earlier versions of DMX, a frame buffer was maintained
+ on the server side, and XPutImage was used to move the
+ information from the server to the client (similar to some
+ early VNC implementations). The use of a server-side
+ frame buffer would allow the server to do scaling, but is
+ not a recommended solution because of overall performance
+ issues and server-side memory issues (i.e., the frame
+ buffer would be very large for large display walls).
+ </para>
+ <para>
+ Exploration of this path is not recommended.
+ </para>
+ </sect3>
+ </sect2>
+ <sect2><title>XCreateScaledWindow API</title>
+ <para>
+ The implementation of X Video Extension in DMX, and the use
+ of XvPutImage by applications requiring scaling requires
+ significant changes in DMX Further, XvPutImage is,
+ essentially a scaled blit, and it is only useful for
+ applications which are already using (or can be modified to
+ use) XPutImage. Therefore, a more general API will be
+ discussed as another possibility.
+ </para>
+ <para>
+ X applications typically create windows with the
+ XCreateWindow call. A new extension could provide an
+ XCreateScaledWindow call that could be used in place of the
+ XCreateWindow call and be otherwise transparent to the
+ application. This would allow applications, even those that
+ do not depend on XPutImage, to take advantage of window
+ scaling. In this section we describe how the call would
+ work, what transparency it provides, and how to solve the
+ potential problems that transparency creates.
+ </para>
+ <sect3><title>XCreateWindow</title>
+ <para>
+ The XCreateWindow call takes width and height as
+ parameters. An XCreateScaledWindow call could take all
+ the same parameters, with the addition of a scaling factor.
+ </para>
+ </sect3>
+ <sect3><title>XSetWindowAttributes</title>
+ <para>
+ An X11 window has several attributes that would have to be
+ scaled:
+ <itemizedlist>
+ <listitem><para>Background and border pixmaps</para></listitem>
+ <listitem><para>Border width</para></listitem>
+ <listitem><para>Cursor</para></listitem>
+ </itemizedlist>
+ </para>
+ </sect3>
+ <sect3><title>XGetWindowAttributes, XGetGeometry</title>
+ <para>
+ For transparency, calls that query the window attributes
+ should return unscaled information. This suggests that
+ all unscaled pixmaps and window attributes should be
+ cached.
+ </para>
+ <para>
+ Unfortunately, a window manager requires the scaled
+ geometry to properly decorate the window. The X server
+ can probably determine which client is acting as the
+ window manager (e.g., because that client will select
+ events that are used exclusively by the window manager).
+ However, other Scaled Window Extension aware clients may
+ also need to determine the scaled geometry. Therefore, at
+ least two additional extension calls should be
+ implemented: XGetScaledWindowAttributes and
+ XGetScaledGeometry.
+ </para>
+ </sect3>
+ <sect3><title>Popup and Child window positions</title>
+ <para>
+ Some applications may position popup and child windows
+ based on an unscaled notion of the main window geometry.
+ In this case, additional modifications to the client would
+ be required.
+ </para>
+ </sect3>
+ <sect3><title>Events</title>
+ <para>
+ Most events (e.g., for mouse motion) return information
+ about the coordinates at which the even occurred. These
+ coordinates would have to be modified so that unscaled
+ values were presented to the client.
+ </para>
+ </sect3>
+ <sect3><title>Implementation</title>
+ <para>
+ There are many implementation issues, some of which are
+ similar to the issues involved in implementing the X Video
+ Extension for DMX. The window contents must be scaled,
+ either by performing all operations to a frame buffer and
+ then writing the image to the display (perhaps using
+ hardware scaling support), or by modifying all of the
+ various drawing operations to perform scaling. Because of
+ the complexity involved, the frame buffer option is
+ recommended.
+ </para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1><title>Conclusion and Recommendations
+ </title><para>
+ We recommend a three phase implementation strategy, based on
+ how an application could be written to take advantage of
+ scaling:
+ <orderedlist>
+ <listitem>
+ <para>
+ The XCopyAreaScaled extension should be implemented, since
+ this is the ideal solution for applications like VNC, and
+ since making use of this extension will require minimal
+ changes to applications that already use XPutImage or
+ XCopyArea.
+ </para>
+ <para>
+ The initial implementation work would include the design
+ of the X protocol extension, writing this up in the
+ usual format for extension documentation, implementation
+ of the protocol transport pieces in XFree86,
+ implementation of a software fall-back in XFree86 and
+ DMX, one example hardware implementation for XFree86,
+ and implementation of support for this extension in DMX.
+ </para>
+ <para>
+ We suggest implementing the extension first on the ATI
+ Radeon cards. However, since these cards do not provide
+ a 2D scaled blit primitive, the implementation would
+ have to make use of the 3D texture engine to emulate a
+ scaled blit. This is recommended, since other modern
+ graphics cards also do not provide a simple 2D scaled
+ blit operation and an example of the more difficult
+ implementation pathway would be helpful to others.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Until XCopyAreaScaled is widely supported, applications
+ that require scaling will have to fall back to another
+ scaling method. We suggest OpenGL as the first fall-back
+ method because it is widely available and supported by
+ DMX.
+ </para>
+ <para>
+ A project centered around OpenGL-based scaling would
+ implement this scaling in VNC as an example. This work
+ would include re-writing the <command>vncviewer</command>
+ rendering engine to cache a master copy of the desktop
+ image for all operations.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Since OpenGL is not implemented everywhere, and may not
+ provide hardware-assisted performance in every
+ implementation, an application that requires scaling
+ should also fall back to using the X Video Extension.
+ </para>
+ <para>
+ This project would add support for the X Video Extension
+ to DMX and would add support to VNC to take advantage of
+ this extension without introducing artifacts. This
+ would require modifying the <command>vncviewer</command> rendering
+ engine to cache a master copy of the desktop image for
+ all operations. This project should also add support
+ for the RGB format to at least one XFree86 driver (e.g.,
+ ATI Radeon).
+ </para>
+ <para>
+ The X Video Extension is one of the few popular
+ extensions that DMX does not support. We recommend
+ implementing the X Video Extension even if scaling is
+ the specific goal of that work.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ <para>
+ We do <emphasis>not</emphasis> recommend implementation of the
+ XCreateScaledWindow extension because of the complexity
+ involved. We do <emphasis>not</emphasis> recommend implementation of the
+ XPutImageScaled extension because it requires the same amount
+ of work as the XCopyAreaScaled extension, but provides less
+ functionality. Further, server-side scaling with a large
+ frame buffer is <emphasis>not</emphasis> recommended because of the
+ performance implications.
+ </para>
+ <para>
+ The back-end scaling, especially with disconnect/reconnect
+ support should be explored in the future after
+ disconnect/reconnect is implemented, but not at the present
+ time.
+ </para>
+ </sect1>
+
+ </article>
+ <!-- Local Variables: -->
+ <!-- fill-column: 72 -->
+ <!-- End: -->
diff --git a/hw/dmx/examples/Makefile.am b/hw/dmx/examples/Makefile.am
new file mode 100644
index 0000000..229bb57
--- /dev/null
+++ b/hw/dmx/examples/Makefile.am
@@ -0,0 +1,70 @@
+if DMX_BUILD_USB
+# Requires <linux/input.h>
+EV_PROG = ev
+endif
+
+bin_PROGRAMS = \
+ dmxinfo dmxwininfo dmxreconfig dmxresize \
+ dmxaddscreen dmxrmscreen \
+ dmxaddinput dmxrminput
+noinst_PROGRAMS = xinput xtest evi res xled xbell $(EV_PROG)
+
+dmxinfo_SOURCES = dmxinfo.c
+dmxinfo_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxinfo_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+dmxwininfo_SOURCES = dmxwininfo.c
+dmxwininfo_LDADD = @DMXXMUEXAMPLES_DEP_LIBS@
+dmxwininfo_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+
+dmxreconfig_SOURCES = dmxreconfig.c
+dmxreconfig_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxreconfig_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+dmxresize_SOURCES = dmxresize.c
+dmxresize_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxresize_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+dmxaddscreen_SOURCES = dmxaddscreen.c
+dmxaddscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxaddscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+dmxrmscreen_SOURCES = dmxrmscreen.c
+dmxrmscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxrmscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+dmxaddinput_SOURCES = dmxaddinput.c
+dmxaddinput_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxaddinput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+dmxrminput_SOURCES = dmxrminput.c
+dmxrminput_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxrminput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+
+xinput_SOURCES = xinput.c
+xinput_LDADD = @DMXXIEXAMPLES_DEP_LIBS@
+xinput_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+
+xtest_SOURCES = xtest.c
+xtest_LDADD = @XTSTEXAMPLES_DEP_LIBS@
+xtest_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+
+evi_SOURCES = evi.c
+evi_LDADD = @X11EXAMPLES_DEP_LIBS@
+evi_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+
+res_SOURCES = res.c
+res_LDADD = @XRESEXAMPLES_DEP_LIBS@
+res_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+
+xled_SOURCES = xled.c
+xled_LDADD = @X11EXAMPLES_DEP_LIBS@
+xled_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+
+xbell_SOURCES = xbell.c
+xbell_LDADD = @X11EXAMPLES_DEP_LIBS@
+xbell_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+
+ev_SOURCES = ev.c
+ev_LDADD =
+ev_CFLAGS =
diff --git a/hw/dmx/examples/Makefile.in b/hw/dmx/examples/Makefile.in
new file mode 100644
index 0000000..2a2eda7
--- /dev/null
+++ b/hw/dmx/examples/Makefile.in
@@ -0,0 +1,1190 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = dmxinfo$(EXEEXT) dmxwininfo$(EXEEXT) \
+ dmxreconfig$(EXEEXT) dmxresize$(EXEEXT) dmxaddscreen$(EXEEXT) \
+ dmxrmscreen$(EXEEXT) dmxaddinput$(EXEEXT) dmxrminput$(EXEEXT)
+noinst_PROGRAMS = xinput$(EXEEXT) xtest$(EXEEXT) evi$(EXEEXT) \
+ res$(EXEEXT) xled$(EXEEXT) xbell$(EXEEXT) $(am__EXEEXT_1)
+subdir = hw/dmx/examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+@DMX_BUILD_USB_TRUE@am__EXEEXT_1 = ev$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
+am_dmxaddinput_OBJECTS = dmxaddinput-dmxaddinput.$(OBJEXT)
+dmxaddinput_OBJECTS = $(am_dmxaddinput_OBJECTS)
+dmxaddinput_DEPENDENCIES =
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+dmxaddinput_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxaddinput_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxaddscreen_OBJECTS = dmxaddscreen-dmxaddscreen.$(OBJEXT)
+dmxaddscreen_OBJECTS = $(am_dmxaddscreen_OBJECTS)
+dmxaddscreen_DEPENDENCIES =
+dmxaddscreen_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxaddscreen_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxinfo_OBJECTS = dmxinfo-dmxinfo.$(OBJEXT)
+dmxinfo_OBJECTS = $(am_dmxinfo_OBJECTS)
+dmxinfo_DEPENDENCIES =
+dmxinfo_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxinfo_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxreconfig_OBJECTS = dmxreconfig-dmxreconfig.$(OBJEXT)
+dmxreconfig_OBJECTS = $(am_dmxreconfig_OBJECTS)
+dmxreconfig_DEPENDENCIES =
+dmxreconfig_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxreconfig_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxresize_OBJECTS = dmxresize-dmxresize.$(OBJEXT)
+dmxresize_OBJECTS = $(am_dmxresize_OBJECTS)
+dmxresize_DEPENDENCIES =
+dmxresize_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxresize_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxrminput_OBJECTS = dmxrminput-dmxrminput.$(OBJEXT)
+dmxrminput_OBJECTS = $(am_dmxrminput_OBJECTS)
+dmxrminput_DEPENDENCIES =
+dmxrminput_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxrminput_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxrmscreen_OBJECTS = dmxrmscreen-dmxrmscreen.$(OBJEXT)
+dmxrmscreen_OBJECTS = $(am_dmxrmscreen_OBJECTS)
+dmxrmscreen_DEPENDENCIES =
+dmxrmscreen_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxrmscreen_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_dmxwininfo_OBJECTS = dmxwininfo-dmxwininfo.$(OBJEXT)
+dmxwininfo_OBJECTS = $(am_dmxwininfo_OBJECTS)
+dmxwininfo_DEPENDENCIES =
+dmxwininfo_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(dmxwininfo_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_ev_OBJECTS = ev-ev.$(OBJEXT)
+ev_OBJECTS = $(am_ev_OBJECTS)
+ev_DEPENDENCIES =
+ev_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ev_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_evi_OBJECTS = evi-evi.$(OBJEXT)
+evi_OBJECTS = $(am_evi_OBJECTS)
+evi_DEPENDENCIES =
+evi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(evi_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_res_OBJECTS = res-res.$(OBJEXT)
+res_OBJECTS = $(am_res_OBJECTS)
+res_DEPENDENCIES =
+res_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(res_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_xbell_OBJECTS = xbell-xbell.$(OBJEXT)
+xbell_OBJECTS = $(am_xbell_OBJECTS)
+xbell_DEPENDENCIES =
+xbell_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xbell_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_xinput_OBJECTS = xinput-xinput.$(OBJEXT)
+xinput_OBJECTS = $(am_xinput_OBJECTS)
+xinput_DEPENDENCIES =
+xinput_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xinput_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_xled_OBJECTS = xled-xled.$(OBJEXT)
+xled_OBJECTS = $(am_xled_OBJECTS)
+xled_DEPENDENCIES =
+xled_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xled_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_xtest_OBJECTS = xtest-xtest.$(OBJEXT)
+xtest_OBJECTS = $(am_xtest_OBJECTS)
+xtest_DEPENDENCIES =
+xtest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xtest_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(dmxaddinput_SOURCES) $(dmxaddscreen_SOURCES) \
+ $(dmxinfo_SOURCES) $(dmxreconfig_SOURCES) $(dmxresize_SOURCES) \
+ $(dmxrminput_SOURCES) $(dmxrmscreen_SOURCES) \
+ $(dmxwininfo_SOURCES) $(ev_SOURCES) $(evi_SOURCES) \
+ $(res_SOURCES) $(xbell_SOURCES) $(xinput_SOURCES) \
+ $(xled_SOURCES) $(xtest_SOURCES)
+DIST_SOURCES = $(dmxaddinput_SOURCES) $(dmxaddscreen_SOURCES) \
+ $(dmxinfo_SOURCES) $(dmxreconfig_SOURCES) $(dmxresize_SOURCES) \
+ $(dmxrminput_SOURCES) $(dmxrmscreen_SOURCES) \
+ $(dmxwininfo_SOURCES) $(ev_SOURCES) $(evi_SOURCES) \
+ $(res_SOURCES) $(xbell_SOURCES) $(xinput_SOURCES) \
+ $(xled_SOURCES) $(xtest_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+# Requires <linux/input.h>
+@DMX_BUILD_USB_TRUE@EV_PROG = ev
+dmxinfo_SOURCES = dmxinfo.c
+dmxinfo_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxinfo_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+dmxwininfo_SOURCES = dmxwininfo.c
+dmxwininfo_LDADD = @DMXXMUEXAMPLES_DEP_LIBS@
+dmxwininfo_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+dmxreconfig_SOURCES = dmxreconfig.c
+dmxreconfig_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxreconfig_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+dmxresize_SOURCES = dmxresize.c
+dmxresize_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxresize_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+dmxaddscreen_SOURCES = dmxaddscreen.c
+dmxaddscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxaddscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+dmxrmscreen_SOURCES = dmxrmscreen.c
+dmxrmscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxrmscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+dmxaddinput_SOURCES = dmxaddinput.c
+dmxaddinput_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxaddinput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+dmxrminput_SOURCES = dmxrminput.c
+dmxrminput_LDADD = @DMXEXAMPLES_DEP_LIBS@
+dmxrminput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+xinput_SOURCES = xinput.c
+xinput_LDADD = @DMXXIEXAMPLES_DEP_LIBS@
+xinput_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+xtest_SOURCES = xtest.c
+xtest_LDADD = @XTSTEXAMPLES_DEP_LIBS@
+xtest_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+evi_SOURCES = evi.c
+evi_LDADD = @X11EXAMPLES_DEP_LIBS@
+evi_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+res_SOURCES = res.c
+res_LDADD = @XRESEXAMPLES_DEP_LIBS@
+res_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+xled_SOURCES = xled.c
+xled_LDADD = @X11EXAMPLES_DEP_LIBS@
+xled_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+xbell_SOURCES = xbell.c
+xbell_LDADD = @X11EXAMPLES_DEP_LIBS@
+xbell_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+ev_SOURCES = ev.c
+ev_LDADD =
+ev_CFLAGS =
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/examples/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+dmxaddinput$(EXEEXT): $(dmxaddinput_OBJECTS) $(dmxaddinput_DEPENDENCIES)
+ @rm -f dmxaddinput$(EXEEXT)
+ $(AM_V_CCLD)$(dmxaddinput_LINK) $(dmxaddinput_OBJECTS) $(dmxaddinput_LDADD) $(LIBS)
+dmxaddscreen$(EXEEXT): $(dmxaddscreen_OBJECTS) $(dmxaddscreen_DEPENDENCIES)
+ @rm -f dmxaddscreen$(EXEEXT)
+ $(AM_V_CCLD)$(dmxaddscreen_LINK) $(dmxaddscreen_OBJECTS) $(dmxaddscreen_LDADD) $(LIBS)
+dmxinfo$(EXEEXT): $(dmxinfo_OBJECTS) $(dmxinfo_DEPENDENCIES)
+ @rm -f dmxinfo$(EXEEXT)
+ $(AM_V_CCLD)$(dmxinfo_LINK) $(dmxinfo_OBJECTS) $(dmxinfo_LDADD) $(LIBS)
+dmxreconfig$(EXEEXT): $(dmxreconfig_OBJECTS) $(dmxreconfig_DEPENDENCIES)
+ @rm -f dmxreconfig$(EXEEXT)
+ $(AM_V_CCLD)$(dmxreconfig_LINK) $(dmxreconfig_OBJECTS) $(dmxreconfig_LDADD) $(LIBS)
+dmxresize$(EXEEXT): $(dmxresize_OBJECTS) $(dmxresize_DEPENDENCIES)
+ @rm -f dmxresize$(EXEEXT)
+ $(AM_V_CCLD)$(dmxresize_LINK) $(dmxresize_OBJECTS) $(dmxresize_LDADD) $(LIBS)
+dmxrminput$(EXEEXT): $(dmxrminput_OBJECTS) $(dmxrminput_DEPENDENCIES)
+ @rm -f dmxrminput$(EXEEXT)
+ $(AM_V_CCLD)$(dmxrminput_LINK) $(dmxrminput_OBJECTS) $(dmxrminput_LDADD) $(LIBS)
+dmxrmscreen$(EXEEXT): $(dmxrmscreen_OBJECTS) $(dmxrmscreen_DEPENDENCIES)
+ @rm -f dmxrmscreen$(EXEEXT)
+ $(AM_V_CCLD)$(dmxrmscreen_LINK) $(dmxrmscreen_OBJECTS) $(dmxrmscreen_LDADD) $(LIBS)
+dmxwininfo$(EXEEXT): $(dmxwininfo_OBJECTS) $(dmxwininfo_DEPENDENCIES)
+ @rm -f dmxwininfo$(EXEEXT)
+ $(AM_V_CCLD)$(dmxwininfo_LINK) $(dmxwininfo_OBJECTS) $(dmxwininfo_LDADD) $(LIBS)
+ev$(EXEEXT): $(ev_OBJECTS) $(ev_DEPENDENCIES)
+ @rm -f ev$(EXEEXT)
+ $(AM_V_CCLD)$(ev_LINK) $(ev_OBJECTS) $(ev_LDADD) $(LIBS)
+evi$(EXEEXT): $(evi_OBJECTS) $(evi_DEPENDENCIES)
+ @rm -f evi$(EXEEXT)
+ $(AM_V_CCLD)$(evi_LINK) $(evi_OBJECTS) $(evi_LDADD) $(LIBS)
+res$(EXEEXT): $(res_OBJECTS) $(res_DEPENDENCIES)
+ @rm -f res$(EXEEXT)
+ $(AM_V_CCLD)$(res_LINK) $(res_OBJECTS) $(res_LDADD) $(LIBS)
+xbell$(EXEEXT): $(xbell_OBJECTS) $(xbell_DEPENDENCIES)
+ @rm -f xbell$(EXEEXT)
+ $(AM_V_CCLD)$(xbell_LINK) $(xbell_OBJECTS) $(xbell_LDADD) $(LIBS)
+xinput$(EXEEXT): $(xinput_OBJECTS) $(xinput_DEPENDENCIES)
+ @rm -f xinput$(EXEEXT)
+ $(AM_V_CCLD)$(xinput_LINK) $(xinput_OBJECTS) $(xinput_LDADD) $(LIBS)
+xled$(EXEEXT): $(xled_OBJECTS) $(xled_DEPENDENCIES)
+ @rm -f xled$(EXEEXT)
+ $(AM_V_CCLD)$(xled_LINK) $(xled_OBJECTS) $(xled_LDADD) $(LIBS)
+xtest$(EXEEXT): $(xtest_OBJECTS) $(xtest_DEPENDENCIES)
+ @rm -f xtest$(EXEEXT)
+ $(AM_V_CCLD)$(xtest_LINK) $(xtest_OBJECTS) $(xtest_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxaddinput-dmxaddinput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxaddscreen-dmxaddscreen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxinfo-dmxinfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxreconfig-dmxreconfig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxresize-dmxresize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxrminput-dmxrminput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxrmscreen-dmxrmscreen.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxwininfo-dmxwininfo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ev-ev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evi-evi.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/res-res.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xbell-xbell.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xinput-xinput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xled-xled.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtest-xtest.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+dmxaddinput-dmxaddinput.o: dmxaddinput.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddinput_CFLAGS) $(CFLAGS) -MT dmxaddinput-dmxaddinput.o -MD -MP -MF $(DEPDIR)/dmxaddinput-dmxaddinput.Tpo -c -o dmxaddinput-dmxaddinput.o `test -f 'dmxaddinput.c' || echo '$(srcdir)/'`dmxaddinput.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxaddinput-dmxaddinput.Tpo $(DEPDIR)/dmxaddinput-dmxaddinput.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxaddinput.c' object='dmxaddinput-dmxaddinput.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddinput_CFLAGS) $(CFLAGS) -c -o dmxaddinput-dmxaddinput.o `test -f 'dmxaddinput.c' || echo '$(srcdir)/'`dmxaddinput.c
+
+dmxaddinput-dmxaddinput.obj: dmxaddinput.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddinput_CFLAGS) $(CFLAGS) -MT dmxaddinput-dmxaddinput.obj -MD -MP -MF $(DEPDIR)/dmxaddinput-dmxaddinput.Tpo -c -o dmxaddinput-dmxaddinput.obj `if test -f 'dmxaddinput.c'; then $(CYGPATH_W) 'dmxaddinput.c'; else $(CYGPATH_W) '$(srcdir)/dmxaddinput.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxaddinput-dmxaddinput.Tpo $(DEPDIR)/dmxaddinput-dmxaddinput.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxaddinput.c' object='dmxaddinput-dmxaddinput.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddinput_CFLAGS) $(CFLAGS) -c -o dmxaddinput-dmxaddinput.obj `if test -f 'dmxaddinput.c'; then $(CYGPATH_W) 'dmxaddinput.c'; else $(CYGPATH_W) '$(srcdir)/dmxaddinput.c'; fi`
+
+dmxaddscreen-dmxaddscreen.o: dmxaddscreen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddscreen_CFLAGS) $(CFLAGS) -MT dmxaddscreen-dmxaddscreen.o -MD -MP -MF $(DEPDIR)/dmxaddscreen-dmxaddscreen.Tpo -c -o dmxaddscreen-dmxaddscreen.o `test -f 'dmxaddscreen.c' || echo '$(srcdir)/'`dmxaddscreen.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxaddscreen-dmxaddscreen.Tpo $(DEPDIR)/dmxaddscreen-dmxaddscreen.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxaddscreen.c' object='dmxaddscreen-dmxaddscreen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddscreen_CFLAGS) $(CFLAGS) -c -o dmxaddscreen-dmxaddscreen.o `test -f 'dmxaddscreen.c' || echo '$(srcdir)/'`dmxaddscreen.c
+
+dmxaddscreen-dmxaddscreen.obj: dmxaddscreen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddscreen_CFLAGS) $(CFLAGS) -MT dmxaddscreen-dmxaddscreen.obj -MD -MP -MF $(DEPDIR)/dmxaddscreen-dmxaddscreen.Tpo -c -o dmxaddscreen-dmxaddscreen.obj `if test -f 'dmxaddscreen.c'; then $(CYGPATH_W) 'dmxaddscreen.c'; else $(CYGPATH_W) '$(srcdir)/dmxaddscreen.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxaddscreen-dmxaddscreen.Tpo $(DEPDIR)/dmxaddscreen-dmxaddscreen.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxaddscreen.c' object='dmxaddscreen-dmxaddscreen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxaddscreen_CFLAGS) $(CFLAGS) -c -o dmxaddscreen-dmxaddscreen.obj `if test -f 'dmxaddscreen.c'; then $(CYGPATH_W) 'dmxaddscreen.c'; else $(CYGPATH_W) '$(srcdir)/dmxaddscreen.c'; fi`
+
+dmxinfo-dmxinfo.o: dmxinfo.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxinfo_CFLAGS) $(CFLAGS) -MT dmxinfo-dmxinfo.o -MD -MP -MF $(DEPDIR)/dmxinfo-dmxinfo.Tpo -c -o dmxinfo-dmxinfo.o `test -f 'dmxinfo.c' || echo '$(srcdir)/'`dmxinfo.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxinfo-dmxinfo.Tpo $(DEPDIR)/dmxinfo-dmxinfo.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxinfo.c' object='dmxinfo-dmxinfo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxinfo_CFLAGS) $(CFLAGS) -c -o dmxinfo-dmxinfo.o `test -f 'dmxinfo.c' || echo '$(srcdir)/'`dmxinfo.c
+
+dmxinfo-dmxinfo.obj: dmxinfo.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxinfo_CFLAGS) $(CFLAGS) -MT dmxinfo-dmxinfo.obj -MD -MP -MF $(DEPDIR)/dmxinfo-dmxinfo.Tpo -c -o dmxinfo-dmxinfo.obj `if test -f 'dmxinfo.c'; then $(CYGPATH_W) 'dmxinfo.c'; else $(CYGPATH_W) '$(srcdir)/dmxinfo.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxinfo-dmxinfo.Tpo $(DEPDIR)/dmxinfo-dmxinfo.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxinfo.c' object='dmxinfo-dmxinfo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxinfo_CFLAGS) $(CFLAGS) -c -o dmxinfo-dmxinfo.obj `if test -f 'dmxinfo.c'; then $(CYGPATH_W) 'dmxinfo.c'; else $(CYGPATH_W) '$(srcdir)/dmxinfo.c'; fi`
+
+dmxreconfig-dmxreconfig.o: dmxreconfig.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxreconfig_CFLAGS) $(CFLAGS) -MT dmxreconfig-dmxreconfig.o -MD -MP -MF $(DEPDIR)/dmxreconfig-dmxreconfig.Tpo -c -o dmxreconfig-dmxreconfig.o `test -f 'dmxreconfig.c' || echo '$(srcdir)/'`dmxreconfig.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxreconfig-dmxreconfig.Tpo $(DEPDIR)/dmxreconfig-dmxreconfig.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxreconfig.c' object='dmxreconfig-dmxreconfig.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxreconfig_CFLAGS) $(CFLAGS) -c -o dmxreconfig-dmxreconfig.o `test -f 'dmxreconfig.c' || echo '$(srcdir)/'`dmxreconfig.c
+
+dmxreconfig-dmxreconfig.obj: dmxreconfig.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxreconfig_CFLAGS) $(CFLAGS) -MT dmxreconfig-dmxreconfig.obj -MD -MP -MF $(DEPDIR)/dmxreconfig-dmxreconfig.Tpo -c -o dmxreconfig-dmxreconfig.obj `if test -f 'dmxreconfig.c'; then $(CYGPATH_W) 'dmxreconfig.c'; else $(CYGPATH_W) '$(srcdir)/dmxreconfig.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxreconfig-dmxreconfig.Tpo $(DEPDIR)/dmxreconfig-dmxreconfig.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxreconfig.c' object='dmxreconfig-dmxreconfig.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxreconfig_CFLAGS) $(CFLAGS) -c -o dmxreconfig-dmxreconfig.obj `if test -f 'dmxreconfig.c'; then $(CYGPATH_W) 'dmxreconfig.c'; else $(CYGPATH_W) '$(srcdir)/dmxreconfig.c'; fi`
+
+dmxresize-dmxresize.o: dmxresize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxresize_CFLAGS) $(CFLAGS) -MT dmxresize-dmxresize.o -MD -MP -MF $(DEPDIR)/dmxresize-dmxresize.Tpo -c -o dmxresize-dmxresize.o `test -f 'dmxresize.c' || echo '$(srcdir)/'`dmxresize.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxresize-dmxresize.Tpo $(DEPDIR)/dmxresize-dmxresize.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxresize.c' object='dmxresize-dmxresize.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxresize_CFLAGS) $(CFLAGS) -c -o dmxresize-dmxresize.o `test -f 'dmxresize.c' || echo '$(srcdir)/'`dmxresize.c
+
+dmxresize-dmxresize.obj: dmxresize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxresize_CFLAGS) $(CFLAGS) -MT dmxresize-dmxresize.obj -MD -MP -MF $(DEPDIR)/dmxresize-dmxresize.Tpo -c -o dmxresize-dmxresize.obj `if test -f 'dmxresize.c'; then $(CYGPATH_W) 'dmxresize.c'; else $(CYGPATH_W) '$(srcdir)/dmxresize.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxresize-dmxresize.Tpo $(DEPDIR)/dmxresize-dmxresize.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxresize.c' object='dmxresize-dmxresize.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxresize_CFLAGS) $(CFLAGS) -c -o dmxresize-dmxresize.obj `if test -f 'dmxresize.c'; then $(CYGPATH_W) 'dmxresize.c'; else $(CYGPATH_W) '$(srcdir)/dmxresize.c'; fi`
+
+dmxrminput-dmxrminput.o: dmxrminput.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrminput_CFLAGS) $(CFLAGS) -MT dmxrminput-dmxrminput.o -MD -MP -MF $(DEPDIR)/dmxrminput-dmxrminput.Tpo -c -o dmxrminput-dmxrminput.o `test -f 'dmxrminput.c' || echo '$(srcdir)/'`dmxrminput.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxrminput-dmxrminput.Tpo $(DEPDIR)/dmxrminput-dmxrminput.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxrminput.c' object='dmxrminput-dmxrminput.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrminput_CFLAGS) $(CFLAGS) -c -o dmxrminput-dmxrminput.o `test -f 'dmxrminput.c' || echo '$(srcdir)/'`dmxrminput.c
+
+dmxrminput-dmxrminput.obj: dmxrminput.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrminput_CFLAGS) $(CFLAGS) -MT dmxrminput-dmxrminput.obj -MD -MP -MF $(DEPDIR)/dmxrminput-dmxrminput.Tpo -c -o dmxrminput-dmxrminput.obj `if test -f 'dmxrminput.c'; then $(CYGPATH_W) 'dmxrminput.c'; else $(CYGPATH_W) '$(srcdir)/dmxrminput.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxrminput-dmxrminput.Tpo $(DEPDIR)/dmxrminput-dmxrminput.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxrminput.c' object='dmxrminput-dmxrminput.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrminput_CFLAGS) $(CFLAGS) -c -o dmxrminput-dmxrminput.obj `if test -f 'dmxrminput.c'; then $(CYGPATH_W) 'dmxrminput.c'; else $(CYGPATH_W) '$(srcdir)/dmxrminput.c'; fi`
+
+dmxrmscreen-dmxrmscreen.o: dmxrmscreen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrmscreen_CFLAGS) $(CFLAGS) -MT dmxrmscreen-dmxrmscreen.o -MD -MP -MF $(DEPDIR)/dmxrmscreen-dmxrmscreen.Tpo -c -o dmxrmscreen-dmxrmscreen.o `test -f 'dmxrmscreen.c' || echo '$(srcdir)/'`dmxrmscreen.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxrmscreen-dmxrmscreen.Tpo $(DEPDIR)/dmxrmscreen-dmxrmscreen.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxrmscreen.c' object='dmxrmscreen-dmxrmscreen.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrmscreen_CFLAGS) $(CFLAGS) -c -o dmxrmscreen-dmxrmscreen.o `test -f 'dmxrmscreen.c' || echo '$(srcdir)/'`dmxrmscreen.c
+
+dmxrmscreen-dmxrmscreen.obj: dmxrmscreen.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrmscreen_CFLAGS) $(CFLAGS) -MT dmxrmscreen-dmxrmscreen.obj -MD -MP -MF $(DEPDIR)/dmxrmscreen-dmxrmscreen.Tpo -c -o dmxrmscreen-dmxrmscreen.obj `if test -f 'dmxrmscreen.c'; then $(CYGPATH_W) 'dmxrmscreen.c'; else $(CYGPATH_W) '$(srcdir)/dmxrmscreen.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxrmscreen-dmxrmscreen.Tpo $(DEPDIR)/dmxrmscreen-dmxrmscreen.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxrmscreen.c' object='dmxrmscreen-dmxrmscreen.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxrmscreen_CFLAGS) $(CFLAGS) -c -o dmxrmscreen-dmxrmscreen.obj `if test -f 'dmxrmscreen.c'; then $(CYGPATH_W) 'dmxrmscreen.c'; else $(CYGPATH_W) '$(srcdir)/dmxrmscreen.c'; fi`
+
+dmxwininfo-dmxwininfo.o: dmxwininfo.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxwininfo_CFLAGS) $(CFLAGS) -MT dmxwininfo-dmxwininfo.o -MD -MP -MF $(DEPDIR)/dmxwininfo-dmxwininfo.Tpo -c -o dmxwininfo-dmxwininfo.o `test -f 'dmxwininfo.c' || echo '$(srcdir)/'`dmxwininfo.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxwininfo-dmxwininfo.Tpo $(DEPDIR)/dmxwininfo-dmxwininfo.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxwininfo.c' object='dmxwininfo-dmxwininfo.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxwininfo_CFLAGS) $(CFLAGS) -c -o dmxwininfo-dmxwininfo.o `test -f 'dmxwininfo.c' || echo '$(srcdir)/'`dmxwininfo.c
+
+dmxwininfo-dmxwininfo.obj: dmxwininfo.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxwininfo_CFLAGS) $(CFLAGS) -MT dmxwininfo-dmxwininfo.obj -MD -MP -MF $(DEPDIR)/dmxwininfo-dmxwininfo.Tpo -c -o dmxwininfo-dmxwininfo.obj `if test -f 'dmxwininfo.c'; then $(CYGPATH_W) 'dmxwininfo.c'; else $(CYGPATH_W) '$(srcdir)/dmxwininfo.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/dmxwininfo-dmxwininfo.Tpo $(DEPDIR)/dmxwininfo-dmxwininfo.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dmxwininfo.c' object='dmxwininfo-dmxwininfo.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(dmxwininfo_CFLAGS) $(CFLAGS) -c -o dmxwininfo-dmxwininfo.obj `if test -f 'dmxwininfo.c'; then $(CYGPATH_W) 'dmxwininfo.c'; else $(CYGPATH_W) '$(srcdir)/dmxwininfo.c'; fi`
+
+ev-ev.o: ev.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ev_CFLAGS) $(CFLAGS) -MT ev-ev.o -MD -MP -MF $(DEPDIR)/ev-ev.Tpo -c -o ev-ev.o `test -f 'ev.c' || echo '$(srcdir)/'`ev.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ev-ev.Tpo $(DEPDIR)/ev-ev.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ev.c' object='ev-ev.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ev_CFLAGS) $(CFLAGS) -c -o ev-ev.o `test -f 'ev.c' || echo '$(srcdir)/'`ev.c
+
+ev-ev.obj: ev.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ev_CFLAGS) $(CFLAGS) -MT ev-ev.obj -MD -MP -MF $(DEPDIR)/ev-ev.Tpo -c -o ev-ev.obj `if test -f 'ev.c'; then $(CYGPATH_W) 'ev.c'; else $(CYGPATH_W) '$(srcdir)/ev.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ev-ev.Tpo $(DEPDIR)/ev-ev.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ev.c' object='ev-ev.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ev_CFLAGS) $(CFLAGS) -c -o ev-ev.obj `if test -f 'ev.c'; then $(CYGPATH_W) 'ev.c'; else $(CYGPATH_W) '$(srcdir)/ev.c'; fi`
+
+evi-evi.o: evi.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(evi_CFLAGS) $(CFLAGS) -MT evi-evi.o -MD -MP -MF $(DEPDIR)/evi-evi.Tpo -c -o evi-evi.o `test -f 'evi.c' || echo '$(srcdir)/'`evi.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/evi-evi.Tpo $(DEPDIR)/evi-evi.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evi.c' object='evi-evi.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(evi_CFLAGS) $(CFLAGS) -c -o evi-evi.o `test -f 'evi.c' || echo '$(srcdir)/'`evi.c
+
+evi-evi.obj: evi.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(evi_CFLAGS) $(CFLAGS) -MT evi-evi.obj -MD -MP -MF $(DEPDIR)/evi-evi.Tpo -c -o evi-evi.obj `if test -f 'evi.c'; then $(CYGPATH_W) 'evi.c'; else $(CYGPATH_W) '$(srcdir)/evi.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/evi-evi.Tpo $(DEPDIR)/evi-evi.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='evi.c' object='evi-evi.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(evi_CFLAGS) $(CFLAGS) -c -o evi-evi.obj `if test -f 'evi.c'; then $(CYGPATH_W) 'evi.c'; else $(CYGPATH_W) '$(srcdir)/evi.c'; fi`
+
+res-res.o: res.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(res_CFLAGS) $(CFLAGS) -MT res-res.o -MD -MP -MF $(DEPDIR)/res-res.Tpo -c -o res-res.o `test -f 'res.c' || echo '$(srcdir)/'`res.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/res-res.Tpo $(DEPDIR)/res-res.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='res.c' object='res-res.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(res_CFLAGS) $(CFLAGS) -c -o res-res.o `test -f 'res.c' || echo '$(srcdir)/'`res.c
+
+res-res.obj: res.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(res_CFLAGS) $(CFLAGS) -MT res-res.obj -MD -MP -MF $(DEPDIR)/res-res.Tpo -c -o res-res.obj `if test -f 'res.c'; then $(CYGPATH_W) 'res.c'; else $(CYGPATH_W) '$(srcdir)/res.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/res-res.Tpo $(DEPDIR)/res-res.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='res.c' object='res-res.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(res_CFLAGS) $(CFLAGS) -c -o res-res.obj `if test -f 'res.c'; then $(CYGPATH_W) 'res.c'; else $(CYGPATH_W) '$(srcdir)/res.c'; fi`
+
+xbell-xbell.o: xbell.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xbell_CFLAGS) $(CFLAGS) -MT xbell-xbell.o -MD -MP -MF $(DEPDIR)/xbell-xbell.Tpo -c -o xbell-xbell.o `test -f 'xbell.c' || echo '$(srcdir)/'`xbell.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xbell-xbell.Tpo $(DEPDIR)/xbell-xbell.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xbell.c' object='xbell-xbell.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xbell_CFLAGS) $(CFLAGS) -c -o xbell-xbell.o `test -f 'xbell.c' || echo '$(srcdir)/'`xbell.c
+
+xbell-xbell.obj: xbell.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xbell_CFLAGS) $(CFLAGS) -MT xbell-xbell.obj -MD -MP -MF $(DEPDIR)/xbell-xbell.Tpo -c -o xbell-xbell.obj `if test -f 'xbell.c'; then $(CYGPATH_W) 'xbell.c'; else $(CYGPATH_W) '$(srcdir)/xbell.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xbell-xbell.Tpo $(DEPDIR)/xbell-xbell.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xbell.c' object='xbell-xbell.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xbell_CFLAGS) $(CFLAGS) -c -o xbell-xbell.obj `if test -f 'xbell.c'; then $(CYGPATH_W) 'xbell.c'; else $(CYGPATH_W) '$(srcdir)/xbell.c'; fi`
+
+xinput-xinput.o: xinput.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xinput_CFLAGS) $(CFLAGS) -MT xinput-xinput.o -MD -MP -MF $(DEPDIR)/xinput-xinput.Tpo -c -o xinput-xinput.o `test -f 'xinput.c' || echo '$(srcdir)/'`xinput.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xinput-xinput.Tpo $(DEPDIR)/xinput-xinput.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xinput.c' object='xinput-xinput.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xinput_CFLAGS) $(CFLAGS) -c -o xinput-xinput.o `test -f 'xinput.c' || echo '$(srcdir)/'`xinput.c
+
+xinput-xinput.obj: xinput.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xinput_CFLAGS) $(CFLAGS) -MT xinput-xinput.obj -MD -MP -MF $(DEPDIR)/xinput-xinput.Tpo -c -o xinput-xinput.obj `if test -f 'xinput.c'; then $(CYGPATH_W) 'xinput.c'; else $(CYGPATH_W) '$(srcdir)/xinput.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xinput-xinput.Tpo $(DEPDIR)/xinput-xinput.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xinput.c' object='xinput-xinput.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xinput_CFLAGS) $(CFLAGS) -c -o xinput-xinput.obj `if test -f 'xinput.c'; then $(CYGPATH_W) 'xinput.c'; else $(CYGPATH_W) '$(srcdir)/xinput.c'; fi`
+
+xled-xled.o: xled.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xled_CFLAGS) $(CFLAGS) -MT xled-xled.o -MD -MP -MF $(DEPDIR)/xled-xled.Tpo -c -o xled-xled.o `test -f 'xled.c' || echo '$(srcdir)/'`xled.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xled-xled.Tpo $(DEPDIR)/xled-xled.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xled.c' object='xled-xled.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xled_CFLAGS) $(CFLAGS) -c -o xled-xled.o `test -f 'xled.c' || echo '$(srcdir)/'`xled.c
+
+xled-xled.obj: xled.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xled_CFLAGS) $(CFLAGS) -MT xled-xled.obj -MD -MP -MF $(DEPDIR)/xled-xled.Tpo -c -o xled-xled.obj `if test -f 'xled.c'; then $(CYGPATH_W) 'xled.c'; else $(CYGPATH_W) '$(srcdir)/xled.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xled-xled.Tpo $(DEPDIR)/xled-xled.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xled.c' object='xled-xled.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xled_CFLAGS) $(CFLAGS) -c -o xled-xled.obj `if test -f 'xled.c'; then $(CYGPATH_W) 'xled.c'; else $(CYGPATH_W) '$(srcdir)/xled.c'; fi`
+
+xtest-xtest.o: xtest.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtest_CFLAGS) $(CFLAGS) -MT xtest-xtest.o -MD -MP -MF $(DEPDIR)/xtest-xtest.Tpo -c -o xtest-xtest.o `test -f 'xtest.c' || echo '$(srcdir)/'`xtest.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtest-xtest.Tpo $(DEPDIR)/xtest-xtest.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xtest.c' object='xtest-xtest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtest_CFLAGS) $(CFLAGS) -c -o xtest-xtest.o `test -f 'xtest.c' || echo '$(srcdir)/'`xtest.c
+
+xtest-xtest.obj: xtest.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtest_CFLAGS) $(CFLAGS) -MT xtest-xtest.obj -MD -MP -MF $(DEPDIR)/xtest-xtest.Tpo -c -o xtest-xtest.obj `if test -f 'xtest.c'; then $(CYGPATH_W) 'xtest.c'; else $(CYGPATH_W) '$(srcdir)/xtest.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xtest-xtest.Tpo $(DEPDIR)/xtest-xtest.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xtest.c' object='xtest-xtest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xtest_CFLAGS) $(CFLAGS) -c -o xtest-xtest.obj `if test -f 'xtest.c'; then $(CYGPATH_W) 'xtest.c'; else $(CYGPATH_W) '$(srcdir)/xtest.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool \
+ clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libtool clean-noinstPROGRAMS ctags \
+ distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/examples/dmxaddinput.c b/hw/dmx/examples/dmxaddinput.c
new file mode 100644
index 0000000..dcfd4f5
--- /dev/null
+++ b/hw/dmx/examples/dmxaddinput.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2003,2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ int id = -1;
+ int status;
+
+ if (argc != 5) {
+ printf("Usage: %s display c|b name|screen isCore\n", argv[0]);
+ return -1;
+ }
+
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ printf("DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ printf("Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ if (argv[2][0] == 'c') {
+ status = DMXAddConsoleInput(display, argv[3], atoi(argv[4]), &id);
+ } else {
+ status = DMXAddBackendInput(display, atoi(argv[3]), atoi(argv[4]),&id);
+ }
+
+ printf("status = %d, id = %d\n", status, id);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxaddscreen.c b/hw/dmx/examples/dmxaddscreen.c
new file mode 100644
index 0000000..8e60872
--- /dev/null
+++ b/hw/dmx/examples/dmxaddscreen.c
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ int screenNum;
+ DMXScreenAttributes attr;
+ unsigned int mask = 0;
+
+ if (argc != 4 && argc != 14) {
+ printf("Usage: %s display screenNum displayName [scrnx scrny scrnw scrnh rootx rooty rootw rooth originx originy]\n", argv[0]);
+ return -1;
+ }
+
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+
+ screenNum = strtol(argv[2], NULL, 0);
+ if (argc == 14) {
+ mask |= (DMXScreenWindowXoffset |
+ DMXScreenWindowYoffset |
+ DMXScreenWindowWidth |
+ DMXScreenWindowHeight);
+ attr.screenWindowXoffset = strtol(argv[4], NULL, 0);
+ attr.screenWindowYoffset = strtol(argv[5], NULL, 0);
+ attr.screenWindowWidth = strtol(argv[6], NULL, 0);
+ attr.screenWindowHeight = strtol(argv[7], NULL, 0);
+
+ mask |= (DMXRootWindowXoffset |
+ DMXRootWindowYoffset |
+ DMXRootWindowWidth |
+ DMXRootWindowHeight);
+ attr.rootWindowXoffset = strtol(argv[8], NULL, 0);
+ attr.rootWindowYoffset = strtol(argv[9], NULL, 0);
+ attr.rootWindowWidth = strtol(argv[10], NULL, 0);
+ attr.rootWindowHeight = strtol(argv[11], NULL, 0);
+
+ mask |= DMXRootWindowXorigin | DMXRootWindowYorigin;
+ attr.rootWindowXorigin = strtol(argv[12], NULL, 0);
+ attr.rootWindowYorigin = strtol(argv[13], NULL, 0);
+ }
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ printf("DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ printf("Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ if (!DMXAddScreen(display, argv[3], mask, &attr, &screenNum))
+ printf("Failed to add %s as screen #%d\n", argv[2], screenNum);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxinfo.c b/hw/dmx/examples/dmxinfo.c
new file mode 100644
index 0000000..dedce6e
--- /dev/null
+++ b/hw/dmx/examples/dmxinfo.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+static void indent(int level)
+{
+ int i;
+ for (i = 0; i < level; i++) printf(" ");
+}
+
+static void print_window_id(const char *displayName, Display *display,
+ Window window, int level, int child)
+{
+ char *name;
+
+ if (!XFetchName(display, window, &name)) name = NULL;
+ indent(level);
+ if (child) printf("(%d) ", child);
+ printf("%s window 0x%08lx: %s%s\n",
+ displayName,
+ (long unsigned)window,
+ name ? name : "",
+ (window == DefaultRootWindow(display))
+ ? " (DMX root window)" : "");
+ if (name) XFree(name);
+}
+
+static void print_info(Display *display, Window window, int level, int child)
+{
+ DMXWindowAttributes winfo[128];
+ int count;
+ int i;
+
+ if (!DMXGetWindowAttributes(display, window, &count, 128, winfo)) {
+ printf("Could not get window information for 0x%08lx\n",
+ (long unsigned)window);
+ exit(-2);
+ }
+ printf("\n");
+ print_window_id("DMX", display, window, level, child);
+ for (i = 0; i < count; i++) {
+ DMXScreenAttributes sinfo;
+ Display *backend;
+
+ /* This could also be cached -- the information doesn't change. */
+ if (!DMXGetScreenAttributes(display, winfo[i].screen, &sinfo)) {
+ printf("Could not get screen information for screen %d\n", i);
+ exit(-2);
+ }
+ if (!(backend = XOpenDisplay(sinfo.displayName))) {
+ printf("Cannot open backend display %s\n", sinfo.displayName);
+ exit(-2);
+ }
+ XCloseDisplay(backend);
+
+ indent(level+1);
+ printf("%s window 0x%08lx: %dx%d%+d%+d",
+ sinfo.displayName,
+ (long unsigned)winfo[i].window,
+ winfo[i].pos.width, winfo[i].pos.height,
+ winfo[i].pos.x, winfo[i].pos.y);
+ if (!winfo[i].vis.width
+ && !winfo[i].vis.height
+ && !winfo[i].vis.x
+ && !winfo[i].vis.y) printf(" not visible\n");
+ else if (winfo[i].vis.width == winfo[i].pos.width
+ && winfo[i].vis.height == winfo[i].pos.height) {
+ printf( " %+d%+d\n", winfo[i].vis.x, winfo[i].vis.y);
+ } else {
+ printf( " %dx%d%+d%+d\n",
+ winfo[i].vis.width, winfo[i].vis.height,
+ winfo[i].vis.x, winfo[i].vis.y);
+ }
+ }
+}
+
+static void print_tree(Display *display, Window window, int level, int child)
+{
+ Window root, parent;
+ Window *list;
+ unsigned int count;
+ unsigned int i;
+
+ print_info(display, window, level, child);
+
+ if (!XQueryTree(display, window, &root, &parent, &list, &count)) {
+ printf("Cannot query window tree for 0x%08lx\n",
+ (long unsigned)window);
+ exit(-3);
+ }
+
+ if (count) {
+ indent(level+1);
+ printf("%d child%s:\n", count, count > 1 ? "ren" : "");
+ for (i = 0; i < count; i++) {
+ print_tree(display, list[i], level+1, i+1);
+ }
+ }
+}
+
+static const char *core(DMXInputAttributes *iinfo)
+{
+ if (iinfo->isCore) return "core";
+ else if (iinfo->sendsCore) return "extension (sends core)";
+ else return "extension";
+}
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ Window window = 0;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ DMXScreenAttributes sinfo;
+ DMXInputAttributes iinfo;
+ int count;
+ int i;
+
+ if (argc == 2 || argc == 3) {
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+ if (argc == 3) window = strtol(argv[2], NULL, 0);
+ } else {
+ printf("Usage: %s display [windowid]\n", argv[0]);
+ return -1;
+ }
+
+ if (!display && !(display = XOpenDisplay(NULL))) {
+ printf("Cannot open default display\n");
+ return -1;
+ }
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ printf("DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ printf("Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ if (!DMXGetScreenCount(display, &count)) {
+ printf("Could not get screen count\n");
+ return -1;
+ }
+ printf("Screen count = %d\n", count);
+
+ for (i = 0; i < count; i++) {
+ if (!DMXGetScreenAttributes(display, i, &sinfo)) {
+ printf("Could not get screen information for %d\n", i);
+ return -1;
+ }
+ printf("%d: %s %ux%u+%d+%d %d @%dx%d (root: %dx%d%+d%+d)\n",
+ i, sinfo.displayName,
+ sinfo.screenWindowWidth, sinfo.screenWindowHeight,
+ sinfo.screenWindowXoffset, sinfo.screenWindowYoffset,
+ sinfo.logicalScreen,
+ sinfo.rootWindowXorigin, sinfo.rootWindowYorigin,
+ sinfo.rootWindowWidth, sinfo.rootWindowHeight,
+ sinfo.rootWindowXoffset, sinfo.rootWindowYoffset);
+ }
+
+ if (major_version == 1 && minor_version >= 1) {
+ if (!DMXGetInputCount(display, &count)) {
+ printf("Could not get input count\n");
+ return -1;
+ }
+ printf("Input count = %d\n", count);
+ for (i = 0; i < count; i++) {
+ if (!DMXGetInputAttributes(display, i, &iinfo)) {
+ printf("Could not get input information for id %d\n", i);
+ return -1;
+ }
+ switch (iinfo.inputType) {
+ case DMXLocalInputType:
+ printf(" %2d local %-20.20s %s\n", i, "", core(&iinfo));
+ break;
+ case DMXConsoleInputType:
+ printf(" %2d console %-20.20s %s\n",
+ i, iinfo.name, core(&iinfo));
+ break;
+ case DMXBackendInputType:
+ printf(" %2d backend %-20.20s id=%2d screen=%2d %s\n",
+ i, iinfo.name, iinfo.physicalId, iinfo.physicalScreen,
+ core(&iinfo));
+ break;
+ }
+ }
+ }
+
+ if (window) print_info(display, window, 0, 0);
+ else print_tree(display, DefaultRootWindow(display), 0, 0);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxreconfig.c b/hw/dmx/examples/dmxreconfig.c
new file mode 100644
index 0000000..042f8a1
--- /dev/null
+++ b/hw/dmx/examples/dmxreconfig.c
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ int screen;
+ DMXScreenAttributes attr;
+ unsigned int mask = 0;
+ int status;
+ int errorScreen;
+
+ if (argc != 13) {
+ fprintf(stderr, "Usage: %s display screen scrnx scrny scrnw scrnh rootx rooty rootw rooth originx originy\n", argv[0]);
+ return -1;
+ }
+
+ if (!(display = XOpenDisplay(argv[1]))) {
+ fprintf(stderr, "Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+
+ screen = strtol(argv[2], NULL, 0);
+
+ mask |= (DMXScreenWindowXoffset |
+ DMXScreenWindowYoffset |
+ DMXScreenWindowWidth |
+ DMXScreenWindowHeight);
+ attr.screenWindowXoffset = strtol(argv[3], NULL, 0);
+ attr.screenWindowYoffset = strtol(argv[4], NULL, 0);
+ attr.screenWindowWidth = strtol(argv[5], NULL, 0);
+ attr.screenWindowHeight = strtol(argv[6], NULL, 0);
+
+ mask |= (DMXRootWindowXoffset |
+ DMXRootWindowYoffset |
+ DMXRootWindowWidth |
+ DMXRootWindowHeight);
+ attr.rootWindowXoffset = strtol(argv[7], NULL, 0);
+ attr.rootWindowYoffset = strtol(argv[8], NULL, 0);
+ attr.rootWindowWidth = strtol(argv[9], NULL, 0);
+ attr.rootWindowHeight = strtol(argv[10], NULL, 0);
+
+ mask |= DMXRootWindowXorigin | DMXRootWindowYorigin;
+ attr.rootWindowXorigin = strtol(argv[11], NULL, 0);
+ attr.rootWindowYorigin = strtol(argv[12], NULL, 0);
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ fprintf(stderr, "DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ fprintf(stderr, "Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ if (major_version == 1 && minor_version < 3) {
+ fprintf(stderr,
+ "ReconfigureScreen not supported in this extension version\n");
+ return -1;
+ }
+
+ if (major_version < 2) {
+ fprintf(stderr,
+ "ChangeScreensAttributes not supported in this extension "
+ "version\n");
+ return -1;
+ }
+
+ if (!(status = DMXChangeScreensAttributes(display, 1, &screen, 1, &mask,
+ &attr, &errorScreen))) {
+ printf("Reconfigured screen #%d to "
+ "%dx%d%s%d%s%d %dx%d%s%d%s%d %s%d%s%d\n",
+ screen,
+ attr.screenWindowWidth,
+ attr.screenWindowHeight,
+ (attr.screenWindowXoffset < 0 ? "" : "+"),
+ attr.screenWindowXoffset,
+ (attr.screenWindowYoffset < 0 ? "" : "+"),
+ attr.screenWindowYoffset,
+ attr.rootWindowWidth,
+ attr.rootWindowHeight,
+ (attr.rootWindowXoffset < 0 ? "" : "+"),
+ attr.rootWindowXoffset,
+ (attr.rootWindowYoffset < 0 ? "" : "+"),
+ attr.rootWindowYoffset,
+ (attr.rootWindowXorigin < 0 ? "" : "+"),
+ attr.rootWindowXorigin,
+ (attr.rootWindowYorigin < 0 ? "" : "+"),
+ attr.rootWindowYorigin);
+ } else {
+ fprintf(stderr,
+ "Could not set screen #%d to "
+ "%dx%d%s%d%s%d %dx%d%s%d%s%d %s%d%s%d\n"
+ "[status = %d, errorScreen=%d]\n",
+ screen,
+ attr.screenWindowWidth,
+ attr.screenWindowHeight,
+ (attr.screenWindowXoffset < 0 ? "" : "+"),
+ attr.screenWindowXoffset,
+ (attr.screenWindowYoffset < 0 ? "" : "+"),
+ attr.screenWindowYoffset,
+ attr.rootWindowWidth,
+ attr.rootWindowHeight,
+ (attr.rootWindowXoffset < 0 ? "" : "+"),
+ attr.rootWindowXoffset,
+ (attr.rootWindowYoffset < 0 ? "" : "+"),
+ attr.rootWindowYoffset,
+ (attr.rootWindowXorigin < 0 ? "" : "+"),
+ attr.rootWindowXorigin,
+ (attr.rootWindowYorigin < 0 ? "" : "+"),
+ attr.rootWindowYorigin,
+ status, errorScreen);
+ return -1;
+ }
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxresize.c b/hw/dmx/examples/dmxresize.c
new file mode 100644
index 0000000..caed91d
--- /dev/null
+++ b/hw/dmx/examples/dmxresize.c
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ int width, height, shiftX, shiftY, status;
+ DMXDesktopAttributes attr;
+ unsigned int mask;
+
+ if (argc != 6) {
+ printf("Usage: %s display width height shiftX shiftY\n", argv[0]);
+ return -1;
+ }
+
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+
+ width = strtol(argv[2], NULL, 0);
+ height = strtol(argv[3], NULL, 0);
+ shiftX = strtol(argv[4], NULL, 0);
+ shiftY = strtol(argv[5], NULL, 0);
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ printf("DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ printf("Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ mask = (DMXDesktopWidth |
+ DMXDesktopHeight |
+ DMXDesktopShiftX |
+ DMXDesktopShiftY);
+ attr.width = width;
+ attr.height = height;
+ attr.shiftX = shiftX;
+ attr.shiftY = shiftY;
+ switch (status = DMXChangeDesktopAttributes(display, mask, &attr)) {
+ case DmxBadXinerama:
+ printf("status = %d (No Xinerama)\n", status);
+ break;
+ case DmxBadValue:
+ printf("status = %d (Bad Value)\n", status);
+ break;
+ case Success:
+ printf("status = %d (Success)\n", status);
+ break;
+ default:
+ printf("status = %d (UNKNOWN ERROR *****)\n", status);
+ break;
+ }
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxrminput.c b/hw/dmx/examples/dmxrminput.c
new file mode 100644
index 0000000..ef62cab
--- /dev/null
+++ b/hw/dmx/examples/dmxrminput.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2003,2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ int status;
+
+ if (argc != 3) {
+ printf("Usage: %s display id\n", argv[0]);
+ return -1;
+ }
+
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ printf("DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ printf("Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ status = DMXRemoveInput(display, atoi(argv[2]));
+
+ printf("status = %d\n", status);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxrmscreen.c b/hw/dmx/examples/dmxrmscreen.c
new file mode 100644
index 0000000..fecf0f6
--- /dev/null
+++ b/hw/dmx/examples/dmxrmscreen.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/dmxext.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ int screenNum;
+
+ if (argc != 3) {
+ printf("Usage: %s display screenNum\n", argv[0]);
+ return -1;
+ }
+
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+
+ screenNum = strtol(argv[2], NULL, 0);
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) {
+ printf("DMX extension not present\n");
+ return -1;
+ }
+ printf("DMX extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+
+ if (!DMXQueryVersion(display,
+ &major_version, &minor_version, &patch_version)) {
+ printf("Could not get extension version\n");
+ return -1;
+ }
+ printf("Extension version: %d.%d patch %d\n",
+ major_version, minor_version, patch_version);
+
+ if (!DMXRemoveScreen(display, screenNum))
+ printf("Failed to remove screen #%d\n", screenNum);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/dmxwininfo.c b/hw/dmx/examples/dmxwininfo.c
new file mode 100644
index 0000000..6cf1d41
--- /dev/null
+++ b/hw/dmx/examples/dmxwininfo.c
@@ -0,0 +1,496 @@
+/*
+ * Copyright (c) 2003 by the XFree86 Project, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Create a window and use the DMX extension to query the window's
+ * back-end properties. Display the info inside the window itself.
+ *
+ * Brian Paul
+ * 23 Jan 2003
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xmu/SysUtil.h>
+#include <X11/extensions/dmxext.h>
+
+static const char *FontName = "fixed";
+
+
+static void
+EventLoop(Display *dpy, Window win, GC gc)
+{
+ XEvent ev;
+ while (1) {
+ XNextEvent( dpy, &ev );
+ switch (ev.type) {
+ case ReparentNotify:
+ break;
+ case MapNotify:
+ break;
+ case ConfigureNotify:
+ case Expose:
+ {
+ int numScreens, count, i;
+ DMXWindowAttributes *winInfo;
+ int x, y;
+ const char *msg = "DMX window info:";
+
+ DMXGetScreenCount(dpy, &numScreens);
+ winInfo
+ = (DMXWindowAttributes *)
+ malloc(numScreens * sizeof(DMXWindowAttributes));
+ assert(winInfo);
+ if (!DMXGetWindowAttributes(dpy, win, &count,
+ numScreens, winInfo)) {
+ printf("Could not get window information for 0x%08lx\n",
+ (long unsigned)win);
+ }
+ x = y = 50;
+ XClearWindow(dpy, win);
+ XDrawString(dpy, win, gc, x, y, msg, strlen(msg));
+ y += 20;
+ for (i = 0; i < count; i++) {
+ char str[500];
+ XmuSnprintf(str, sizeof(str),
+ "screen %d: pos: %dx%d+%d+%d visible: %dx%d+%d+%d",
+ winInfo[i].screen,
+ winInfo[i].pos.width, winInfo[i].pos.height,
+ winInfo[i].pos.x, winInfo[i].pos.y,
+ winInfo[i].vis.width, winInfo[i].vis.height,
+ winInfo[i].vis.x, winInfo[i].vis.y);
+ XDrawString(dpy, win, gc, x, y, str, strlen(str));
+ y += 20;
+ }
+ free(winInfo);
+ }
+ break;
+ default:
+ printf("Event type 0x%x\n", ev.type);
+ }
+ }
+}
+
+int
+main(int argc, char *argv[])
+{
+ const char *displayName = NULL;
+ Display *dpy;
+ int event_base, error_base;
+ int scr, n;
+ long vinfoMask, attrMask;
+ XVisualInfo vinfoTemp, *visInfo;
+ Visual *vis;
+ Window win, root;
+ XSetWindowAttributes attr;
+ XFontStruct *fontInfo;
+ GC gc;
+
+ if (argc > 1) {
+ displayName = argv[1];
+ }
+
+ dpy = XOpenDisplay(displayName);
+ if (!dpy) {
+ fprintf(stderr, "Unable to open display %s\n", displayName);
+ return -1;
+ }
+
+ if (!DMXQueryExtension(dpy, &event_base, &error_base)) {
+ fprintf(stderr, "DMX extension not available on this display.\n");
+ return -1;
+ }
+
+ scr = DefaultScreen(dpy);
+ root = RootWindow(dpy, scr);
+ vis = DefaultVisual(dpy, scr);
+
+ vinfoMask = VisualIDMask;
+ vinfoTemp.visualid = vis->visualid;
+ visInfo = XGetVisualInfo(dpy, vinfoMask, &vinfoTemp, &n);
+ if (!visInfo || n != 1) {
+ fprintf(stderr, "Unable to get visual!\n");
+ XCloseDisplay(dpy);
+ return -1;
+ }
+
+ attr.background_pixel = 0;
+ attr.border_pixel = 0;
+ attr.colormap = XCreateColormap(dpy, root, visInfo->visual, AllocNone);
+ attr.event_mask = StructureNotifyMask | ExposureMask;
+ attrMask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
+
+ win = XCreateWindow(dpy, root,
+ 500, 500, 600, 400, /* x, y, w, h */
+ 0, /* border_width */
+ visInfo->depth, InputOutput,
+ visInfo->visual, attrMask, &attr);
+
+
+ if (!win) {
+ fprintf(stderr, "Unable to create window!\n");
+ XCloseDisplay(dpy);
+ return -1;
+ }
+
+ fontInfo = XLoadQueryFont(dpy, FontName);
+ if (!fontInfo) {
+ fprintf(stderr, "Error: font %s not found\n", FontName);
+ exit(0);
+ }
+
+ gc = XCreateGC(dpy, win, 0, NULL);
+ XSetBackground(dpy, gc, BlackPixel(dpy, scr));
+ XSetForeground(dpy, gc, WhitePixel(dpy, scr));
+ XSetFont(dpy, gc, fontInfo->fid);
+
+ XMapWindow(dpy, win);
+
+ EventLoop(dpy, win, gc);
+
+ XDestroyWindow(dpy, win);
+ XCloseDisplay(dpy);
+ return 0;
+}
+
+#if 00
+
+static void make_window( char *title, int color_flag )
+{
+ int x = 10, y = 10, width = 400, height = 300;
+ Display *dpy;
+ int scr;
+ Window root, win;
+ Colormap cmap;
+ XColor xcolor;
+ int attr_flags;
+ XVisualInfo *visinfo;
+ XSetWindowAttributes attr;
+ XTextProperty tp;
+ XSizeHints sh;
+ XEvent e;
+ XMesaContext context;
+ XMesaVisual visual;
+ XMesaBuffer buffer;
+
+
+ /*
+ * Do the usual X things to make a window.
+ */
+
+ dpy = XOpenDisplay(NULL);
+ if (!dpy) {
+ printf("Couldn't open default display!\n");
+ exit(1);
+ }
+
+ scr = DefaultScreen(dpy);
+ root = RootWindow(dpy, scr);
+
+ /* alloc visinfo struct */
+ visinfo = (XVisualInfo *) malloc( sizeof(XVisualInfo) );
+
+ /* Get a visual and colormap */
+ if (color_flag) {
+ /* Open TrueColor window */
+
+/*
+ if (!XMatchVisualInfo( dpy, scr, 24, TrueColor, visinfo )) {
+ printf("Couldn't get 24-bit TrueColor visual!\n");
+ exit(1);
+ }
+*/
+ if (!XMatchVisualInfo( dpy, scr, 8, PseudoColor, visinfo )) {
+ printf("Couldn't get 8-bit PseudoColor visual!\n");
+ exit(1);
+ }
+
+ cmap = XCreateColormap( dpy, root, visinfo->visual, AllocNone );
+ Black = Red = Green = Blue = 0;
+ }
+ else {
+ /* Open color index window */
+
+ if (!XMatchVisualInfo( dpy, scr, 8, PseudoColor, visinfo )) {
+ printf("Couldn't get 8-bit PseudoColor visual\n");
+ exit(1);
+ }
+
+ cmap = XCreateColormap( dpy, root, visinfo->visual, AllocNone );
+
+ /* Allocate colors */
+ xcolor.red = 0x0;
+ xcolor.green = 0x0;
+ xcolor.blue = 0x0;
+ xcolor.flags = DoRed | DoGreen | DoBlue;
+ if (!XAllocColor( dpy, cmap, &xcolor )) {
+ printf("Couldn't allocate black!\n");
+ exit(1);
+ }
+ Black = xcolor.pixel;
+
+ xcolor.red = 0xffff;
+ xcolor.green = 0x0;
+ xcolor.blue = 0x0;
+ xcolor.flags = DoRed | DoGreen | DoBlue;
+ if (!XAllocColor( dpy, cmap, &xcolor )) {
+ printf("Couldn't allocate red!\n");
+ exit(1);
+ }
+ Red = xcolor.pixel;
+
+ xcolor.red = 0x0;
+ xcolor.green = 0xffff;
+ xcolor.blue = 0x0;
+ xcolor.flags = DoRed | DoGreen | DoBlue;
+ if (!XAllocColor( dpy, cmap, &xcolor )) {
+ printf("Couldn't allocate green!\n");
+ exit(1);
+ }
+ Green = xcolor.pixel;
+
+ xcolor.red = 0x0;
+ xcolor.green = 0x0;
+ xcolor.blue = 0xffff;
+ xcolor.flags = DoRed | DoGreen | DoBlue;
+ if (!XAllocColor( dpy, cmap, &xcolor )) {
+ printf("Couldn't allocate blue!\n");
+ exit(1);
+ }
+ Blue = xcolor.pixel;
+ }
+
+ /* set window attributes */
+ attr.colormap = cmap;
+ attr.event_mask = ExposureMask | StructureNotifyMask;
+ attr.border_pixel = BlackPixel( dpy, scr );
+ attr.background_pixel = BlackPixel( dpy, scr );
+ attr_flags = CWColormap | CWEventMask | CWBorderPixel | CWBackPixel;
+
+ /* Create the window */
+ win = XCreateWindow( dpy, root, x,y, width, height, 0,
+ visinfo->depth, InputOutput,
+ visinfo->visual,
+ attr_flags, &attr);
+ if (!win) {
+ printf("Couldn't open window!\n");
+ exit(1);
+ }
+
+ XStringListToTextProperty(&title, 1, &tp);
+ sh.flags = USPosition | USSize;
+ XSetWMProperties(dpy, win, &tp, &tp, 0, 0, &sh, 0, 0);
+ XMapWindow(dpy, win);
+ while (1) {
+ XNextEvent( dpy, &e );
+ if (e.type == MapNotify && e.xmap.window == win) {
+ break;
+ }
+ }
+
+
+ /*
+ * Now do the special Mesa/Xlib stuff!
+ */
+
+ visual = XMesaCreateVisual( dpy, visinfo,
+ (GLboolean) color_flag,
+ GL_FALSE, /* alpha_flag */
+ GL_FALSE, /* db_flag */
+ GL_FALSE, /* stereo flag */
+ GL_FALSE, /* ximage_flag */
+ 0, /* depth size */
+ 0, /* stencil size */
+ 0,0,0,0, /* accum_size */
+ 0, /* num samples */
+ 0, /* level */
+ 0 /* caveat */
+ );
+ if (!visual) {
+ printf("Couldn't create Mesa/X visual!\n");
+ exit(1);
+ }
+
+ /* Create a Mesa rendering context */
+ context = XMesaCreateContext( visual,
+ NULL /* share_list */
+ );
+ if (!context) {
+ printf("Couldn't create Mesa/X context!\n");
+ exit(1);
+ }
+
+ buffer = XMesaCreateWindowBuffer( visual, win );
+ if (!buffer) {
+ printf("Couldn't create Mesa/X buffer!\n");
+ exit(1);
+ }
+
+
+ XMesaMakeCurrent( context, buffer );
+
+ /* Ready to render! */
+}
+
+
+
+static void draw_cube( void )
+{
+ /* X faces */
+ glIndexi( Red );
+ glColor3f( 1.0, 0.0, 0.0 );
+ glBegin( GL_POLYGON );
+ glVertex3f( 1.0, 1.0, 1.0 );
+ glVertex3f( 1.0, -1.0, 1.0 );
+ glVertex3f( 1.0, -1.0, -1.0 );
+ glVertex3f( 1.0, 1.0, -1.0 );
+ glEnd();
+
+ glBegin( GL_POLYGON );
+ glVertex3f( -1.0, 1.0, 1.0 );
+ glVertex3f( -1.0, 1.0, -1.0 );
+ glVertex3f( -1.0, -1.0, -1.0 );
+ glVertex3f( -1.0, -1.0, 1.0 );
+ glEnd();
+
+ /* Y faces */
+ glIndexi( Green );
+ glColor3f( 0.0, 1.0, 0.0 );
+ glBegin( GL_POLYGON );
+ glVertex3f( 1.0, 1.0, 1.0 );
+ glVertex3f( 1.0, 1.0, -1.0 );
+ glVertex3f( -1.0, 1.0, -1.0 );
+ glVertex3f( -1.0, 1.0, 1.0 );
+ glEnd();
+
+ glBegin( GL_POLYGON );
+ glVertex3f( 1.0, -1.0, 1.0 );
+ glVertex3f( -1.0, -1.0, 1.0 );
+ glVertex3f( -1.0, -1.0, -1.0 );
+ glVertex3f( 1.0, -1.0, -1.0 );
+ glEnd();
+
+ /* Z faces */
+ glIndexi( Blue );
+ glColor3f( 0.0, 0.0, 1.0 );
+ glBegin( GL_POLYGON );
+ glVertex3f( 1.0, 1.0, 1.0 );
+ glVertex3f( -1.0, 1.0, 1.0 );
+ glVertex3f( -1.0, -1.0, 1.0 );
+ glVertex3f( 1.0, -1.0, 1.0 );
+ glEnd();
+
+ glBegin( GL_POLYGON );
+ glVertex3f( 1.0, 1.0, -1.0 );
+ glVertex3f( 1.0,-1.0, -1.0 );
+ glVertex3f( -1.0,-1.0, -1.0 );
+ glVertex3f( -1.0, 1.0, -1.0 );
+ glEnd();
+}
+
+
+
+
+static void display_loop( void )
+{
+ GLfloat xrot, yrot, zrot;
+
+ xrot = yrot = zrot = 0.0;
+
+ glClearColor( 0.0, 0.0, 0.0, 0.0 );
+ glClearIndex( Black );
+
+ glMatrixMode( GL_PROJECTION );
+ glLoadIdentity();
+ glFrustum( -1.0, 1.0, -1.0, 1.0, 1.0, 10.0 );
+ glTranslatef( 0.0, 0.0, -5.0 );
+
+ glMatrixMode( GL_MODELVIEW );
+ glLoadIdentity();
+
+ glCullFace( GL_BACK );
+ glEnable( GL_CULL_FACE );
+
+ glShadeModel( GL_FLAT );
+
+ while (1) {
+ glClear( GL_COLOR_BUFFER_BIT );
+ glPushMatrix();
+ glRotatef( xrot, 1.0, 0.0, 0.0 );
+ glRotatef( yrot, 0.0, 1.0, 0.0 );
+ glRotatef( zrot, 0.0, 0.0, 1.0 );
+
+ draw_cube();
+
+ glPopMatrix();
+ glFinish();
+
+ xrot += 10.0;
+ yrot += 7.0;
+ zrot -= 3.0;
+ }
+
+}
+
+
+
+
+int main( int argc, char *argv[] )
+{
+ int mode = 0;
+
+ if (argc >= 2)
+ {
+ if (strcmp(argv[1],"-ci")==0)
+ mode = 0;
+ else if (strcmp(argv[1],"-rgb")==0)
+ mode = 1;
+ else
+ {
+ printf("Bad flag: %s\n", argv[1]);
+ printf("Specify -ci for 8-bit color index or -rgb for RGB mode\n");
+ exit(1);
+ }
+ }
+ else
+ {
+ printf("Specify -ci for 8-bit color index or -rgb for RGB mode\n");
+ printf("Defaulting to 8-bit color index\n");
+ }
+
+ make_window( argv[0], mode );
+
+ display_loop();
+ return 0;
+}
+
+
+#endif
diff --git a/hw/dmx/examples/ev.c b/hw/dmx/examples/ev.c
new file mode 100644
index 0000000..ba45c2b
--- /dev/null
+++ b/hw/dmx/examples/ev.c
@@ -0,0 +1,182 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * This is a simple test program that reads from /dev/input/event*,
+ * decoding events into a human readable form.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <time.h>
+#include <linux/input.h>
+
+struct input_event event;
+
+int main(int argc, char **argv)
+{
+ char name[64]; /* RATS: Use ok, but could be better */
+ char buf[256] = { 0, }; /* RATS: Use ok */
+ unsigned char mask[EV_MAX/8 + 1]; /* RATS: Use ok */
+ int version;
+ int fd = 0;
+ int rc;
+ int i, j;
+ char *tmp;
+
+#define test_bit(bit) (mask[(bit)/8] & (1 << ((bit)%8)))
+
+ for (i = 0; i < 32; i++) {
+ sprintf(name, "/dev/input/event%d", i);
+ if ((fd = open(name, O_RDONLY, 0)) >= 0) {
+ ioctl(fd, EVIOCGVERSION, &version);
+ ioctl(fd, EVIOCGNAME(sizeof(buf)), buf);
+ ioctl(fd, EVIOCGBIT(0, sizeof(mask)), mask);
+ printf("%s\n", name);
+ printf(" evdev version: %d.%d.%d\n",
+ version >> 16, (version >> 8) & 0xff, version & 0xff);
+ printf(" name: %s\n", buf);
+ printf(" features:");
+ for (j = 0; j < EV_MAX; j++) {
+ if (test_bit(j)) {
+ const char *type = "unknown";
+ switch(j) {
+ case EV_KEY: type = "keys/buttons"; break;
+ case EV_REL: type = "relative"; break;
+ case EV_ABS: type = "absolute"; break;
+ case EV_MSC: type = "reserved"; break;
+ case EV_LED: type = "leds"; break;
+ case EV_SND: type = "sound"; break;
+ case EV_REP: type = "repeat"; break;
+ case EV_FF: type = "feedback"; break;
+ }
+ printf(" %s", type);
+ }
+ }
+ printf("\n");
+ close(fd);
+ }
+ }
+
+ if (argc > 1) {
+ sprintf(name, "/dev/input/event%d", atoi(argv[1]));
+ if ((fd = open(name, O_RDWR, 0)) >= 0) {
+ printf("%s: open, fd = %d\n", name, fd);
+ for (i = 0; i < LED_MAX; i++) {
+ event.time.tv_sec = time(0);
+ event.time.tv_usec = 0;
+ event.type = EV_LED;
+ event.code = i;
+ event.value = 0;
+ write(fd, &event, sizeof(event));
+ }
+
+ while ((rc = read(fd, &event, sizeof(event))) > 0) {
+ printf("%-24.24s.%06lu type 0x%04x; code 0x%04x;"
+ " value 0x%08x; ",
+ ctime(&event.time.tv_sec),
+ event.time.tv_usec,
+ event.type, event.code, event.value);
+ switch (event.type) {
+ case EV_KEY:
+ if (event.code > BTN_MISC) {
+ printf("Button %d %s",
+ event.code & 0xff,
+ event.value ? "press" : "release");
+ } else {
+ printf("Key %d (0x%x) %s",
+ event.code & 0xff,
+ event.code & 0xff,
+ event.value ? "press" : "release");
+ }
+ break;
+ case EV_REL:
+ switch (event.code) {
+ case REL_X: tmp = "X"; break;
+ case REL_Y: tmp = "Y"; break;
+ case REL_HWHEEL: tmp = "HWHEEL"; break;
+ case REL_DIAL: tmp = "DIAL"; break;
+ case REL_WHEEL: tmp = "WHEEL"; break;
+ case REL_MISC: tmp = "MISC"; break;
+ default: tmp = "UNKNOWN"; break;
+ }
+ printf("Relative %s %d", tmp, event.value);
+ break;
+ case EV_ABS:
+ switch (event.code) {
+ case ABS_X: tmp = "X"; break;
+ case ABS_Y: tmp = "Y"; break;
+ case ABS_Z: tmp = "Z"; break;
+ case ABS_RX: tmp = "RX"; break;
+ case ABS_RY: tmp = "RY"; break;
+ case ABS_RZ: tmp = "RZ"; break;
+ case ABS_THROTTLE: tmp = "THROTTLE"; break;
+ case ABS_RUDDER: tmp = "RUDDER"; break;
+ case ABS_WHEEL: tmp = "WHEEL"; break;
+ case ABS_GAS: tmp = "GAS"; break;
+ case ABS_BRAKE: tmp = "BRAKE"; break;
+ case ABS_HAT0X: tmp = "HAT0X"; break;
+ case ABS_HAT0Y: tmp = "HAT0Y"; break;
+ case ABS_HAT1X: tmp = "HAT1X"; break;
+ case ABS_HAT1Y: tmp = "HAT1Y"; break;
+ case ABS_HAT2X: tmp = "HAT2X"; break;
+ case ABS_HAT2Y: tmp = "HAT2Y"; break;
+ case ABS_HAT3X: tmp = "HAT3X"; break;
+ case ABS_HAT3Y: tmp = "HAT3Y"; break;
+ case ABS_PRESSURE: tmp = "PRESSURE"; break;
+ case ABS_DISTANCE: tmp = "DISTANCE"; break;
+ case ABS_TILT_X: tmp = "TILT_X"; break;
+ case ABS_TILT_Y: tmp = "TILT_Y"; break;
+ case ABS_MISC: tmp = "MISC"; break;
+ default: tmp = "UNKNOWN"; break;
+ }
+ printf("Absolute %s %d", tmp, event.value);
+ break;
+ case EV_MSC: printf("Misc"); break;
+ case EV_LED: printf("Led"); break;
+ case EV_SND: printf("Snd"); break;
+ case EV_REP: printf("Rep"); break;
+ case EV_FF: printf("FF"); break;
+ break;
+ }
+ printf("\n");
+ }
+ printf("rc = %d, (%s)\n", rc, strerror(errno));
+ close(fd);
+ }
+ }
+ return 0;
+}
diff --git a/hw/dmx/examples/evi.c b/hw/dmx/examples/evi.c
new file mode 100644
index 0000000..644ea8f
--- /dev/null
+++ b/hw/dmx/examples/evi.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/XEVI.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int major_version, minor_version;
+ ExtendedVisualInfo *evi;
+ int count;
+ int i;
+
+ if (argc == 2) {
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+ } else {
+ printf("Usage: %s display\n", argv[0]);
+ return -1;
+ }
+
+ if (!display && !(display = XOpenDisplay(NULL))) {
+ printf("Cannot open default display\n");
+ return -1;
+ }
+
+ if (!XeviQueryVersion(display, &major_version, &minor_version)) {
+ printf("EVI extension not present\n");
+ return -1;
+ }
+ printf("EVI Extension version: %d.%d\n", major_version, minor_version);
+
+ XeviGetVisualInfo(display, NULL, 0, &evi, &count);
+
+ for (i = 0; i < count; i++) {
+ printf("%02d vid=0x%02lx screen=%d level=%d type=%u value=%u"
+ " min=%u max=%u conflicts=%u\n",
+ i,
+ (long unsigned)evi[i].core_visual_id,
+ evi[i].screen,
+ evi[i].level,
+ evi[i].transparency_type,
+ evi[i].transparency_value,
+ evi[i].min_hw_colormaps,
+ evi[i].max_hw_colormaps,
+ evi[i].num_colormap_conflicts);
+ }
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/res.c b/hw/dmx/examples/res.c
new file mode 100644
index 0000000..901a195
--- /dev/null
+++ b/hw/dmx/examples/res.c
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/XRes.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int major_version, minor_version;
+ int event, error;
+ int count;
+ int i;
+ XResClient *clients;
+
+ if (argc == 2) {
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+ } else {
+ printf("Usage: %s display\n", argv[0]);
+ return -1;
+ }
+
+ if (!display && !(display = XOpenDisplay(NULL))) {
+ printf("Cannot open default display\n");
+ return -1;
+ }
+
+ if (!XResQueryExtension(display, &event, &error)) {
+ printf("X-Resource extension not present\n");
+ return -1;
+ }
+ printf("X-Resource extension present: event=%d error=%d\n", event, error);
+
+ if (!XResQueryVersion(display, &major_version, &minor_version)) {
+ printf("XResQueryVersion call failed\n");
+ return -1;
+ }
+ printf("X-Resource extension version: %d.%d\n",
+ major_version, minor_version);
+
+ XResQueryClients(display, &count, &clients);
+
+ printf("%d clients:\n", count);
+ for (i = 0; i < count; i++) {
+ int c, j;
+ XResType *types;
+
+ XResQueryClientResources(display, clients[i].resource_base,
+ &c, &types);
+ printf(" %3d: base = 0x%lx, mask = 0x%lx, %d resource types:\n",
+ i, (long unsigned)clients[i].resource_base,
+ (long unsigned)clients[i].resource_mask, c);
+ for (j = 0; j < c; j++) {
+ char *name = XGetAtomName(display, types[j].resource_type);
+ printf(" %2d: %s %d\n", j, name, types[j].count);
+ XFree(name);
+ }
+ XFree(types);
+ }
+
+ XFree(clients);
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/xbell.c b/hw/dmx/examples/xbell.c
new file mode 100644
index 0000000..f3e3be1
--- /dev/null
+++ b/hw/dmx/examples/xbell.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+
+static void pkc(XKeyboardControl *kc, unsigned long vm)
+{
+ if (vm&KBKeyClickPercent)
+ printf(" key_click_percent = %d\n", kc->key_click_percent);
+ if (vm&KBBellPercent)
+ printf(" bell_percent = %d\n", kc->bell_percent);
+ if (vm&KBBellPitch)
+ printf(" bell_pitch = %d\n", kc->bell_pitch);
+ if (vm&KBBellDuration)
+ printf(" bell_duration = %d\n", kc->bell_duration);
+ if (vm&KBLed)
+ printf(" led = 0x%x\n", kc->led);
+ if (vm&KBLedMode)
+ printf(" led_mode = %d\n", kc->led_mode);
+ if (vm&KBKey)
+ printf(" key = %d\n", kc->key);
+ if (vm&KBAutoRepeatMode)
+ printf(" auto_repeat_mode = %d\n", kc->auto_repeat_mode);
+}
+
+static void pks(XKeyboardState *ks)
+{
+ printf(" key_click_percent = %d\n", ks->key_click_percent);
+ printf(" bell_percent = %d\n", ks->bell_percent);
+ printf(" bell_pitch = %u\n", ks->bell_pitch);
+ printf(" bell_duration = %u\n", ks->bell_duration);
+ printf(" led_mask = 0x%lx\n", ks->led_mask);
+ printf(" global_auto_repeat = %d\n", ks->global_auto_repeat);
+}
+
+int main(int argc, char **argv)
+{
+ Display *display = XOpenDisplay(NULL);
+ XKeyboardControl kc;
+ XKeyboardState ks;
+ unsigned long vm;
+ int percent;
+
+ if (argc != 5) {
+ printf("Usage: xbell percent baseVolume pitch duration\n");
+ return 1;
+ }
+
+ vm = (KBBellPercent
+ | KBBellPitch
+ | KBBellDuration);
+ percent = atoi(argv[1]);
+ kc.bell_percent = atoi(argv[2]);
+ kc.bell_pitch = atoi(argv[3]);
+ kc.bell_duration = atoi(argv[4]);
+
+ printf("Setting:\n");
+ pkc(&kc, vm);
+ XChangeKeyboardControl(display, vm, &kc);
+
+ printf("Have:\n");
+ XGetKeyboardControl(display, &ks);
+ pks(&ks);
+
+ XBell(display, 100);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/xinput.c b/hw/dmx/examples/xinput.c
new file mode 100644
index 0000000..b12daf2
--- /dev/null
+++ b/hw/dmx/examples/xinput.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/XKBlib.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/XKB.h>
+#include <X11/extensions/XKBstr.h>
+#include <X11/extensions/dmxext.h>
+#include <sys/time.h>
+
+static const char *core(DMXInputAttributes *iinf)
+{
+ if (iinf->isCore) return "core";
+ else if (iinf->sendsCore) return "extension (sends core events)";
+ else return "extension";
+}
+
+static void printdmxinfo(Display *display, int id)
+{
+ int event_base;
+ int error_base;
+ int major_version, minor_version, patch_version;
+ DMXInputAttributes iinf;
+ Display *backend;
+ char *backendname = NULL;
+
+ if (!DMXQueryExtension(display, &event_base, &error_base)) return;
+ if (!DMXQueryVersion(display, &major_version, &minor_version,
+ &patch_version)) return;
+ if (major_version == 1 && minor_version == 0) return; /* too old */
+ if (!DMXGetInputAttributes(display, id, &iinf)) return;
+
+ printf(" DMX Information: ");
+ if (iinf.detached) printf("detached ");
+ else printf("active ");
+ switch (iinf.inputType) {
+ case DMXLocalInputType:
+ printf("local, %s", core(&iinf));
+ break;
+ case DMXConsoleInputType:
+ printf("console %s, %s", iinf.name, core(&iinf));
+ break;
+ case DMXBackendInputType:
+ if (iinf.physicalId >= 0) {
+ if ((backend = XOpenDisplay(iinf.name))) {
+ XExtensionVersion *ext = XGetExtensionVersion(backend, INAME);
+ if (ext && ext != (XExtensionVersion *)NoSuchExtension) {
+ int count, i;
+ XDeviceInfo *devInfo = XListInputDevices(backend, &count);
+ if (devInfo) {
+ for (i = 0; i < count; i++) {
+ if ((unsigned)iinf.physicalId == devInfo[i].id
+ && devInfo[i].name) {
+ backendname = strdup(devInfo[i].name);
+ break;
+ }
+ }
+ XFreeDeviceList(devInfo);
+ }
+ }
+ XCloseDisplay(backend);
+ }
+ }
+ printf("backend o%d/%s",iinf.physicalScreen, iinf.name);
+ if (iinf.physicalId >= 0) printf("/id%d", iinf.physicalId);
+ if (backendname) {
+ printf("=%s", backendname);
+ free(backendname);
+ }
+ printf(" %s", core(&iinf));
+ break;
+ }
+ printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int device = -1;
+ int newmouse = -1;
+ int newkbd = -1;
+ int count;
+ int i, j;
+ XDeviceInfo *devInfo;
+ XExtensionVersion *ext;
+
+ if (argc == 2 || argc == 3 || argc == 4 || argc == 5) {
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+ if (argc >= 3) device = strtol(argv[2], NULL, 0);
+ if (argc >= 4) newmouse = strtol(argv[3], NULL, 0);
+ if (argc >= 5) newkbd = strtol(argv[4], NULL, 0);
+ } else {
+ printf("Usage: %s display [device] [newmouse] [newkbd]\n", argv[0]);
+ return -1;
+ }
+
+ if (!display && !(display = XOpenDisplay(NULL))) {
+ printf("Cannot open default display\n");
+ return -1;
+ }
+
+ ext = XGetExtensionVersion(display, INAME);
+ if (!ext || ext == (XExtensionVersion *)NoSuchExtension) {
+ printf("No XInputExtension\n");
+ return -1;
+ }
+ printf("%s version %d.%d\n",
+ INAME, ext->major_version, ext->minor_version);
+
+ if (!(devInfo = XListInputDevices(display, &count)) || !count) {
+ printf("Cannot list devices\n");
+ return -1;
+ }
+
+ for (i = 0; i < count; i++) {
+ XAnyClassPtr any;
+ const char *kind = "Unknown";
+ int has_key = 0;
+
+ switch (devInfo[i].use) {
+ case IsXPointer: kind = "XPointer"; break;
+ case IsXKeyboard: kind = "XKeyboard"; break;
+ case IsXExtensionDevice: kind = "XExtensionDevice"; break;
+ }
+ printf("%2lu %-20.20s %-16.16s",
+ (long unsigned)devInfo[i].id,
+ devInfo[i].name ? devInfo[i].name : "", kind);
+
+ for (j = 0, any = devInfo[i].inputclassinfo;
+ j < devInfo[i].num_classes;
+ any = (XAnyClassPtr)((char *)any + any->length), j++) {
+ const char *class = "unk";
+ switch (any->class) {
+ case KeyClass: class = "key"; ++has_key; break;
+ case ButtonClass: class = "btn"; break;
+ case ValuatorClass: class = "val"; break;
+ case FeedbackClass: class = "fdb"; break;
+ case ProximityClass: class = "prx"; break;
+ case FocusClass: class = "foc"; break;
+ case OtherClass: class = "oth"; break;
+ }
+ printf(" %s", class);
+ }
+ printf("\n");
+ printdmxinfo(display, i);
+
+ if (has_key) {
+ XkbDescPtr xkb;
+ if ((xkb = XkbGetKeyboard(display,
+ XkbAllComponentsMask,
+ devInfo[i].id))) {
+ printf(" Xkb Information:\n");
+ printf(" Device id = %d\n", xkb->device_spec);
+ printf(" Min keycode = 0x%02x\n", xkb->min_key_code);
+ printf(" Max keycode = 0x%02x\n", xkb->max_key_code);
+#define PRINTNAME(x) \
+ printf(" %s = %s\n", \
+ #x, xkb->names->x ? XGetAtomName(display, xkb->names->x) : "")
+ PRINTNAME(keycodes);
+ PRINTNAME(geometry);
+ PRINTNAME(symbols);
+ PRINTNAME(types);
+ PRINTNAME(compat);
+ }
+ }
+ }
+
+ if (newmouse >= 0) {
+ XDevice *dev;
+
+ printf("Trying to make device %d core mouse\n", newmouse);
+ dev = XOpenDevice(display, devInfo[newmouse].id);
+ printf("Status = %d\n",
+ XChangePointerDevice(display, dev, 0, 1));
+ return 0;
+ }
+
+ if (newkbd >= 0) {
+ XDevice *dev;
+
+ printf("Trying to make device %d core keyboard\n", newkbd);
+ dev = XOpenDevice(display, devInfo[newkbd].id);
+ printf("Status = %d\n",
+ XChangeKeyboardDevice(display, dev));
+ return 0;
+ }
+
+
+ if (device >=0){
+#define MAX_EVENTS 100
+ int cnt = 0;
+ XDevice *dev;
+ XEventClass event_list[MAX_EVENTS];
+ int event_type[MAX_EVENTS];
+ const char *names[MAX_EVENTS];
+ int total = 0;
+
+#define ADD(type) \
+ if (cnt >= MAX_EVENTS) abort(); \
+ names[cnt] = #type; \
+ type(dev, event_type[cnt], event_list[cnt]); \
+ if (event_type[cnt]) ++cnt
+
+
+ dev = XOpenDevice(display, devInfo[device].id);
+ ADD(DeviceKeyPress);
+ ADD(DeviceKeyRelease);
+ ADD(DeviceButtonPress);
+ ADD(DeviceButtonRelease);
+ ADD(DeviceMotionNotify);
+ ADD(DeviceFocusIn);
+ ADD(DeviceFocusOut);
+ ADD(ProximityIn);
+ ADD(ProximityOut);
+ ADD(DeviceStateNotify);
+ ADD(DeviceMappingNotify);
+ ADD(ChangeDeviceNotify);
+
+ for (i = 0; i < cnt; i++) {
+ printf("Waiting for %s events of type %d (%lu) on 0x%08lx\n",
+ names[i],
+ event_type[i], (unsigned long)event_list[i],
+ (long unsigned)DefaultRootWindow(display));
+ }
+ XSelectExtensionEvent(display, DefaultRootWindow(display),
+ event_list, cnt);
+
+ for (;;) {
+ XEvent event;
+ XNextEvent(display, &event);
+ for (i = 0; i < cnt; i++) {
+ XDeviceMotionEvent *e = (XDeviceMotionEvent *)&event;
+ XDeviceButtonEvent *b = (XDeviceButtonEvent *)&event;
+ if (event.type == event_type[i]) {
+ printf("%s id=%lu (%d @ %d,%d; s=0x%04x, d=%d, t=%lu)"
+ " axes_count=%d first=%d %d %d %d %d %d %d\n",
+ names[i],
+ (long unsigned)e->deviceid,
+ e->type,
+ e->x, e->y,
+ e->device_state,
+ b->button,
+ (long unsigned)b->time,
+ e->axes_count,
+ e->first_axis,
+ e->axis_data[0],
+ e->axis_data[1],
+ e->axis_data[2],
+ e->axis_data[3],
+ e->axis_data[4],
+ e->axis_data[5]);
+ }
+ }
+ ++total;
+#if 0
+ /* Used to check motion history for
+ * extension devices. */
+ if (!(total % 10)) {
+ XDeviceTimeCoord *tc;
+ int n, m, a;
+ struct timeval tv;
+ unsigned long ms;
+ gettimeofday(&tv, NULL);
+ ms = tv.tv_sec * 1000 + tv.tv_usec / 1000;
+ tc = XGetDeviceMotionEvents(display, dev, ms-1000, ms,
+ &n, &m, &a);
+ printf("Got %d events of mode %s with %d axes\n",
+ n, m == Absolute ? "Absolute" : "Relative", a);
+ for (i = 0; i < n && i < 10; i++) {
+ printf(" %d: %lu %d %d\n",
+ i, tc[i].time, tc[i].data[0], tc[i].data[1]);
+ }
+ XFreeDeviceMotionEvents(tc);
+ }
+#endif
+ }
+ }
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/xled.c b/hw/dmx/examples/xled.c
new file mode 100644
index 0000000..270f805
--- /dev/null
+++ b/hw/dmx/examples/xled.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <X11/Xlib.h>
+#include <X11/XKBlib.h>
+#include <X11/extensions/XKB.h>
+#include <X11/extensions/XKBstr.h>
+#include <sys/time.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int mask = 0;
+ unsigned i;
+ XKeyboardState ks;
+ XKeyboardControl kc;
+ XkbDescPtr xkb;
+ int old[32];
+
+ if (argc == 2 || argc == 3) {
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+ if (argc >= 3) mask = strtol(argv[2], NULL, 0);
+ } else {
+ printf("Usage: %s display [mask]\n", argv[0]);
+ return -1;
+ }
+
+ if (!display && !(display = XOpenDisplay(NULL))) {
+ printf("Cannot open default display\n");
+ return -1;
+ }
+
+ if (!(xkb = XkbAllocKeyboard())) {
+ printf("Cannot allocate\n");
+ return -1;
+ }
+ if (XkbGetIndicatorMap(display, XkbAllIndicatorsMask, xkb)) {
+ printf("Cannot Get Indicators\n");
+ return -1;
+ }
+ if (XkbGetNames(display, XkbAllNamesMask, xkb)) {
+ printf("Cannot Get Names\n");
+ return -1;
+ }
+ for (i = 0; i < XkbNumIndicators; i++) {
+ if (xkb->indicators->phys_indicators & (1 << i)) {
+ printf("led %d = %d\n", i, xkb->indicators->maps[i].flags);
+ old[i] = xkb->indicators->maps[i].flags;
+ xkb->indicators->maps[i].flags = XkbIM_NoAutomatic;
+ }
+ }
+ printf("XkbSetIndicatorMap = %d\n", XkbSetIndicatorMap(display, ~0, xkb));
+ XkbFreeKeyboard(xkb, 0, True);
+
+
+ if (!(xkb = XkbAllocKeyboard())) {
+ printf("Cannot allocate\n");
+ return -1;
+ }
+ if (XkbGetIndicatorMap(display, XkbAllIndicatorsMask, xkb)) {
+ printf("Cannot Get Indicators\n");
+ return -1;
+ }
+ for (i = 0; i < XkbNumIndicators; i++) {
+ if (xkb->indicators->phys_indicators & (1 << i))
+ printf("led %d = %d\n", i, xkb->indicators->maps[i].flags);
+ }
+
+ printf("XGetKeyboardControl = %d\n", XGetKeyboardControl(display, &ks));
+ printf("old mask = 0x%08lx\n", ks.led_mask);
+ for (i = 0; i < 5; i++) {
+ kc.led = i + 1;
+ kc.led_mode = (mask & (1 << i)) ? LedModeOn : LedModeOff;
+ printf("XChangeKeyboardControl = %d\n",
+ XChangeKeyboardControl(display, KBLed | KBLedMode, &kc));
+ }
+ printf("XGetKeyboardControl = %d\n", XGetKeyboardControl(display, &ks));
+ printf("new mask = 0x%08lx\n", ks.led_mask);
+
+ for (i = 0; i < XkbNumIndicators; i++)
+ if (xkb->indicators->phys_indicators & (i << 1))
+ xkb->indicators->maps[i].flags = old[i];
+ printf("XkbSetIndicatorMap = %d\n", XkbSetIndicatorMap(display, ~0, xkb));
+
+ XkbFreeKeyboard(xkb, 0, True);
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/examples/xtest.c b/hw/dmx/examples/xtest.c
new file mode 100644
index 0000000..1e2d1cf
--- /dev/null
+++ b/hw/dmx/examples/xtest.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <X11/Xlib.h>
+#include <X11/extensions/XTest.h>
+
+int main(int argc, char **argv)
+{
+ Display *display = NULL;
+ int event_base;
+ int error_base;
+ int major_version, minor_version;
+
+ if (argc == 2) {
+ if (!(display = XOpenDisplay(argv[1]))) {
+ printf("Cannot open display %s\n", argv[1]);
+ return -1;
+ }
+ } else {
+ printf("Usage: %s display\n", argv[0]);
+ return -1;
+ }
+
+ if (!display && !(display = XOpenDisplay(NULL))) {
+ printf("Cannot open default display\n");
+ return -1;
+ }
+
+ if (!XTestQueryExtension(display, &event_base, &error_base,
+ &major_version, &minor_version)) {
+ printf("XTEST extension not present\n");
+ return -1;
+ }
+ printf("XTEST extension present: event_base = %d, error_base = %d\n",
+ event_base, error_base);
+ printf("Extension version: %d.%d\n", major_version, minor_version);
+
+ XTestFakeKeyEvent(display, 30, True, 10);
+ XTestFakeKeyEvent(display, 30, False, 10);
+
+ XCloseDisplay(display);
+ return 0;
+}
diff --git a/hw/dmx/glxProxy/Makefile.am b/hw/dmx/glxProxy/Makefile.am
new file mode 100644
index 0000000..8516048
--- /dev/null
+++ b/hw/dmx/glxProxy/Makefile.am
@@ -0,0 +1,41 @@
+noinst_LIBRARIES = libglxproxy.a
+
+libglxproxy_a_SOURCES = compsize.c \
+ g_disptab.c \
+ g_disptab.h \
+ global.c \
+ glxcmds.c \
+ glxcmdsswap.c \
+ glxcontext.h \
+ glxdrawable.h \
+ glxerror.h \
+ glxext.c \
+ glxext.h \
+ glxfbconfig.c \
+ glxfbconfig.h \
+ glxscreens.c \
+ glxscreens.h \
+ glxserver.h \
+ glxsingle.c \
+ glxsingle.h \
+ glxswap.c \
+ glxswap.h \
+ glxutil.c \
+ glxutil.h \
+ glxvendor.c \
+ glxvendor.h \
+ glxvisuals.c \
+ glxvisuals.h \
+ g_renderswap.c \
+ render2swap.c \
+ renderpixswap.c \
+ unpack.h
+
+AM_CFLAGS = \
+ @GLX_ARCH_DEFINES@ \
+ $(DIX_CFLAGS) \
+ -I$(top_srcdir)/hw/dmx \
+ -I$(top_srcdir)/include \
+ -DHAVE_DMX_CONFIG_H \
+ @DMXMODULES_CFLAGS@ \
+ -I$(top_srcdir)/hw/xfree86/os-support
diff --git a/hw/dmx/glxProxy/Makefile.in b/hw/dmx/glxProxy/Makefile.in
new file mode 100644
index 0000000..2ef3a0d
--- /dev/null
+++ b/hw/dmx/glxProxy/Makefile.in
@@ -0,0 +1,758 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = hw/dmx/glxProxy
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_$(V))
+am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
+am__v_AR_0 = @echo " AR " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+libglxproxy_a_AR = $(AR) $(ARFLAGS)
+libglxproxy_a_LIBADD =
+am_libglxproxy_a_OBJECTS = compsize.$(OBJEXT) g_disptab.$(OBJEXT) \
+ global.$(OBJEXT) glxcmds.$(OBJEXT) glxcmdsswap.$(OBJEXT) \
+ glxext.$(OBJEXT) glxfbconfig.$(OBJEXT) glxscreens.$(OBJEXT) \
+ glxsingle.$(OBJEXT) glxswap.$(OBJEXT) glxutil.$(OBJEXT) \
+ glxvendor.$(OBJEXT) glxvisuals.$(OBJEXT) \
+ g_renderswap.$(OBJEXT) render2swap.$(OBJEXT) \
+ renderpixswap.$(OBJEXT)
+libglxproxy_a_OBJECTS = $(am_libglxproxy_a_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libglxproxy_a_SOURCES)
+DIST_SOURCES = $(libglxproxy_a_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LIBRARIES = libglxproxy.a
+libglxproxy_a_SOURCES = compsize.c \
+ g_disptab.c \
+ g_disptab.h \
+ global.c \
+ glxcmds.c \
+ glxcmdsswap.c \
+ glxcontext.h \
+ glxdrawable.h \
+ glxerror.h \
+ glxext.c \
+ glxext.h \
+ glxfbconfig.c \
+ glxfbconfig.h \
+ glxscreens.c \
+ glxscreens.h \
+ glxserver.h \
+ glxsingle.c \
+ glxsingle.h \
+ glxswap.c \
+ glxswap.h \
+ glxutil.c \
+ glxutil.h \
+ glxvendor.c \
+ glxvendor.h \
+ glxvisuals.c \
+ glxvisuals.h \
+ g_renderswap.c \
+ render2swap.c \
+ renderpixswap.c \
+ unpack.h
+
+AM_CFLAGS = \
+ @GLX_ARCH_DEFINES@ \
+ $(DIX_CFLAGS) \
+ -I$(top_srcdir)/hw/dmx \
+ -I$(top_srcdir)/include \
+ -DHAVE_DMX_CONFIG_H \
+ @DMXMODULES_CFLAGS@ \
+ -I$(top_srcdir)/hw/xfree86/os-support
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/glxProxy/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/glxProxy/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libglxproxy.a: $(libglxproxy_a_OBJECTS) $(libglxproxy_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libglxproxy.a
+ $(AM_V_AR)$(libglxproxy_a_AR) libglxproxy.a $(libglxproxy_a_OBJECTS) $(libglxproxy_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libglxproxy.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compsize.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_disptab.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_renderswap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/global.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxcmds.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxcmdsswap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxext.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxfbconfig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxscreens.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxsingle.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxswap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxvendor.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glxvisuals.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/render2swap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/renderpixswap.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/glxProxy/compsize.c b/hw/dmx/glxProxy/compsize.c
new file mode 100644
index 0000000..9a40d65
--- /dev/null
+++ b/hw/dmx/glxProxy/compsize.c
@@ -0,0 +1,558 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include <GL/gl.h>
+
+GLint __glFogiv_size(GLenum pname)
+{
+ switch (pname) {
+ case GL_FOG_COLOR: return 4;
+ case GL_FOG_DENSITY: return 1;
+ case GL_FOG_END: return 1;
+ case GL_FOG_MODE: return 1;
+ case GL_FOG_INDEX: return 1;
+ case GL_FOG_START: return 1;
+ default:
+ return 0;
+ }
+}
+
+GLint __glFogfv_size(GLenum pname)
+{
+ return __glFogiv_size(pname);
+}
+
+GLint __glCallLists_size(GLsizei n, GLenum type)
+{
+ GLint size;
+
+ if (n < 0) return 0;
+ switch (type) {
+ case GL_BYTE: size = 1; break;
+ case GL_UNSIGNED_BYTE: size = 1; break;
+ case GL_SHORT: size = 2; break;
+ case GL_UNSIGNED_SHORT: size = 2; break;
+ case GL_INT: size = 4; break;
+ case GL_UNSIGNED_INT: size = 4; break;
+ case GL_FLOAT: size = 4; break;
+ case GL_2_BYTES: size = 2; break;
+ case GL_3_BYTES: size = 3; break;
+ case GL_4_BYTES: size = 4; break;
+ default:
+ return 0;
+ }
+ return n * size;
+}
+
+GLint __glDrawPixels_size(GLenum format, GLenum type, GLsizei w, GLsizei h)
+{
+ GLint elements, esize;
+
+ switch (format) {
+ case GL_COLOR_INDEX:
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_COMPONENT:
+ elements = 1;
+ break;
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ elements = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ elements = 2;
+ break;
+ case GL_RGB:
+ elements = 3;
+ break;
+ case GL_RGBA:
+ case GL_ABGR_EXT:
+ elements = 4;
+ break;
+ default:
+ return 0;
+ }
+ switch (type) {
+ case GL_BITMAP:
+ if (format == GL_COLOR_INDEX || format == GL_STENCIL_INDEX) {
+ return (h * ((w+7)/8));
+ } else {
+ return 0;
+ }
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ esize = 1;
+ break;
+ case GL_UNSIGNED_BYTE_3_3_2:
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ esize = 1;
+ elements = 1;
+ break;
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ esize = 2;
+ break;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ esize = 2;
+ elements = 1;
+ break;
+ case GL_INT:
+ case GL_UNSIGNED_INT:
+ case GL_FLOAT:
+ esize = 4;
+ break;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ case GL_UNSIGNED_INT_10_10_10_2:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ esize = 4;
+ elements = 1;
+ break;
+ default:
+ return 0;
+ }
+ return elements * esize * w * h;
+}
+
+GLint __glBitmap_size(GLsizei w, GLsizei h)
+{
+ return __glDrawPixels_size(GL_COLOR_INDEX, GL_BITMAP, w, h);
+}
+
+GLint __glTexGendv_size(GLenum e)
+{
+ switch (e) {
+ case GL_TEXTURE_GEN_MODE:
+ return 1;
+ case GL_OBJECT_PLANE:
+ case GL_EYE_PLANE:
+ return 4;
+ default:
+ return 0;
+ }
+}
+
+GLint __glTexGenfv_size(GLenum e)
+{
+ return __glTexGendv_size(e);
+}
+
+GLint __glTexGeniv_size(GLenum e)
+{
+ return __glTexGendv_size(e);
+}
+
+GLint __glTexParameterfv_size(GLenum e)
+{
+ switch (e) {
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_WRAP_R:
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_MAG_FILTER:
+ return 1;
+ case GL_TEXTURE_BORDER_COLOR:
+ return 4;
+ case GL_TEXTURE_PRIORITY:
+ return 1;
+ case GL_TEXTURE_MIN_LOD:
+ case GL_TEXTURE_MAX_LOD:
+ case GL_TEXTURE_BASE_LEVEL:
+ case GL_TEXTURE_MAX_LEVEL:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+GLint __glTexParameteriv_size(GLenum e)
+{
+ return __glTexParameterfv_size(e);
+}
+
+GLint __glTexEnvfv_size(GLenum e)
+{
+ switch (e) {
+ case GL_TEXTURE_ENV_MODE:
+ return 1;
+ case GL_TEXTURE_ENV_COLOR:
+ return 4;
+ default:
+ return 0;
+ }
+}
+
+GLint __glTexEnviv_size(GLenum e)
+{
+ return __glTexEnvfv_size(e);
+}
+
+GLint __glTexImage1D_size(GLenum format, GLenum type, GLsizei w)
+{
+ GLint elements, esize;
+
+ if (w < 0) return 0;
+ switch (format) {
+ case GL_COLOR_INDEX:
+ elements = 1;
+ break;
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ elements = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ elements = 2;
+ break;
+ case GL_RGB:
+ elements = 3;
+ break;
+ case GL_RGBA:
+ case GL_ABGR_EXT:
+ elements = 4;
+ break;
+ default:
+ return 0;
+ }
+ switch (type) {
+ case GL_BITMAP:
+ if (format == GL_COLOR_INDEX) {
+ return (w+7)/8;
+ } else {
+ return 0;
+ }
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ esize = 1;
+ break;
+ case GL_UNSIGNED_BYTE_3_3_2:
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ esize = 1;
+ elements = 1;
+ break;
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ esize = 2;
+ break;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ esize = 2;
+ elements = 1;
+ break;
+ case GL_INT:
+ case GL_UNSIGNED_INT:
+ case GL_FLOAT:
+ esize = 4;
+ break;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ case GL_UNSIGNED_INT_10_10_10_2:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ esize = 4;
+ elements = 1;
+ break;
+ default:
+ return 0;
+ }
+ return elements * esize * w;
+}
+
+GLint __glTexImage2D_size(GLenum format, GLenum type, GLsizei w, GLsizei h)
+{
+ GLint elements, esize;
+
+ if (w < 0) return 0;
+ if (h < 0) return 0;
+ switch (format) {
+ case GL_COLOR_INDEX:
+ elements = 1;
+ break;
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ elements = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ elements = 2;
+ break;
+ case GL_RGB:
+ elements = 3;
+ break;
+ case GL_RGBA:
+ case GL_ABGR_EXT:
+ elements = 4;
+ break;
+ default:
+ return 0;
+ }
+ switch (type) {
+ case GL_BITMAP:
+ if (format == GL_COLOR_INDEX) {
+ return (h * ((w+7)/8));
+ } else {
+ return 0;
+ }
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ esize = 1;
+ break;
+ case GL_UNSIGNED_BYTE_3_3_2:
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ esize = 1;
+ elements = 1;
+ break;
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ esize = 2;
+ break;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ esize = 2;
+ elements = 1;
+ break;
+ case GL_INT:
+ case GL_UNSIGNED_INT:
+ case GL_FLOAT:
+ esize = 4;
+ break;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ case GL_UNSIGNED_INT_10_10_10_2:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ esize = 4;
+ elements = 1;
+ break;
+ default:
+ return 0;
+ }
+ return elements * esize * w * h;
+}
+
+GLint __glTexImage3D_size(GLenum format, GLenum type, GLsizei w, GLsizei h,
+ GLsizei d)
+{
+ GLint elements, esize;
+
+ if (w < 0) return 0;
+ if (h < 0) return 0;
+ if (d < 0) return 0;
+ switch (format) {
+ case GL_COLOR_INDEX:
+ elements = 1;
+ break;
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ elements = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ elements = 2;
+ break;
+ case GL_RGB:
+ elements = 3;
+ break;
+ case GL_RGBA:
+ case GL_ABGR_EXT:
+ elements = 4;
+ break;
+ default:
+ return 0;
+ }
+ switch (type) {
+ case GL_BITMAP:
+ if (format == GL_COLOR_INDEX) {
+ return (d * (h * ((w+7)/8)));
+ } else {
+ return 0;
+ }
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ esize = 1;
+ break;
+ case GL_UNSIGNED_BYTE_3_3_2:
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ esize = 1;
+ elements = 1;
+ break;
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ esize = 2;
+ break;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ esize = 2;
+ elements = 1;
+ break;
+ case GL_INT:
+ case GL_UNSIGNED_INT:
+ case GL_FLOAT:
+ esize = 4;
+ break;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ case GL_UNSIGNED_INT_10_10_10_2:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ esize = 4;
+ elements = 1;
+ break;
+ default:
+ return 0;
+ }
+ return elements * esize * w * h * d;
+}
+
+GLint __glLightfv_size(GLenum pname)
+{
+ switch (pname) {
+ case GL_SPOT_EXPONENT: return 1;
+ case GL_SPOT_CUTOFF: return 1;
+ case GL_AMBIENT: return 4;
+ case GL_DIFFUSE: return 4;
+ case GL_SPECULAR: return 4;
+ case GL_POSITION: return 4;
+ case GL_SPOT_DIRECTION: return 3;
+ case GL_CONSTANT_ATTENUATION: return 1;
+ case GL_LINEAR_ATTENUATION: return 1;
+ case GL_QUADRATIC_ATTENUATION: return 1;
+ default:
+ return 0;
+ }
+}
+
+GLint __glLightiv_size(GLenum pname)
+{
+ return __glLightfv_size(pname);
+}
+
+GLint __glLightModelfv_size(GLenum pname)
+{
+ switch (pname) {
+ case GL_LIGHT_MODEL_AMBIENT: return 4;
+ case GL_LIGHT_MODEL_LOCAL_VIEWER: return 1;
+ case GL_LIGHT_MODEL_TWO_SIDE: return 1;
+ case GL_LIGHT_MODEL_COLOR_CONTROL: return 1;
+ default:
+ return 0;
+ }
+}
+
+GLint __glLightModeliv_size(GLenum pname)
+{
+ return __glLightModelfv_size(pname);
+}
+
+GLint __glMaterialfv_size(GLenum pname)
+{
+ switch (pname) {
+ case GL_SHININESS: return 1;
+ case GL_EMISSION: return 4;
+ case GL_AMBIENT: return 4;
+ case GL_DIFFUSE: return 4;
+ case GL_SPECULAR: return 4;
+ case GL_AMBIENT_AND_DIFFUSE: return 4;
+ case GL_COLOR_INDEXES: return 3;
+ default:
+ return 0;
+ }
+}
+
+GLint __glMaterialiv_size(GLenum pname)
+{
+ return __glMaterialfv_size(pname);
+}
+
+GLint __glColorTableParameterfv_size(GLenum pname)
+{
+ switch (pname) {
+ case GL_COLOR_TABLE_FORMAT:
+ case GL_COLOR_TABLE_WIDTH:
+ case GL_COLOR_TABLE_RED_SIZE:
+ case GL_COLOR_TABLE_GREEN_SIZE:
+ case GL_COLOR_TABLE_BLUE_SIZE:
+ case GL_COLOR_TABLE_ALPHA_SIZE:
+ case GL_COLOR_TABLE_LUMINANCE_SIZE:
+ case GL_COLOR_TABLE_INTENSITY_SIZE:
+ return 1;
+ case GL_COLOR_TABLE_SCALE:
+ case GL_COLOR_TABLE_BIAS:
+ return 4;
+ default:
+ return -1;
+ }
+}
+
+GLint __glColorTableParameteriv_size(GLenum pname)
+{
+ return __glColorTableParameterfv_size(pname);
+}
+
+GLint __glConvolutionParameterfv_size(GLenum pname)
+{
+ switch(pname) {
+ case GL_CONVOLUTION_BORDER_MODE:
+ return 1;
+ case GL_CONVOLUTION_BORDER_COLOR:
+ case GL_CONVOLUTION_FILTER_SCALE:
+ case GL_CONVOLUTION_FILTER_BIAS:
+ return 4;
+ default: /* error: bad enum value */
+ return -1;
+ }
+}
+
+GLint __glConvolutionParameteriv_size(GLenum pname)
+{
+ return __glConvolutionParameterfv_size(pname);
+}
diff --git a/hw/dmx/glxProxy/g_disptab.c b/hw/dmx/glxProxy/g_disptab.c
new file mode 100644
index 0000000..3f0a6e7
--- /dev/null
+++ b/hw/dmx/glxProxy/g_disptab.c
@@ -0,0 +1,612 @@
+/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED */
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+#include "glxext.h"
+#include "g_disptab.h"
+#include "glxsingle.h"
+
+__GLXdispatchSingleProcPtr __glXSingleTable[] = {
+ __glXNoSuchSingleOpcode,
+ __glXRender,
+ __glXRenderLarge,
+ __glXCreateContext,
+ __glXDestroyContext,
+ __glXMakeCurrent,
+ __glXIsDirect,
+ __glXQueryVersion,
+ __glXWaitGL,
+ __glXWaitX,
+ __glXCopyContext,
+ __glXSwapBuffers,
+ __glXUseXFont,
+ __glXCreateGLXPixmap,
+ __glXGetVisualConfigs,
+ __glXDestroyGLXPixmap,
+ __glXVendorPrivate,
+ __glXVendorPrivateWithReply,
+ __glXQueryExtensionsString,
+ __glXQueryServerString,
+ __glXClientInfo,
+ __glXGetFBConfigs, /* __glXGetFBConfigs */
+ __glXCreatePixmap, /* __glXCreatePixmap,*/
+ __glXDestroyGLXPixmap, /* __glXDestroyPixmap,*/
+ __glXCreateNewContext, /* __glXCreateNewContext,*/
+ __glXQueryContext, /* __glXQueryContext,*/
+ __glXMakeContextCurrent, /* __glXMakeContextCurrent,*/
+ __glXCreatePbuffer, /* __glXCreatePbuffer,*/
+ __glXDestroyPbuffer, /* __glXDestroyPbuffer,*/
+ __glXGetDrawableAttributes, /* __glXGetDrawableAttributes,*/
+ __glXChangeDrawableAttributes, /* __glXChangeDrawableAttributes,*/
+ __glXCreateWindow, /* __glXCreateWindow,*/
+ __glXDestroyWindow, /* __glXDestroyWindow,*/
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXForwardSingleReq, /* __glXDisp_NewList, */
+ __glXForwardSingleReq, /* __glXDisp_EndList, */
+ __glXForwardSingleReq, /* __glXDisp_DeleteLists, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GenLists, */
+ __glXForwardSingleReq, /* __glXDisp_FeedbackBuffer, */
+ __glXForwardSingleReq, /* __glXDisp_SelectBuffer, */
+ __glXForwardAllWithReply, /* __glXDisp_RenderMode, */
+ __glXForwardAllWithReply, /* __glXDisp_Finish, */
+ __glXForwardSingleReq, /* __glXDisp_PixelStoref, */
+ __glXForwardSingleReq, /* __glXDisp_PixelStorei, */
+ __glXDisp_ReadPixels, /* __glXDisp_ReadPixels, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetBooleanv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetClipPlane, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetDoublev, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetError, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetFloatv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetIntegerv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetLightfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetLightiv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMapdv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMapfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMapiv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMaterialfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMaterialiv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetPixelMapfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetPixelMapuiv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetPixelMapusv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetPolygonStipple, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetString, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexEnvfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexEnviv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexGendv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexGenfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexGeniv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexImage, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexParameterfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexParameteriv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexLevelParameterfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetTexLevelParameteriv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_IsEnabled, */
+ __glXForwardPipe0WithReply, /* __glXDisp_IsList, */
+ __glXForwardSingleReq, /* __glXDisp_Flush, */
+ __glXForwardPipe0WithReply, /* __glXDisp_AreTexturesResident, */
+ __glXForwardSingleReq, /* __glXDisp_DeleteTextures, */
+ __glXForwardAllWithReply, /* __glXDisp_GenTextures, */
+ __glXForwardPipe0WithReply, /* __glXDisp_IsTexture, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetColorTable, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetColorTableParameterfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetColorTableParameteriv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetConvolutionFilter, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetConvolutionParameterfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetConvolutionParameteriv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetSeparableFilter, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetHistogram, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetHistogramParameterfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetHistogramParameteriv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMinmax, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMinmaxParameterfv, */
+ __glXForwardPipe0WithReply, /* __glXDisp_GetMinmaxParameteriv, */
+};
+
+__GLXdispatchSingleProcPtr __glXSwapSingleTable[] = {
+ __glXNoSuchSingleOpcode,
+ __glXSwapRender,
+ __glXSwapRenderLarge,
+ __glXSwapCreateContext,
+ __glXSwapDestroyContext,
+ __glXSwapMakeCurrent,
+ __glXSwapIsDirect,
+ __glXSwapQueryVersion,
+ __glXSwapWaitGL,
+ __glXSwapWaitX,
+ __glXSwapCopyContext,
+ __glXSwapSwapBuffers,
+ __glXSwapUseXFont,
+ __glXSwapCreateGLXPixmap,
+ __glXSwapGetVisualConfigs,
+ __glXSwapDestroyGLXPixmap,
+ __glXSwapVendorPrivate,
+ __glXSwapVendorPrivateWithReply,
+ __glXSwapQueryExtensionsString,
+ __glXSwapQueryServerString,
+ __glXSwapClientInfo,
+ __glXSwapGetFBConfigs,
+ __glXSwapCreatePixmap,
+ __glXSwapDestroyGLXPixmap,
+ __glXSwapCreateNewContext,
+ __glXSwapQueryContext,
+ __glXSwapMakeContextCurrent,
+ __glXSwapCreatePbuffer,
+ __glXSwapDestroyPbuffer,
+ __glXSwapGetDrawableAttributes,
+ __glXSwapChangeDrawableAttributes,
+ __glXSwapCreateWindow,
+ __glXSwapDestroyWindow,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXNoSuchSingleOpcode,
+ __glXForwardSingleReqSwap, /* __glXDisp_NewList, */
+ __glXForwardSingleReqSwap, /* __glXDisp_EndList, */
+ __glXForwardSingleReqSwap, /* __glXDisp_DeleteLists, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_GenLists, */
+ __glXForwardSingleReqSwap, /* __glXDisp_FeedbackBuffer, */
+ __glXForwardSingleReqSwap, /* __glXDisp_SelectBuffer, */
+ __glXForwardAllWithReplySwapiv, /* __glXDisp_RenderMode, */
+ __glXForwardAllWithReplySwap, /* __glXDisp_Finish, */
+ __glXForwardSingleReqSwap, /* __glXDisp_PixelStoref, */
+ __glXForwardSingleReqSwap, /* __glXDisp_PixelStorei, */
+ __glXDisp_ReadPixels, /* __glXDisp_ReadPixels, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_GetBooleanv, */
+ __glXForwardPipe0WithReplySwapdv, /* __glXDisp_GetClipPlane, */
+ __glXForwardPipe0WithReplySwapdv, /* __glXDisp_GetDoublev, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_GetError, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetFloatv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetIntegerv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetLightfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetLightiv, */
+ __glXForwardPipe0WithReplySwapdv, /* __glXDisp_GetMapdv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetMapfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetMapiv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetMaterialfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetMaterialiv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetPixelMapfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetPixelMapuiv, */
+ __glXForwardPipe0WithReplySwapsv, /* __glXDisp_GetPixelMapusv, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_GetPolygonStipple, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_GetString, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexEnvfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexEnviv, */
+ __glXForwardPipe0WithReplySwapdv, /* __glXDisp_GetTexGendv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexGenfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexGeniv, */
+ __glXDispSwap_GetTexImage, /* __glXDisp_GetTexImage, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexParameterfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexParameteriv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexLevelParameterfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetTexLevelParameteriv, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_IsEnabled, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_IsList, */
+ __glXForwardSingleReqSwap, /* __glXDisp_Flush, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_AreTexturesResident, */
+ __glXForwardSingleReqSwap, /* __glXDisp_DeleteTextures, */
+ __glXForwardAllWithReplySwapiv, /* __glXDisp_GenTextures, */
+ __glXForwardPipe0WithReplySwap, /* __glXDisp_IsTexture, */
+ __glXDispSwap_GetColorTable, /* __glXDisp_GetColorTable, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetColorTableParameterfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetColorTableParameteriv, */
+ __glXDispSwap_GetColorTable, /* __glXDisp_GetConvolutionFilter, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetConvolutionParameterfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetConvolutionParameteriv, */
+ __glXDispSwap_GetColorTable, /* __glXDisp_GetSeparableFilter, */
+ __glXDispSwap_GetColorTable, /* __glXDisp_GetHistogram, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetHistogramParameterfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetHistogramParameteriv, */
+ __glXDispSwap_GetColorTable, /* __glXDisp_GetMinmax, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetMinmaxParameterfv, */
+ __glXForwardPipe0WithReplySwapiv, /* __glXDisp_GetMinmaxParameteriv, */
+};
+
+__GLXdispatchRenderProcPtr __glXSwapRenderTable[] = {
+ __glXNoSuchRenderOpcode,
+ __glXDispSwap_CallList,
+ __glXDispSwap_CallLists,
+ __glXDispSwap_ListBase,
+ __glXDispSwap_Begin,
+ __glXDispSwap_Bitmap,
+ __glXDispSwap_Color3bv,
+ __glXDispSwap_Color3dv,
+ __glXDispSwap_Color3fv,
+ __glXDispSwap_Color3iv,
+ __glXDispSwap_Color3sv,
+ __glXDispSwap_Color3ubv,
+ __glXDispSwap_Color3uiv,
+ __glXDispSwap_Color3usv,
+ __glXDispSwap_Color4bv,
+ __glXDispSwap_Color4dv,
+ __glXDispSwap_Color4fv,
+ __glXDispSwap_Color4iv,
+ __glXDispSwap_Color4sv,
+ __glXDispSwap_Color4ubv,
+ __glXDispSwap_Color4uiv,
+ __glXDispSwap_Color4usv,
+ __glXDispSwap_EdgeFlagv,
+ __glXDispSwap_End,
+ __glXDispSwap_Indexdv,
+ __glXDispSwap_Indexfv,
+ __glXDispSwap_Indexiv,
+ __glXDispSwap_Indexsv,
+ __glXDispSwap_Normal3bv,
+ __glXDispSwap_Normal3dv,
+ __glXDispSwap_Normal3fv,
+ __glXDispSwap_Normal3iv,
+ __glXDispSwap_Normal3sv,
+ __glXDispSwap_RasterPos2dv,
+ __glXDispSwap_RasterPos2fv,
+ __glXDispSwap_RasterPos2iv,
+ __glXDispSwap_RasterPos2sv,
+ __glXDispSwap_RasterPos3dv,
+ __glXDispSwap_RasterPos3fv,
+ __glXDispSwap_RasterPos3iv,
+ __glXDispSwap_RasterPos3sv,
+ __glXDispSwap_RasterPos4dv,
+ __glXDispSwap_RasterPos4fv,
+ __glXDispSwap_RasterPos4iv,
+ __glXDispSwap_RasterPos4sv,
+ __glXDispSwap_Rectdv,
+ __glXDispSwap_Rectfv,
+ __glXDispSwap_Rectiv,
+ __glXDispSwap_Rectsv,
+ __glXDispSwap_TexCoord1dv,
+ __glXDispSwap_TexCoord1fv,
+ __glXDispSwap_TexCoord1iv,
+ __glXDispSwap_TexCoord1sv,
+ __glXDispSwap_TexCoord2dv,
+ __glXDispSwap_TexCoord2fv,
+ __glXDispSwap_TexCoord2iv,
+ __glXDispSwap_TexCoord2sv,
+ __glXDispSwap_TexCoord3dv,
+ __glXDispSwap_TexCoord3fv,
+ __glXDispSwap_TexCoord3iv,
+ __glXDispSwap_TexCoord3sv,
+ __glXDispSwap_TexCoord4dv,
+ __glXDispSwap_TexCoord4fv,
+ __glXDispSwap_TexCoord4iv,
+ __glXDispSwap_TexCoord4sv,
+ __glXDispSwap_Vertex2dv,
+ __glXDispSwap_Vertex2fv,
+ __glXDispSwap_Vertex2iv,
+ __glXDispSwap_Vertex2sv,
+ __glXDispSwap_Vertex3dv,
+ __glXDispSwap_Vertex3fv,
+ __glXDispSwap_Vertex3iv,
+ __glXDispSwap_Vertex3sv,
+ __glXDispSwap_Vertex4dv,
+ __glXDispSwap_Vertex4fv,
+ __glXDispSwap_Vertex4iv,
+ __glXDispSwap_Vertex4sv,
+ __glXDispSwap_ClipPlane,
+ __glXDispSwap_ColorMaterial,
+ __glXDispSwap_CullFace,
+ __glXDispSwap_Fogf,
+ __glXDispSwap_Fogfv,
+ __glXDispSwap_Fogi,
+ __glXDispSwap_Fogiv,
+ __glXDispSwap_FrontFace,
+ __glXDispSwap_Hint,
+ __glXDispSwap_Lightf,
+ __glXDispSwap_Lightfv,
+ __glXDispSwap_Lighti,
+ __glXDispSwap_Lightiv,
+ __glXDispSwap_LightModelf,
+ __glXDispSwap_LightModelfv,
+ __glXDispSwap_LightModeli,
+ __glXDispSwap_LightModeliv,
+ __glXDispSwap_LineStipple,
+ __glXDispSwap_LineWidth,
+ __glXDispSwap_Materialf,
+ __glXDispSwap_Materialfv,
+ __glXDispSwap_Materiali,
+ __glXDispSwap_Materialiv,
+ __glXDispSwap_PointSize,
+ __glXDispSwap_PolygonMode,
+ __glXDispSwap_PolygonStipple,
+ __glXDispSwap_Scissor,
+ __glXDispSwap_ShadeModel,
+ __glXDispSwap_TexParameterf,
+ __glXDispSwap_TexParameterfv,
+ __glXDispSwap_TexParameteri,
+ __glXDispSwap_TexParameteriv,
+ __glXDispSwap_TexImage1D,
+ __glXDispSwap_TexImage2D,
+ __glXDispSwap_TexEnvf,
+ __glXDispSwap_TexEnvfv,
+ __glXDispSwap_TexEnvi,
+ __glXDispSwap_TexEnviv,
+ __glXDispSwap_TexGend,
+ __glXDispSwap_TexGendv,
+ __glXDispSwap_TexGenf,
+ __glXDispSwap_TexGenfv,
+ __glXDispSwap_TexGeni,
+ __glXDispSwap_TexGeniv,
+ __glXDispSwap_InitNames,
+ __glXDispSwap_LoadName,
+ __glXDispSwap_PassThrough,
+ __glXDispSwap_PopName,
+ __glXDispSwap_PushName,
+ __glXDispSwap_DrawBuffer,
+ __glXDispSwap_Clear,
+ __glXDispSwap_ClearAccum,
+ __glXDispSwap_ClearIndex,
+ __glXDispSwap_ClearColor,
+ __glXDispSwap_ClearStencil,
+ __glXDispSwap_ClearDepth,
+ __glXDispSwap_StencilMask,
+ __glXDispSwap_ColorMask,
+ __glXDispSwap_DepthMask,
+ __glXDispSwap_IndexMask,
+ __glXDispSwap_Accum,
+ __glXDispSwap_Disable,
+ __glXDispSwap_Enable,
+ __glXNoSuchRenderOpcode,
+ __glXDispSwap_PopAttrib,
+ __glXDispSwap_PushAttrib,
+ __glXDispSwap_Map1d,
+ __glXDispSwap_Map1f,
+ __glXDispSwap_Map2d,
+ __glXDispSwap_Map2f,
+ __glXDispSwap_MapGrid1d,
+ __glXDispSwap_MapGrid1f,
+ __glXDispSwap_MapGrid2d,
+ __glXDispSwap_MapGrid2f,
+ __glXDispSwap_EvalCoord1dv,
+ __glXDispSwap_EvalCoord1fv,
+ __glXDispSwap_EvalCoord2dv,
+ __glXDispSwap_EvalCoord2fv,
+ __glXDispSwap_EvalMesh1,
+ __glXDispSwap_EvalPoint1,
+ __glXDispSwap_EvalMesh2,
+ __glXDispSwap_EvalPoint2,
+ __glXDispSwap_AlphaFunc,
+ __glXDispSwap_BlendFunc,
+ __glXDispSwap_LogicOp,
+ __glXDispSwap_StencilFunc,
+ __glXDispSwap_StencilOp,
+ __glXDispSwap_DepthFunc,
+ __glXDispSwap_PixelZoom,
+ __glXDispSwap_PixelTransferf,
+ __glXDispSwap_PixelTransferi,
+ __glXDispSwap_PixelMapfv,
+ __glXDispSwap_PixelMapuiv,
+ __glXDispSwap_PixelMapusv,
+ __glXDispSwap_ReadBuffer,
+ __glXDispSwap_CopyPixels,
+ __glXDispSwap_DrawPixels,
+ __glXDispSwap_DepthRange,
+ __glXDispSwap_Frustum,
+ __glXDispSwap_LoadIdentity,
+ __glXDispSwap_LoadMatrixf,
+ __glXDispSwap_LoadMatrixd,
+ __glXDispSwap_MatrixMode,
+ __glXDispSwap_MultMatrixf,
+ __glXDispSwap_MultMatrixd,
+ __glXDispSwap_Ortho,
+ __glXDispSwap_PopMatrix,
+ __glXDispSwap_PushMatrix,
+ __glXDispSwap_Rotated,
+ __glXDispSwap_Rotatef,
+ __glXDispSwap_Scaled,
+ __glXDispSwap_Scalef,
+ __glXDispSwap_Translated,
+ __glXDispSwap_Translatef,
+ __glXDispSwap_Viewport,
+ __glXDispSwap_PolygonOffset,
+ __glXDispSwap_DrawArrays,
+ __glXDispSwap_Indexubv,
+ __glXDispSwap_ColorSubTable,
+ __glXDispSwap_CopyColorSubTable,
+ __glXDispSwap_ActiveTextureARB,
+ __glXDispSwap_MultiTexCoord1dvARB,
+ __glXDispSwap_MultiTexCoord1fvARB,
+ __glXDispSwap_MultiTexCoord1ivARB,
+ __glXDispSwap_MultiTexCoord1svARB,
+ __glXDispSwap_MultiTexCoord2dvARB,
+ __glXDispSwap_MultiTexCoord2fvARB,
+ __glXDispSwap_MultiTexCoord2ivARB,
+ __glXDispSwap_MultiTexCoord2svARB,
+ __glXDispSwap_MultiTexCoord3dvARB,
+ __glXDispSwap_MultiTexCoord3fvARB,
+ __glXDispSwap_MultiTexCoord3ivARB,
+ __glXDispSwap_MultiTexCoord3svARB,
+ __glXDispSwap_MultiTexCoord4dvARB,
+ __glXDispSwap_MultiTexCoord4fvARB,
+ __glXDispSwap_MultiTexCoord4ivARB,
+ __glXDispSwap_MultiTexCoord4svARB,
+};
+
+__GLXRenderSwapInfo __glXSwapRenderTable_EXT[] =
+{
+ {4, 4, NULL}, /* X_GLrop_BlendColorEXT */
+ {4, 1, NULL}, /* X_GLrop_BlendEquationEXT */
+ {4, 2, NULL}, /* X_GLrop_PolygonOffsetEXT */
+ {4, 0, __glXDispSwap_TexSubImage1D}, /* X_GLrop_TexSubImage1DEXT */
+ {4, 0, __glXDispSwap_TexSubImage2D}, /* X_GLrop_TexSubImage2DEXT */
+ {4, 0, __glXDispSwap_ConvolutionFilter1D}, /* X_GLrop_ConvolutionFilter1DEXT */
+ {4, 0, __glXDispSwap_ConvolutionFilter2D}, /* X_GLrop_ConvolutionFilter2DEXT */
+ {4, 3, NULL}, /* X_GLrop_ConvolutionParameterfEXT */
+ {4, 0, __glXDispSwap_ConvolutionParameterfv}, /* X_GLrop_ConvolutionParameterfvEXT */
+ {4, 3, NULL}, /* X_GLrop_ConvolutionParameteriEXT */
+ {4, 0, __glXDispSwap_ConvolutionParameteriv}, /* X_GLrop_ConvolutionParameterivEXT */
+ {4, 0, __glXDispSwap_CopyConvolutionFilter1D}, /* X_GLrop_CopyConvolutionFilter1DEXT */
+ {4, 0, __glXDispSwap_CopyConvolutionFilter2D}, /* X_GLrop_CopyConvolutionFilter2DEXT */
+ {4, 0, __glXDispSwap_SeparableFilter2D}, /* X_GLrop_SeparableFilter2DEXT */
+ {4, 3, NULL}, /* X_GLrop_HistogramEXT */
+ {4, 2, NULL}, /* X_GLrop_MinmaxEXT */
+ {4, 1, NULL}, /* X_GLrop_ResetHistogramEXT */
+ {4, 1, NULL}, /* X_GLrop_ResetMinmaxEXT */
+ {4, 0, __glXDispSwap_TexImage3D}, /* X_GLrop_TexImage3DEXT */
+ {4, 0, __glXDispSwap_TexSubImage3D}, /* X_GLrop_TexSubImage3DEXT */
+ {4, 0, __glXDispSwap_DrawArrays}, /* X_GLrop_DrawArraysEXT */
+ {4, 2, NULL}, /* X_GLrop_BindTextureEXT */
+ {4, 0, __glXDispSwap_PrioritizeTextures}, /* X_GLrop_PrioritizeTexturesEXT */
+ {4, 0, __glXDispSwap_CopyTexImage1D}, /* X_GLrop_CopyTexImage1DEXT */
+ {4, 0, __glXDispSwap_CopyTexImage2D}, /* X_GLrop_CopyTexImage2DEXT */
+ {4, 0, __glXDispSwap_CopyTexSubImage1D}, /* X_GLrop_CopyTexSubImage1DEXT */
+ {4, 0, __glXDispSwap_CopyTexSubImage2D}, /* X_GLrop_CopyTexSubImage2DEXT */
+ {4, 0, __glXDispSwap_CopyTexSubImage3D}, /* X_GLrop_CopyTexSubImage3DEXT */
+
+};
+
diff --git a/hw/dmx/glxProxy/g_disptab.h b/hw/dmx/glxProxy/g_disptab.h
new file mode 100644
index 0000000..c497c88
--- /dev/null
+++ b/hw/dmx/glxProxy/g_disptab.h
@@ -0,0 +1,676 @@
+/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED */
+#ifndef _GLX_g_disptab_h_
+#define _GLX_g_disptab_h_
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+extern int __glXRender(__GLXclientState*, GLbyte*);
+extern int __glXRenderLarge(__GLXclientState*, GLbyte*);
+extern int __glXSendLargeCommand(__GLXclientState *cl, GLXContextTag contextTag);
+extern int __glXCreateContext(__GLXclientState*, GLbyte*);
+extern int __glXCreateNewContext(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDestroyContext(__GLXclientState*, GLbyte*);
+extern int __glXMakeCurrent(__GLXclientState*, GLbyte*);
+extern int __glXMakeContextCurrent(__GLXclientState*, GLbyte*);
+extern int __glXCreatePbuffer(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDestroyPbuffer(__GLXclientState *cl, GLbyte *pc);
+extern int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc);
+extern int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc);
+extern int __glXIsDirect(__GLXclientState*, GLbyte*);
+extern int __glXQueryVersion(__GLXclientState*, GLbyte*);
+extern int __glXWaitGL(__GLXclientState*, GLbyte*);
+extern int __glXWaitX(__GLXclientState*, GLbyte*);
+extern int __glXCopyContext(__GLXclientState*, GLbyte*);
+extern int __glXSwapBuffers(__GLXclientState*, GLbyte*);
+extern int __glXUseXFont(__GLXclientState*, GLbyte*);
+extern int __glXCreateGLXPixmap(__GLXclientState*, GLbyte*);
+extern int __glXCreatePixmap(__GLXclientState *cl, GLbyte *pc);
+extern int __glXGetVisualConfigs(__GLXclientState*, GLbyte*);
+extern int __glXDestroyGLXPixmap(__GLXclientState*, GLbyte*);
+extern int __glXVendorPrivate(__GLXclientState*, GLbyte*);
+extern int __glXVendorPrivateWithReply(__GLXclientState*, GLbyte*);
+extern int __glXQueryExtensionsString(__GLXclientState*, GLbyte*);
+extern int __glXQueryServerString(__GLXclientState*, GLbyte*);
+extern int __glXClientInfo(__GLXclientState*, GLbyte*);
+extern int __glXGetFBConfigs(__GLXclientState*, GLbyte*);
+extern int __glXCreateWindow(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDestroyWindow(__GLXclientState *cl, GLbyte *pc);
+extern int __glXQueryContext(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDisp_NewList(__GLXclientState*, GLbyte*);
+extern int __glXDisp_EndList(__GLXclientState*, GLbyte*);
+extern int __glXDisp_DeleteLists(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GenLists(__GLXclientState*, GLbyte*);
+extern int __glXDisp_FeedbackBuffer(__GLXclientState*, GLbyte*);
+extern int __glXDisp_SelectBuffer(__GLXclientState*, GLbyte*);
+extern int __glXDisp_RenderMode(__GLXclientState*, GLbyte*);
+extern int __glXDisp_Finish(__GLXclientState*, GLbyte*);
+extern int __glXDisp_PixelStoref(__GLXclientState*, GLbyte*);
+extern int __glXDisp_PixelStorei(__GLXclientState*, GLbyte*);
+extern int __glXDisp_ReadPixels(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetBooleanv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetClipPlane(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetDoublev(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetError(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetFloatv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetIntegerv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetLightfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetLightiv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMapdv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMapfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMapiv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMaterialfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMaterialiv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetPixelMapfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetPixelMapuiv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetPixelMapusv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetPolygonStipple(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetString(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexEnvfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexEnviv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexGendv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexGenfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexGeniv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexImage(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexLevelParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetTexLevelParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_IsEnabled(__GLXclientState*, GLbyte*);
+extern int __glXDisp_IsList(__GLXclientState*, GLbyte*);
+extern int __glXDisp_Flush(__GLXclientState*, GLbyte*);
+extern int __glXDisp_AreTexturesResident(__GLXclientState*, GLbyte*);
+extern int __glXDisp_DeleteTextures(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GenTextures(__GLXclientState*, GLbyte*);
+extern int __glXDisp_IsTexture(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetColorTable(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetColorTableParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetColorTableParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetConvolutionFilter(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetConvolutionParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetConvolutionParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetSeparableFilter(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetHistogram(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetHistogramParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetHistogramParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMinmax(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMinmaxParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDisp_GetMinmaxParameteriv(__GLXclientState*, GLbyte*);
+
+extern void __glXDisp_CallList(GLbyte*);
+extern void __glXDisp_CallLists(GLbyte*);
+extern void __glXDisp_ListBase(GLbyte*);
+extern void __glXDisp_Begin(GLbyte*);
+extern void __glXDisp_Bitmap(GLbyte*);
+extern void __glXDisp_Color3bv(GLbyte*);
+extern void __glXDisp_Color3dv(GLbyte*);
+extern void __glXDisp_Color3fv(GLbyte*);
+extern void __glXDisp_Color3iv(GLbyte*);
+extern void __glXDisp_Color3sv(GLbyte*);
+extern void __glXDisp_Color3ubv(GLbyte*);
+extern void __glXDisp_Color3uiv(GLbyte*);
+extern void __glXDisp_Color3usv(GLbyte*);
+extern void __glXDisp_Color4bv(GLbyte*);
+extern void __glXDisp_Color4dv(GLbyte*);
+extern void __glXDisp_Color4fv(GLbyte*);
+extern void __glXDisp_Color4iv(GLbyte*);
+extern void __glXDisp_Color4sv(GLbyte*);
+extern void __glXDisp_Color4ubv(GLbyte*);
+extern void __glXDisp_Color4uiv(GLbyte*);
+extern void __glXDisp_Color4usv(GLbyte*);
+extern void __glXDisp_EdgeFlagv(GLbyte*);
+extern void __glXDisp_End(GLbyte*);
+extern void __glXDisp_Indexdv(GLbyte*);
+extern void __glXDisp_Indexfv(GLbyte*);
+extern void __glXDisp_Indexiv(GLbyte*);
+extern void __glXDisp_Indexsv(GLbyte*);
+extern void __glXDisp_Normal3bv(GLbyte*);
+extern void __glXDisp_Normal3dv(GLbyte*);
+extern void __glXDisp_Normal3fv(GLbyte*);
+extern void __glXDisp_Normal3iv(GLbyte*);
+extern void __glXDisp_Normal3sv(GLbyte*);
+extern void __glXDisp_RasterPos2dv(GLbyte*);
+extern void __glXDisp_RasterPos2fv(GLbyte*);
+extern void __glXDisp_RasterPos2iv(GLbyte*);
+extern void __glXDisp_RasterPos2sv(GLbyte*);
+extern void __glXDisp_RasterPos3dv(GLbyte*);
+extern void __glXDisp_RasterPos3fv(GLbyte*);
+extern void __glXDisp_RasterPos3iv(GLbyte*);
+extern void __glXDisp_RasterPos3sv(GLbyte*);
+extern void __glXDisp_RasterPos4dv(GLbyte*);
+extern void __glXDisp_RasterPos4fv(GLbyte*);
+extern void __glXDisp_RasterPos4iv(GLbyte*);
+extern void __glXDisp_RasterPos4sv(GLbyte*);
+extern void __glXDisp_Rectdv(GLbyte*);
+extern void __glXDisp_Rectfv(GLbyte*);
+extern void __glXDisp_Rectiv(GLbyte*);
+extern void __glXDisp_Rectsv(GLbyte*);
+extern void __glXDisp_TexCoord1dv(GLbyte*);
+extern void __glXDisp_TexCoord1fv(GLbyte*);
+extern void __glXDisp_TexCoord1iv(GLbyte*);
+extern void __glXDisp_TexCoord1sv(GLbyte*);
+extern void __glXDisp_TexCoord2dv(GLbyte*);
+extern void __glXDisp_TexCoord2fv(GLbyte*);
+extern void __glXDisp_TexCoord2iv(GLbyte*);
+extern void __glXDisp_TexCoord2sv(GLbyte*);
+extern void __glXDisp_TexCoord3dv(GLbyte*);
+extern void __glXDisp_TexCoord3fv(GLbyte*);
+extern void __glXDisp_TexCoord3iv(GLbyte*);
+extern void __glXDisp_TexCoord3sv(GLbyte*);
+extern void __glXDisp_TexCoord4dv(GLbyte*);
+extern void __glXDisp_TexCoord4fv(GLbyte*);
+extern void __glXDisp_TexCoord4iv(GLbyte*);
+extern void __glXDisp_TexCoord4sv(GLbyte*);
+extern void __glXDisp_Vertex2dv(GLbyte*);
+extern void __glXDisp_Vertex2fv(GLbyte*);
+extern void __glXDisp_Vertex2iv(GLbyte*);
+extern void __glXDisp_Vertex2sv(GLbyte*);
+extern void __glXDisp_Vertex3dv(GLbyte*);
+extern void __glXDisp_Vertex3fv(GLbyte*);
+extern void __glXDisp_Vertex3iv(GLbyte*);
+extern void __glXDisp_Vertex3sv(GLbyte*);
+extern void __glXDisp_Vertex4dv(GLbyte*);
+extern void __glXDisp_Vertex4fv(GLbyte*);
+extern void __glXDisp_Vertex4iv(GLbyte*);
+extern void __glXDisp_Vertex4sv(GLbyte*);
+extern void __glXDisp_ClipPlane(GLbyte*);
+extern void __glXDisp_ColorMaterial(GLbyte*);
+extern void __glXDisp_CullFace(GLbyte*);
+extern void __glXDisp_Fogf(GLbyte*);
+extern void __glXDisp_Fogfv(GLbyte*);
+extern void __glXDisp_Fogi(GLbyte*);
+extern void __glXDisp_Fogiv(GLbyte*);
+extern void __glXDisp_FrontFace(GLbyte*);
+extern void __glXDisp_Hint(GLbyte*);
+extern void __glXDisp_Lightf(GLbyte*);
+extern void __glXDisp_Lightfv(GLbyte*);
+extern void __glXDisp_Lighti(GLbyte*);
+extern void __glXDisp_Lightiv(GLbyte*);
+extern void __glXDisp_LightModelf(GLbyte*);
+extern void __glXDisp_LightModelfv(GLbyte*);
+extern void __glXDisp_LightModeli(GLbyte*);
+extern void __glXDisp_LightModeliv(GLbyte*);
+extern void __glXDisp_LineStipple(GLbyte*);
+extern void __glXDisp_LineWidth(GLbyte*);
+extern void __glXDisp_Materialf(GLbyte*);
+extern void __glXDisp_Materialfv(GLbyte*);
+extern void __glXDisp_Materiali(GLbyte*);
+extern void __glXDisp_Materialiv(GLbyte*);
+extern void __glXDisp_PointSize(GLbyte*);
+extern void __glXDisp_PolygonMode(GLbyte*);
+extern void __glXDisp_PolygonStipple(GLbyte*);
+extern void __glXDisp_Scissor(GLbyte*);
+extern void __glXDisp_ShadeModel(GLbyte*);
+extern void __glXDisp_TexParameterf(GLbyte*);
+extern void __glXDisp_TexParameterfv(GLbyte*);
+extern void __glXDisp_TexParameteri(GLbyte*);
+extern void __glXDisp_TexParameteriv(GLbyte*);
+extern void __glXDisp_TexImage1D(GLbyte*);
+extern void __glXDisp_TexImage2D(GLbyte*);
+extern void __glXDisp_TexEnvf(GLbyte*);
+extern void __glXDisp_TexEnvfv(GLbyte*);
+extern void __glXDisp_TexEnvi(GLbyte*);
+extern void __glXDisp_TexEnviv(GLbyte*);
+extern void __glXDisp_TexGend(GLbyte*);
+extern void __glXDisp_TexGendv(GLbyte*);
+extern void __glXDisp_TexGenf(GLbyte*);
+extern void __glXDisp_TexGenfv(GLbyte*);
+extern void __glXDisp_TexGeni(GLbyte*);
+extern void __glXDisp_TexGeniv(GLbyte*);
+extern void __glXDisp_InitNames(GLbyte*);
+extern void __glXDisp_LoadName(GLbyte*);
+extern void __glXDisp_PassThrough(GLbyte*);
+extern void __glXDisp_PopName(GLbyte*);
+extern void __glXDisp_PushName(GLbyte*);
+extern void __glXDisp_DrawBuffer(GLbyte*);
+extern void __glXDisp_Clear(GLbyte*);
+extern void __glXDisp_ClearAccum(GLbyte*);
+extern void __glXDisp_ClearIndex(GLbyte*);
+extern void __glXDisp_ClearColor(GLbyte*);
+extern void __glXDisp_ClearStencil(GLbyte*);
+extern void __glXDisp_ClearDepth(GLbyte*);
+extern void __glXDisp_StencilMask(GLbyte*);
+extern void __glXDisp_ColorMask(GLbyte*);
+extern void __glXDisp_DepthMask(GLbyte*);
+extern void __glXDisp_IndexMask(GLbyte*);
+extern void __glXDisp_Accum(GLbyte*);
+extern void __glXDisp_Disable(GLbyte*);
+extern void __glXDisp_Enable(GLbyte*);
+extern void __glXDisp_PopAttrib(GLbyte*);
+extern void __glXDisp_PushAttrib(GLbyte*);
+extern void __glXDisp_Map1d(GLbyte*);
+extern void __glXDisp_Map1f(GLbyte*);
+extern void __glXDisp_Map2d(GLbyte*);
+extern void __glXDisp_Map2f(GLbyte*);
+extern void __glXDisp_MapGrid1d(GLbyte*);
+extern void __glXDisp_MapGrid1f(GLbyte*);
+extern void __glXDisp_MapGrid2d(GLbyte*);
+extern void __glXDisp_MapGrid2f(GLbyte*);
+extern void __glXDisp_EvalCoord1dv(GLbyte*);
+extern void __glXDisp_EvalCoord1fv(GLbyte*);
+extern void __glXDisp_EvalCoord2dv(GLbyte*);
+extern void __glXDisp_EvalCoord2fv(GLbyte*);
+extern void __glXDisp_EvalMesh1(GLbyte*);
+extern void __glXDisp_EvalPoint1(GLbyte*);
+extern void __glXDisp_EvalMesh2(GLbyte*);
+extern void __glXDisp_EvalPoint2(GLbyte*);
+extern void __glXDisp_AlphaFunc(GLbyte*);
+extern void __glXDisp_BlendFunc(GLbyte*);
+extern void __glXDisp_LogicOp(GLbyte*);
+extern void __glXDisp_StencilFunc(GLbyte*);
+extern void __glXDisp_StencilOp(GLbyte*);
+extern void __glXDisp_DepthFunc(GLbyte*);
+extern void __glXDisp_PixelZoom(GLbyte*);
+extern void __glXDisp_PixelTransferf(GLbyte*);
+extern void __glXDisp_PixelTransferi(GLbyte*);
+extern void __glXDisp_PixelMapfv(GLbyte*);
+extern void __glXDisp_PixelMapuiv(GLbyte*);
+extern void __glXDisp_PixelMapusv(GLbyte*);
+extern void __glXDisp_ReadBuffer(GLbyte*);
+extern void __glXDisp_CopyPixels(GLbyte*);
+extern void __glXDisp_DrawPixels(GLbyte*);
+extern void __glXDisp_DepthRange(GLbyte*);
+extern void __glXDisp_Frustum(GLbyte*);
+extern void __glXDisp_LoadIdentity(GLbyte*);
+extern void __glXDisp_LoadMatrixf(GLbyte*);
+extern void __glXDisp_LoadMatrixd(GLbyte*);
+extern void __glXDisp_MatrixMode(GLbyte*);
+extern void __glXDisp_MultMatrixf(GLbyte*);
+extern void __glXDisp_MultMatrixd(GLbyte*);
+extern void __glXDisp_Ortho(GLbyte*);
+extern void __glXDisp_PopMatrix(GLbyte*);
+extern void __glXDisp_PushMatrix(GLbyte*);
+extern void __glXDisp_Rotated(GLbyte*);
+extern void __glXDisp_Rotatef(GLbyte*);
+extern void __glXDisp_Scaled(GLbyte*);
+extern void __glXDisp_Scalef(GLbyte*);
+extern void __glXDisp_Translated(GLbyte*);
+extern void __glXDisp_Translatef(GLbyte*);
+extern void __glXDisp_Viewport(GLbyte*);
+extern void __glXDisp_PolygonOffset(GLbyte*);
+extern void __glXDisp_DrawArrays(GLbyte*);
+extern void __glXDisp_Indexubv(GLbyte*);
+extern void __glXDisp_ColorSubTable(GLbyte*);
+extern void __glXDisp_CopyColorSubTable(GLbyte*);
+extern void __glXDisp_ActiveTextureARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord1dvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord1fvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord1ivARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord1svARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord2dvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord2fvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord2ivARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord2svARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord3dvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord3fvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord3ivARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord3svARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord4dvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord4fvARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord4ivARB(GLbyte*);
+extern void __glXDisp_MultiTexCoord4svARB(GLbyte*);
+
+extern int __glXSwapRender(__GLXclientState*, GLbyte*);
+extern int __glXSwapRenderLarge(__GLXclientState*, GLbyte*);
+extern int __glXSwapCreateContext(__GLXclientState*, GLbyte*);
+extern int __glXSwapCreateNewContext(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapDestroyContext(__GLXclientState*, GLbyte*);
+extern int __glXSwapMakeCurrent(__GLXclientState*, GLbyte*);
+extern int __glXSwapMakeContextCurrent(__GLXclientState*, GLbyte*);
+extern int __glXSwapCreatePbuffer(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapDestroyPbuffer(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapIsDirect(__GLXclientState*, GLbyte*);
+extern int __glXSwapQueryVersion(__GLXclientState*, GLbyte*);
+extern int __glXSwapWaitGL(__GLXclientState*, GLbyte*);
+extern int __glXSwapWaitX(__GLXclientState*, GLbyte*);
+extern int __glXSwapCopyContext(__GLXclientState*, GLbyte*);
+extern int __glXSwapSwapBuffers(__GLXclientState*, GLbyte*);
+extern int __glXSwapUseXFont(__GLXclientState*, GLbyte*);
+extern int __glXSwapCreateGLXPixmap(__GLXclientState*, GLbyte*);
+extern int __glXSwapCreatePixmap(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapGetVisualConfigs(__GLXclientState*, GLbyte*);
+extern int __glXSwapDestroyGLXPixmap(__GLXclientState*, GLbyte*);
+extern int __glXSwapVendorPrivate(__GLXclientState*, GLbyte*);
+extern int __glXSwapVendorPrivateWithReply(__GLXclientState*, GLbyte*);
+extern int __glXSwapQueryExtensionsString(__GLXclientState*, GLbyte*);
+extern int __glXSwapQueryServerString(__GLXclientState*, GLbyte*);
+extern int __glXSwapClientInfo(__GLXclientState*, GLbyte*);
+extern int __glXSwapGetFBConfigs(__GLXclientState*, GLbyte*);
+extern int __glXSwapCreateWindow(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapDestroyWindow(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapQueryContext(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDispSwap_NewList(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_EndList(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_DeleteLists(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GenLists(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_FeedbackBuffer(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_SelectBuffer(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_RenderMode(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_Finish(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_PixelStoref(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_PixelStorei(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_ReadPixels(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetBooleanv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetClipPlane(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetDoublev(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetError(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetFloatv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetIntegerv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetLightfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetLightiv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMapdv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMapfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMapiv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMaterialfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMaterialiv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetPixelMapfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetPixelMapuiv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetPixelMapusv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetPolygonStipple(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetString(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexEnvfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexEnviv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexGendv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexGenfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexGeniv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexImage(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexLevelParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetTexLevelParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_IsEnabled(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_IsList(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_Flush(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_AreTexturesResident(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_DeleteTextures(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GenTextures(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_IsTexture(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetColorTable(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetColorTableParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetColorTableParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetConvolutionFilter(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetConvolutionParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetConvolutionParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetSeparableFilter(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetHistogram(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetHistogramParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetHistogramParameteriv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMinmax(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMinmaxParameterfv(__GLXclientState*, GLbyte*);
+extern int __glXDispSwap_GetMinmaxParameteriv(__GLXclientState*, GLbyte*);
+
+extern void __glXDispSwap_CallList(GLbyte*);
+extern void __glXDispSwap_CallLists(GLbyte*);
+extern void __glXDispSwap_ListBase(GLbyte*);
+extern void __glXDispSwap_Begin(GLbyte*);
+extern void __glXDispSwap_Bitmap(GLbyte*);
+extern void __glXDispSwap_Color3bv(GLbyte*);
+extern void __glXDispSwap_Color3dv(GLbyte*);
+extern void __glXDispSwap_Color3fv(GLbyte*);
+extern void __glXDispSwap_Color3iv(GLbyte*);
+extern void __glXDispSwap_Color3sv(GLbyte*);
+extern void __glXDispSwap_Color3ubv(GLbyte*);
+extern void __glXDispSwap_Color3uiv(GLbyte*);
+extern void __glXDispSwap_Color3usv(GLbyte*);
+extern void __glXDispSwap_Color4bv(GLbyte*);
+extern void __glXDispSwap_Color4dv(GLbyte*);
+extern void __glXDispSwap_Color4fv(GLbyte*);
+extern void __glXDispSwap_Color4iv(GLbyte*);
+extern void __glXDispSwap_Color4sv(GLbyte*);
+extern void __glXDispSwap_Color4ubv(GLbyte*);
+extern void __glXDispSwap_Color4uiv(GLbyte*);
+extern void __glXDispSwap_Color4usv(GLbyte*);
+extern void __glXDispSwap_EdgeFlagv(GLbyte*);
+extern void __glXDispSwap_End(GLbyte*);
+extern void __glXDispSwap_Indexdv(GLbyte*);
+extern void __glXDispSwap_Indexfv(GLbyte*);
+extern void __glXDispSwap_Indexiv(GLbyte*);
+extern void __glXDispSwap_Indexsv(GLbyte*);
+extern void __glXDispSwap_Normal3bv(GLbyte*);
+extern void __glXDispSwap_Normal3dv(GLbyte*);
+extern void __glXDispSwap_Normal3fv(GLbyte*);
+extern void __glXDispSwap_Normal3iv(GLbyte*);
+extern void __glXDispSwap_Normal3sv(GLbyte*);
+extern void __glXDispSwap_RasterPos2dv(GLbyte*);
+extern void __glXDispSwap_RasterPos2fv(GLbyte*);
+extern void __glXDispSwap_RasterPos2iv(GLbyte*);
+extern void __glXDispSwap_RasterPos2sv(GLbyte*);
+extern void __glXDispSwap_RasterPos3dv(GLbyte*);
+extern void __glXDispSwap_RasterPos3fv(GLbyte*);
+extern void __glXDispSwap_RasterPos3iv(GLbyte*);
+extern void __glXDispSwap_RasterPos3sv(GLbyte*);
+extern void __glXDispSwap_RasterPos4dv(GLbyte*);
+extern void __glXDispSwap_RasterPos4fv(GLbyte*);
+extern void __glXDispSwap_RasterPos4iv(GLbyte*);
+extern void __glXDispSwap_RasterPos4sv(GLbyte*);
+extern void __glXDispSwap_Rectdv(GLbyte*);
+extern void __glXDispSwap_Rectfv(GLbyte*);
+extern void __glXDispSwap_Rectiv(GLbyte*);
+extern void __glXDispSwap_Rectsv(GLbyte*);
+extern void __glXDispSwap_TexCoord1dv(GLbyte*);
+extern void __glXDispSwap_TexCoord1fv(GLbyte*);
+extern void __glXDispSwap_TexCoord1iv(GLbyte*);
+extern void __glXDispSwap_TexCoord1sv(GLbyte*);
+extern void __glXDispSwap_TexCoord2dv(GLbyte*);
+extern void __glXDispSwap_TexCoord2fv(GLbyte*);
+extern void __glXDispSwap_TexCoord2iv(GLbyte*);
+extern void __glXDispSwap_TexCoord2sv(GLbyte*);
+extern void __glXDispSwap_TexCoord3dv(GLbyte*);
+extern void __glXDispSwap_TexCoord3fv(GLbyte*);
+extern void __glXDispSwap_TexCoord3iv(GLbyte*);
+extern void __glXDispSwap_TexCoord3sv(GLbyte*);
+extern void __glXDispSwap_TexCoord4dv(GLbyte*);
+extern void __glXDispSwap_TexCoord4fv(GLbyte*);
+extern void __glXDispSwap_TexCoord4iv(GLbyte*);
+extern void __glXDispSwap_TexCoord4sv(GLbyte*);
+extern void __glXDispSwap_Vertex2dv(GLbyte*);
+extern void __glXDispSwap_Vertex2fv(GLbyte*);
+extern void __glXDispSwap_Vertex2iv(GLbyte*);
+extern void __glXDispSwap_Vertex2sv(GLbyte*);
+extern void __glXDispSwap_Vertex3dv(GLbyte*);
+extern void __glXDispSwap_Vertex3fv(GLbyte*);
+extern void __glXDispSwap_Vertex3iv(GLbyte*);
+extern void __glXDispSwap_Vertex3sv(GLbyte*);
+extern void __glXDispSwap_Vertex4dv(GLbyte*);
+extern void __glXDispSwap_Vertex4fv(GLbyte*);
+extern void __glXDispSwap_Vertex4iv(GLbyte*);
+extern void __glXDispSwap_Vertex4sv(GLbyte*);
+extern void __glXDispSwap_ClipPlane(GLbyte*);
+extern void __glXDispSwap_ColorMaterial(GLbyte*);
+extern void __glXDispSwap_CullFace(GLbyte*);
+extern void __glXDispSwap_Fogf(GLbyte*);
+extern void __glXDispSwap_Fogfv(GLbyte*);
+extern void __glXDispSwap_Fogi(GLbyte*);
+extern void __glXDispSwap_Fogiv(GLbyte*);
+extern void __glXDispSwap_FrontFace(GLbyte*);
+extern void __glXDispSwap_Hint(GLbyte*);
+extern void __glXDispSwap_Lightf(GLbyte*);
+extern void __glXDispSwap_Lightfv(GLbyte*);
+extern void __glXDispSwap_Lighti(GLbyte*);
+extern void __glXDispSwap_Lightiv(GLbyte*);
+extern void __glXDispSwap_LightModelf(GLbyte*);
+extern void __glXDispSwap_LightModelfv(GLbyte*);
+extern void __glXDispSwap_LightModeli(GLbyte*);
+extern void __glXDispSwap_LightModeliv(GLbyte*);
+extern void __glXDispSwap_LineStipple(GLbyte*);
+extern void __glXDispSwap_LineWidth(GLbyte*);
+extern void __glXDispSwap_Materialf(GLbyte*);
+extern void __glXDispSwap_Materialfv(GLbyte*);
+extern void __glXDispSwap_Materiali(GLbyte*);
+extern void __glXDispSwap_Materialiv(GLbyte*);
+extern void __glXDispSwap_PointSize(GLbyte*);
+extern void __glXDispSwap_PolygonMode(GLbyte*);
+extern void __glXDispSwap_PolygonStipple(GLbyte*);
+extern void __glXDispSwap_Scissor(GLbyte*);
+extern void __glXDispSwap_ShadeModel(GLbyte*);
+extern void __glXDispSwap_TexParameterf(GLbyte*);
+extern void __glXDispSwap_TexParameterfv(GLbyte*);
+extern void __glXDispSwap_TexParameteri(GLbyte*);
+extern void __glXDispSwap_TexParameteriv(GLbyte*);
+extern void __glXDispSwap_TexImage1D(GLbyte*);
+extern void __glXDispSwap_TexImage2D(GLbyte*);
+extern void __glXDispSwap_TexEnvf(GLbyte*);
+extern void __glXDispSwap_TexEnvfv(GLbyte*);
+extern void __glXDispSwap_TexEnvi(GLbyte*);
+extern void __glXDispSwap_TexEnviv(GLbyte*);
+extern void __glXDispSwap_TexGend(GLbyte*);
+extern void __glXDispSwap_TexGendv(GLbyte*);
+extern void __glXDispSwap_TexGenf(GLbyte*);
+extern void __glXDispSwap_TexGenfv(GLbyte*);
+extern void __glXDispSwap_TexGeni(GLbyte*);
+extern void __glXDispSwap_TexGeniv(GLbyte*);
+extern void __glXDispSwap_InitNames(GLbyte*);
+extern void __glXDispSwap_LoadName(GLbyte*);
+extern void __glXDispSwap_PassThrough(GLbyte*);
+extern void __glXDispSwap_PopName(GLbyte*);
+extern void __glXDispSwap_PushName(GLbyte*);
+extern void __glXDispSwap_DrawBuffer(GLbyte*);
+extern void __glXDispSwap_Clear(GLbyte*);
+extern void __glXDispSwap_ClearAccum(GLbyte*);
+extern void __glXDispSwap_ClearIndex(GLbyte*);
+extern void __glXDispSwap_ClearColor(GLbyte*);
+extern void __glXDispSwap_ClearStencil(GLbyte*);
+extern void __glXDispSwap_ClearDepth(GLbyte*);
+extern void __glXDispSwap_StencilMask(GLbyte*);
+extern void __glXDispSwap_ColorMask(GLbyte*);
+extern void __glXDispSwap_DepthMask(GLbyte*);
+extern void __glXDispSwap_IndexMask(GLbyte*);
+extern void __glXDispSwap_Accum(GLbyte*);
+extern void __glXDispSwap_Disable(GLbyte*);
+extern void __glXDispSwap_Enable(GLbyte*);
+extern void __glXDispSwap_PopAttrib(GLbyte*);
+extern void __glXDispSwap_PushAttrib(GLbyte*);
+extern void __glXDispSwap_Map1d(GLbyte*);
+extern void __glXDispSwap_Map1f(GLbyte*);
+extern void __glXDispSwap_Map2d(GLbyte*);
+extern void __glXDispSwap_Map2f(GLbyte*);
+extern void __glXDispSwap_MapGrid1d(GLbyte*);
+extern void __glXDispSwap_MapGrid1f(GLbyte*);
+extern void __glXDispSwap_MapGrid2d(GLbyte*);
+extern void __glXDispSwap_MapGrid2f(GLbyte*);
+extern void __glXDispSwap_EvalCoord1dv(GLbyte*);
+extern void __glXDispSwap_EvalCoord1fv(GLbyte*);
+extern void __glXDispSwap_EvalCoord2dv(GLbyte*);
+extern void __glXDispSwap_EvalCoord2fv(GLbyte*);
+extern void __glXDispSwap_EvalMesh1(GLbyte*);
+extern void __glXDispSwap_EvalPoint1(GLbyte*);
+extern void __glXDispSwap_EvalMesh2(GLbyte*);
+extern void __glXDispSwap_EvalPoint2(GLbyte*);
+extern void __glXDispSwap_AlphaFunc(GLbyte*);
+extern void __glXDispSwap_BlendFunc(GLbyte*);
+extern void __glXDispSwap_LogicOp(GLbyte*);
+extern void __glXDispSwap_StencilFunc(GLbyte*);
+extern void __glXDispSwap_StencilOp(GLbyte*);
+extern void __glXDispSwap_DepthFunc(GLbyte*);
+extern void __glXDispSwap_PixelZoom(GLbyte*);
+extern void __glXDispSwap_PixelTransferf(GLbyte*);
+extern void __glXDispSwap_PixelTransferi(GLbyte*);
+extern void __glXDispSwap_PixelMapfv(GLbyte*);
+extern void __glXDispSwap_PixelMapuiv(GLbyte*);
+extern void __glXDispSwap_PixelMapusv(GLbyte*);
+extern void __glXDispSwap_ReadBuffer(GLbyte*);
+extern void __glXDispSwap_CopyPixels(GLbyte*);
+extern void __glXDispSwap_DrawPixels(GLbyte*);
+extern void __glXDispSwap_DepthRange(GLbyte*);
+extern void __glXDispSwap_Frustum(GLbyte*);
+extern void __glXDispSwap_LoadIdentity(GLbyte*);
+extern void __glXDispSwap_LoadMatrixf(GLbyte*);
+extern void __glXDispSwap_LoadMatrixd(GLbyte*);
+extern void __glXDispSwap_MatrixMode(GLbyte*);
+extern void __glXDispSwap_MultMatrixf(GLbyte*);
+extern void __glXDispSwap_MultMatrixd(GLbyte*);
+extern void __glXDispSwap_Ortho(GLbyte*);
+extern void __glXDispSwap_PopMatrix(GLbyte*);
+extern void __glXDispSwap_PushMatrix(GLbyte*);
+extern void __glXDispSwap_Rotated(GLbyte*);
+extern void __glXDispSwap_Rotatef(GLbyte*);
+extern void __glXDispSwap_Scaled(GLbyte*);
+extern void __glXDispSwap_Scalef(GLbyte*);
+extern void __glXDispSwap_Translated(GLbyte*);
+extern void __glXDispSwap_Translatef(GLbyte*);
+extern void __glXDispSwap_Viewport(GLbyte*);
+extern void __glXDispSwap_PolygonOffset(GLbyte*);
+extern void __glXDispSwap_DrawArrays(GLbyte*);
+extern void __glXDispSwap_Indexubv(GLbyte*);
+extern void __glXDispSwap_ColorSubTable(GLbyte*);
+extern void __glXDispSwap_CopyColorSubTable(GLbyte*);
+extern void __glXDispSwap_ActiveTextureARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord1dvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord1fvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord1ivARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord1svARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord2dvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord2fvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord2ivARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord2svARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord3dvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord3fvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord3ivARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord3svARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord4dvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord4fvARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord4ivARB(GLbyte*);
+extern void __glXDispSwap_MultiTexCoord4svARB(GLbyte*);
+
+extern void __glXDispSwap_TexSubImage1D(GLbyte*);
+extern void __glXDispSwap_TexSubImage2D(GLbyte*);
+extern void __glXDispSwap_ConvolutionFilter1D(GLbyte*);
+extern void __glXDispSwap_ConvolutionFilter2D(GLbyte*);
+extern void __glXDispSwap_ConvolutionParameterfv(GLbyte*);
+extern void __glXDispSwap_ConvolutionParameteriv(GLbyte*);
+extern void __glXDispSwap_CopyConvolutionFilter1D(GLbyte*);
+extern void __glXDispSwap_CopyConvolutionFilter2D(GLbyte*);
+extern void __glXDispSwap_SeparableFilter2D(GLbyte*);
+extern void __glXDispSwap_TexImage3D(GLbyte*);
+extern void __glXDispSwap_TexSubImage3D(GLbyte*);
+extern void __glXDispSwap_DrawArrays(GLbyte*);
+extern void __glXDispSwap_PrioritizeTextures(GLbyte*);
+extern void __glXDispSwap_CopyTexImage1D(GLbyte*);
+extern void __glXDispSwap_CopyTexImage2D(GLbyte*);
+extern void __glXDispSwap_CopyTexSubImage1D(GLbyte*);
+extern void __glXDispSwap_CopyTexSubImage2D(GLbyte*);
+extern void __glXDispSwap_CopyTexSubImage3D(GLbyte*);
+
+#define __GLX_MIN_GLXCMD_OPCODE 1
+#define __GLX_MAX_GLXCMD_OPCODE 20
+#define __GLX_MIN_RENDER_OPCODE 1
+#define __GLX_MAX_RENDER_OPCODE 213
+#define __GLX_MIN_SINGLE_OPCODE 1
+#define __GLX_MAX_SINGLE_OPCODE 159
+#define __GLX_SINGLE_TABLE_SIZE 160
+#define __GLX_RENDER_TABLE_SIZE 214
+
+#define __GLX_MIN_RENDER_OPCODE_EXT 4096
+#define __GLX_MAX_RENDER_OPCODE_EXT 4123
+
+extern __GLXdispatchSingleProcPtr __glXSingleTable[__GLX_SINGLE_TABLE_SIZE];
+extern __GLXdispatchSingleProcPtr __glXSwapSingleTable[__GLX_SINGLE_TABLE_SIZE];
+#endif /* _GLX_g_disptab_h_ */
diff --git a/hw/dmx/glxProxy/g_renderswap.c b/hw/dmx/glxProxy/g_renderswap.c
new file mode 100644
index 0000000..e675696
--- /dev/null
+++ b/hw/dmx/glxProxy/g_renderswap.c
@@ -0,0 +1,2433 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+#include "glxext.h"
+#include "g_disptab.h"
+#include "unpack.h"
+
+void __glXDispSwap_CallList(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_ListBase(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Begin(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Color3bv(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_Color3dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Color3fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 3);
+}
+
+void __glXDispSwap_Color3iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Color3sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Color3ubv(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_Color3uiv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 3);
+}
+
+void __glXDispSwap_Color3usv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 3);
+}
+
+void __glXDispSwap_Color4bv(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_Color4dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 32);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 4);
+}
+
+void __glXDispSwap_Color4fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Color4iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Color4sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Color4ubv(GLbyte *pc)
+{
+
+}
+
+void __glXDispSwap_Color4uiv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Color4usv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_EdgeFlagv(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_End(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_Indexdv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 8);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_Indexfv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_Indexiv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_Indexsv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_Normal3bv(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_Normal3dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Normal3fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Normal3iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Normal3sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_RasterPos2dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 16);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_RasterPos2fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_RasterPos2iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_RasterPos2sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_RasterPos3dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_RasterPos3fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_RasterPos3iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_RasterPos3sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_RasterPos4dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 32);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_RasterPos4fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_RasterPos4iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_RasterPos4sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Rectdv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 32);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 2);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 16, 2);
+
+}
+
+void __glXDispSwap_Rectfv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 2);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, 2);
+
+}
+
+void __glXDispSwap_Rectiv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 2);
+ __GLX_SWAP_INT_ARRAY(pc + 8, 2);
+
+}
+
+void __glXDispSwap_Rectsv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 2);
+ __GLX_SWAP_SHORT_ARRAY(pc + 4, 2);
+
+}
+
+void __glXDispSwap_TexCoord1dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 8);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_TexCoord1fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_TexCoord1iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_TexCoord1sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_TexCoord2dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 16);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_TexCoord2fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_TexCoord2iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_TexCoord2sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_TexCoord3dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_TexCoord3fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_TexCoord3iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_TexCoord3sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_TexCoord4dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 32);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_TexCoord4fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_TexCoord4iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_TexCoord4sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Vertex2dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 16);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_Vertex2fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_Vertex2iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_Vertex2sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_Vertex3dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Vertex3fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Vertex3iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Vertex3sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_Vertex4dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 32);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Vertex4fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Vertex4iv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_Vertex4sv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_ClipPlane(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 36);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 32);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_ColorMaterial(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_CullFace(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Fogf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_Fogfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ pname = *(GLenum *)(pc + 0);
+ compsize = __glFogfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4, compsize);
+
+}
+
+void __glXDispSwap_Fogi(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_Fogiv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ pname = *(GLenum *)(pc + 0);
+ compsize = __glFogiv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT_ARRAY(pc + 4, compsize);
+
+}
+
+void __glXDispSwap_FrontFace(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Hint(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_Lightf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_Lightfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glLightfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_Lighti(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_Lightiv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glLightiv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_LightModelf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_LightModelfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ pname = *(GLenum *)(pc + 0);
+ compsize = __glLightModelfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4, compsize);
+
+}
+
+void __glXDispSwap_LightModeli(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_LightModeliv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ pname = *(GLenum *)(pc + 0);
+ compsize = __glLightModeliv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT_ARRAY(pc + 4, compsize);
+
+}
+
+void __glXDispSwap_LineStipple(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_SHORT(pc + 4);
+
+}
+
+void __glXDispSwap_LineWidth(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+
+}
+
+void __glXDispSwap_Materialf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_Materialfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glMaterialfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_Materiali(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_Materialiv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glMaterialiv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_PointSize(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+
+}
+
+void __glXDispSwap_PolygonMode(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_Scissor(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+
+}
+
+void __glXDispSwap_ShadeModel(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_TexParameterf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_TexParameterfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexParameterfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_TexParameteri(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_TexParameteriv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexParameteriv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_TexEnvf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_TexEnvfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexEnvfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_TexEnvi(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_TexEnviv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexEnviv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_TexGend(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 16);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_DOUBLE(pc + 0);
+
+}
+
+void __glXDispSwap_TexGendv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint cmdlen;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexGendv_size(pname);
+ if (compsize < 0) compsize = 0;
+ cmdlen = __GLX_PAD(8+compsize*8);
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, cmdlen);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_TexGenf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_TexGenfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexGenfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_TexGeni(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_TexGeniv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glTexGeniv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_InitNames(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_LoadName(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_PassThrough(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+
+}
+
+void __glXDispSwap_PopName(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_PushName(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_DrawBuffer(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Clear(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_ClearAccum(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+ __GLX_SWAP_FLOAT(pc + 12);
+
+}
+
+void __glXDispSwap_ClearIndex(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+
+}
+
+void __glXDispSwap_ClearColor(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+ __GLX_SWAP_FLOAT(pc + 12);
+
+}
+
+void __glXDispSwap_ClearStencil(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_ClearDepth(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 8);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+
+}
+
+void __glXDispSwap_StencilMask(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_ColorMask(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_DepthMask(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_IndexMask(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Accum(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_Disable(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_Enable(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_PopAttrib(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_PushAttrib(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_MapGrid1d(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 20);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+
+}
+
+void __glXDispSwap_MapGrid1f(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_MapGrid2d(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 40);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 32);
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_INT(pc + 36);
+ __GLX_SWAP_DOUBLE(pc + 16);
+ __GLX_SWAP_DOUBLE(pc + 24);
+
+}
+
+void __glXDispSwap_MapGrid2f(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_FLOAT(pc + 16);
+ __GLX_SWAP_FLOAT(pc + 20);
+
+}
+
+void __glXDispSwap_EvalCoord1dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 8);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_EvalCoord1fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_EvalCoord2dv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 16);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_EvalCoord2fv(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_EvalMesh1(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_EvalPoint1(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_EvalMesh2(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+
+}
+
+void __glXDispSwap_EvalPoint2(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_AlphaFunc(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_BlendFunc(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_LogicOp(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_StencilFunc(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_StencilOp(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_DepthFunc(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_PixelZoom(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_PixelTransferf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_PixelTransferi(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_PixelMapfv(GLbyte *pc)
+{
+ GLint mapsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ mapsize = *(GLint *)(pc + 4);
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, mapsize);
+
+}
+
+void __glXDispSwap_PixelMapuiv(GLbyte *pc)
+{
+ GLint mapsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ mapsize = *(GLint *)(pc + 4);
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, mapsize);
+
+}
+
+void __glXDispSwap_PixelMapusv(GLbyte *pc)
+{
+ GLint mapsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ mapsize = *(GLint *)(pc + 4);
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_SHORT_ARRAY(pc + 8, mapsize);
+
+}
+
+void __glXDispSwap_ReadBuffer(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_CopyPixels(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+
+}
+
+void __glXDispSwap_DepthRange(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 16);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+
+}
+
+void __glXDispSwap_Frustum(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 48);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_DOUBLE(pc + 16);
+ __GLX_SWAP_DOUBLE(pc + 24);
+ __GLX_SWAP_DOUBLE(pc + 32);
+ __GLX_SWAP_DOUBLE(pc + 40);
+
+}
+
+void __glXDispSwap_LoadIdentity(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_LoadMatrixf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 16);
+
+}
+
+void __glXDispSwap_LoadMatrixd(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 128);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 16);
+
+}
+
+void __glXDispSwap_MatrixMode(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_MultMatrixf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_FLOAT_ARRAY(pc + 0, 16);
+
+}
+
+void __glXDispSwap_MultMatrixd(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 128);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 16);
+
+}
+
+void __glXDispSwap_Ortho(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 48);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_DOUBLE(pc + 16);
+ __GLX_SWAP_DOUBLE(pc + 24);
+ __GLX_SWAP_DOUBLE(pc + 32);
+ __GLX_SWAP_DOUBLE(pc + 40);
+
+}
+
+void __glXDispSwap_PopMatrix(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_PushMatrix(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_Rotated(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 32);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_DOUBLE(pc + 16);
+ __GLX_SWAP_DOUBLE(pc + 24);
+
+}
+
+void __glXDispSwap_Rotatef(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+ __GLX_SWAP_FLOAT(pc + 12);
+
+}
+
+void __glXDispSwap_Scaled(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_DOUBLE(pc + 16);
+
+}
+
+void __glXDispSwap_Scalef(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_Translated(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 24);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_DOUBLE(pc + 16);
+
+}
+
+void __glXDispSwap_Translatef(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_Viewport(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+
+}
+
+void __glXDispSwap_PolygonOffset(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+
+}
+
+void __glXDispSwap_CopyTexImage1D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+ __GLX_SWAP_INT(pc + 24);
+
+}
+
+void __glXDispSwap_CopyTexImage2D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+ __GLX_SWAP_INT(pc + 24);
+ __GLX_SWAP_INT(pc + 28);
+
+}
+
+void __glXDispSwap_CopyTexSubImage1D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+
+}
+
+void __glXDispSwap_CopyTexSubImage2D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+ __GLX_SWAP_INT(pc + 24);
+ __GLX_SWAP_INT(pc + 28);
+
+}
+
+void __glXDispSwap_BindTexture(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_PrioritizeTextures(GLbyte *pc)
+{
+ GLsizei n;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ n = *(GLsizei *)(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 4, n);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4+n*4, n);
+
+}
+
+void __glXDispSwap_Indexubv(GLbyte *pc)
+{
+}
+
+void __glXDispSwap_BlendColor(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_FLOAT(pc + 0);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+ __GLX_SWAP_FLOAT(pc + 12);
+
+}
+
+void __glXDispSwap_BlendEquation(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_ColorTableParameterfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glColorTableParameterfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_ColorTableParameteriv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glColorTableParameteriv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_CopyColorTable(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+
+}
+
+void __glXDispSwap_CopyColorSubTable(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+
+}
+
+void __glXDispSwap_ConvolutionParameterf(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+}
+
+void __glXDispSwap_ConvolutionParameterfv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glConvolutionParameterfv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_ConvolutionParameteri(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_ConvolutionParameteriv(GLbyte *pc)
+{
+ GLenum pname;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ pname = *(GLenum *)(pc + 4);
+ compsize = __glConvolutionParameteriv_size(pname);
+ if (compsize < 0) compsize = 0;
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 8, compsize);
+
+}
+
+void __glXDispSwap_CopyConvolutionFilter1D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+
+}
+
+void __glXDispSwap_CopyConvolutionFilter2D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+
+}
+
+void __glXDispSwap_Histogram(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+
+}
+
+void __glXDispSwap_Minmax(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+
+}
+
+void __glXDispSwap_ResetHistogram(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_ResetMinmax(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_CopyTexSubImage3D(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+ __GLX_SWAP_INT(pc + 24);
+ __GLX_SWAP_INT(pc + 28);
+ __GLX_SWAP_INT(pc + 32);
+
+}
+
+void __glXDispSwap_ActiveTextureARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+
+}
+
+void __glXDispSwap_MultiTexCoord1dvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 12);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 8);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 1);
+
+}
+
+void __glXDispSwap_MultiTexCoord1fvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4, 1);
+
+}
+
+void __glXDispSwap_MultiTexCoord1ivARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 4, 1);
+
+}
+
+void __glXDispSwap_MultiTexCoord1svARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_SHORT_ARRAY(pc + 4, 1);
+
+}
+
+void __glXDispSwap_MultiTexCoord2dvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 20);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 2);
+
+}
+
+void __glXDispSwap_MultiTexCoord2fvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4, 2);
+
+}
+
+void __glXDispSwap_MultiTexCoord2ivARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 4, 2);
+
+}
+
+void __glXDispSwap_MultiTexCoord2svARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_SHORT_ARRAY(pc + 4, 2);
+
+}
+
+void __glXDispSwap_MultiTexCoord3dvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 28);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 24);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 3);
+
+}
+
+void __glXDispSwap_MultiTexCoord3fvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4, 3);
+
+}
+
+void __glXDispSwap_MultiTexCoord3ivARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 4, 3);
+
+}
+
+void __glXDispSwap_MultiTexCoord3svARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_SHORT_ARRAY(pc + 4, 3);
+
+}
+
+void __glXDispSwap_MultiTexCoord4dvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+
+#ifdef __GLX_ALIGN64
+ if ((unsigned long)(pc) & 7) {
+ __GLX_MEM_COPY(pc-4, pc, 36);
+ pc -= 4;
+ }
+#endif
+ __GLX_SWAP_INT(pc + 32);
+ __GLX_SWAP_DOUBLE_ARRAY(pc + 0, 4);
+
+}
+
+void __glXDispSwap_MultiTexCoord4fvARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_FLOAT_ARRAY(pc + 4, 4);
+
+}
+
+void __glXDispSwap_MultiTexCoord4ivARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT_ARRAY(pc + 4, 4);
+
+}
+
+void __glXDispSwap_MultiTexCoord4svARB(GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_SHORT_ARRAY(pc + 4, 4);
+
+}
+
diff --git a/hw/dmx/glxProxy/global.c b/hw/dmx/glxProxy/global.c
new file mode 100644
index 0000000..9cf8c11
--- /dev/null
+++ b/hw/dmx/glxProxy/global.c
@@ -0,0 +1,70 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+
+/*
+** The last context used by the server. It is the context that is current
+** from the server's perspective.
+*/
+__GLXcontext *__glXLastContext;
+
+/*
+** X resources.
+*/
+RESTYPE __glXContextRes;
+RESTYPE __glXClientRes;
+RESTYPE __glXPixmapRes;
+RESTYPE __glXWindowRes;
+RESTYPE __glXPbufferRes;
+
+/*
+** Error codes with the extension error base already added in.
+*/
+int __glXerrorBase;
+int __glXBadContext, __glXBadContextState, __glXBadDrawable, __glXBadPixmap;
+int __glXBadContextTag, __glXBadCurrentWindow;
+int __glXBadRenderRequest, __glXBadLargeRequest;
+int __glXUnsupportedPrivateRequest;
+int __glXBadFBConfig, __glXBadPbuffer;
+
+/*
+** Reply for most singles.
+*/
+xGLXSingleReply __glXReply;
+
+/*
+** A set of state for each client. The 0th one is unused because client
+** indices start at 1, not 0.
+*/
+__GLXclientState *__glXClients[MAXCLIENTS+1];
+
+int __glXVersionMajor;
+int __glXVersionMinor;
diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c
new file mode 100644
index 0000000..f79264e
--- /dev/null
+++ b/hw/dmx/glxProxy/glxcmds.c
@@ -0,0 +1,3645 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+#include "dmxfont.h"
+#include "dmxsync.h"
+
+#include "glxserver.h"
+#include <GL/glxtokens.h>
+#include "g_disptab.h"
+#include <pixmapstr.h>
+#include <windowstr.h>
+#include "glxutil.h"
+#include "glxext.h"
+#include "unpack.h"
+
+#include "GL/glxproto.h"
+#include "glxvendor.h"
+#include "glxvisuals.h"
+#include "glxswap.h"
+
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+#endif
+
+extern __GLXFBConfig **__glXFBConfigs;
+extern int __glXNumFBConfigs;
+
+extern __GLXFBConfig *glxLookupFBConfig( GLXFBConfigID id );
+extern __GLXFBConfig *glxLookupFBConfigByVID( VisualID vid );
+extern __GLXFBConfig *glxLookupBackEndFBConfig( GLXFBConfigID id, int screen );
+extern int glxIsExtensionSupported( char *ext );
+extern int __glXGetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc);
+
+#define BE_TO_CLIENT_ERROR(x) \
+ ( (x) >= __glXerrorBase ? \
+ (x) - dmxScreen->glxErrorBase + __glXerrorBase \
+ : (x) )
+
+Display *GetBackEndDisplay( __GLXclientState *cl, int s )
+{
+ if (! cl->be_displays[s] ) {
+ cl->be_displays[s] = XOpenDisplay( DisplayString(dmxScreens[s].beDisplay) );
+ }
+ return cl->be_displays[s];
+}
+
+/*
+** Create a GL context with the given properties.
+*/
+static int CreateContext(__GLXclientState *cl,
+ GLXContextID gcId,
+ VisualID vid, GLXFBConfigID fbconfigId,
+ int screen,
+ GLXContextID shareList,
+ int isDirect )
+{
+ ClientPtr client = cl->client;
+ xGLXCreateContextReq *be_req;
+ xGLXCreateNewContextReq *be_new_req;
+ VisualPtr pVisual;
+ ScreenPtr pScreen;
+ __GLXcontext *glxc, *shareglxc;
+ __GLXvisualConfig *pGlxVisual;
+ __GLXscreenInfo *pGlxScreen;
+ VisualID visual = vid;
+ GLint i;
+ int from_screen = screen;
+ int to_screen = screen;
+ DMXScreenInfo *dmxScreen;
+ VisualID be_vid = 0;
+ GLXFBConfigID be_fbconfigId = 0;
+ int num_be_screens;
+ Display *dpy;
+
+ /*
+ ** Check if screen exists.
+ */
+ if (screen >= screenInfo.numScreens) {
+ client->errorValue = screen;
+ return BadValue;
+ }
+
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ /*
+ ** Find the display list space that we want to share.
+ **
+ */
+ if (shareList == None) {
+ shareglxc = NULL;
+ } else {
+ dixLookupResourceByType((pointer*) &shareglxc, shareList,
+ __glXContextRes, NullClient, DixUnknownAccess);
+ if (!shareglxc) {
+ client->errorValue = shareList;
+ return __glXBadContext;
+ }
+ }
+
+ /*
+ ** Allocate memory for the new context
+ */
+ glxc = calloc(1, sizeof(__GLXcontext));
+ if (!glxc) {
+ return BadAlloc;
+ }
+
+ pScreen = screenInfo.screens[screen];
+ pGlxScreen = &__glXActiveScreens[screen];
+
+ if (fbconfigId != None) {
+ glxc->pFBConfig = glxLookupFBConfig( fbconfigId );
+ if (!glxc->pFBConfig) {
+ client->errorValue = fbconfigId;
+ free( glxc );
+ return BadValue;
+ }
+ visual = glxc->pFBConfig->associatedVisualId;
+ }
+ else {
+ glxc->pFBConfig = NULL;
+ }
+
+ if (visual != None) {
+ /*
+ ** Check if the visual ID is valid for this screen.
+ */
+ pVisual = pScreen->visuals;
+ for (i = 0; i < pScreen->numVisuals; i++, pVisual++) {
+ if (pVisual->vid == visual) {
+ break;
+ }
+ }
+ if (i == pScreen->numVisuals) {
+ client->errorValue = visual;
+ free( glxc );
+ return BadValue;
+ }
+
+ pGlxVisual = pGlxScreen->pGlxVisual;
+ for (i = 0; i < pGlxScreen->numVisuals; i++, pGlxVisual++) {
+ if (pGlxVisual->vid == visual) {
+ break;
+ }
+ }
+ if (i == pGlxScreen->numVisuals) {
+ /*
+ ** Visual not support on this screen by this OpenGL implementation.
+ */
+ client->errorValue = visual;
+ free( glxc );
+ return BadValue;
+ }
+
+ if ( glxc->pFBConfig == NULL ) {
+ glxc->pFBConfig = glxLookupFBConfigByVID( visual );
+
+ if ( glxc->pFBConfig == NULL ) {
+ /*
+ * visual does not have an FBConfig ???
+ client->errorValue = visual;
+ free( glxc );
+ return BadValue;
+ */
+ }
+ }
+ }
+ else {
+ pVisual = NULL;
+ pGlxVisual = NULL;
+ }
+
+ glxc->pScreen = pScreen;
+ glxc->pGlxScreen = pGlxScreen;
+ glxc->pVisual = pVisual;
+ glxc->pGlxVisual = pGlxVisual;
+
+ /*
+ * allocate memory for back-end servers info
+ */
+ num_be_screens = to_screen - from_screen + 1;
+ glxc->real_ids = (XID *)malloc(sizeof(XID) * num_be_screens);
+ if (!glxc->real_ids) {
+ return BadAlloc;
+ }
+ glxc->real_vids = (XID *)malloc(sizeof(XID) * num_be_screens);
+ if (!glxc->real_vids) {
+ return BadAlloc;
+ }
+
+ for (screen = from_screen; screen <= to_screen; screen++) {
+ int sent = 0;
+ pScreen = screenInfo.screens[screen];
+ pGlxScreen = &__glXActiveScreens[screen];
+ dmxScreen = &dmxScreens[screen];
+
+ if (glxc->pFBConfig) {
+ __GLXFBConfig *beFBConfig = glxLookupBackEndFBConfig( glxc->pFBConfig->id,
+ screen );
+ be_fbconfigId = beFBConfig->id;
+ }
+
+ if (pGlxVisual) {
+
+ be_vid = glxMatchGLXVisualInConfigList( pGlxVisual,
+ dmxScreen->glxVisuals,
+ dmxScreen->numGlxVisuals );
+
+ if (!be_vid) {
+ /* visual is not supported on the back-end server */
+ free( glxc->real_ids );
+ free( glxc->real_vids );
+ free( glxc );
+ return BadValue;
+ }
+ }
+
+ glxc->real_ids[screen-from_screen] = XAllocID(GetBackEndDisplay(cl,screen));
+
+ /* send the create context request to the back-end server */
+ dpy = GetBackEndDisplay(cl,screen);
+ if (glxc->pFBConfig) {
+ /*Since for a certain visual both RGB and COLOR INDEX
+ *can be on then the only parmeter to choose the renderType
+ * should be the class of the colormap since all 4 first
+ * classes does not support RGB mode only COLOR INDEX ,
+ * and so TrueColor and DirectColor does not support COLOR INDEX*/
+ int renderType = glxc->pFBConfig->renderType;
+ if ( pVisual ) {
+ switch ( pVisual->class ){
+ case PseudoColor:
+ case StaticColor:
+ case GrayScale:
+ case StaticGray:
+ renderType = GLX_COLOR_INDEX_TYPE;
+ break;
+ case TrueColor:
+ case DirectColor:
+ default:
+ renderType = GLX_RGBA_TYPE;
+ break;
+ }
+ }
+ if ( __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ LockDisplay(dpy);
+ GetReq(GLXCreateNewContext,be_new_req);
+ be_new_req->reqType = dmxScreen->glxMajorOpcode;
+ be_new_req->glxCode = X_GLXCreateNewContext;
+ be_new_req->context = (unsigned int)glxc->real_ids[screen-from_screen];
+ be_new_req->fbconfig = (unsigned int)be_fbconfigId;
+ be_new_req->screen = DefaultScreen(dpy);
+ be_new_req->renderType = renderType;
+
+ be_new_req->shareList = (shareglxc ? shareglxc->real_ids[screen-from_screen] : 0);
+ be_new_req->isDirect = 0;
+ UnlockDisplay(dpy);
+ glxc->real_vids[screen-from_screen] = be_fbconfigId;
+ sent = 1;
+ }
+ else if (glxIsExtensionSupported("GLX_SGIX_fbconfig")) {
+
+ xGLXCreateContextWithConfigSGIXReq *ext_req;
+ xGLXVendorPrivateReq *vpreq;
+ LockDisplay(dpy);
+ GetReqExtra(GLXVendorPrivate,
+ sz_xGLXCreateContextWithConfigSGIXReq - sz_xGLXVendorPrivateReq,
+ vpreq);
+ ext_req = (xGLXCreateContextWithConfigSGIXReq *)vpreq;
+ ext_req->reqType = dmxScreen->glxMajorOpcode;
+ ext_req->glxCode = X_GLXVendorPrivate;
+ ext_req->vendorCode = X_GLXvop_CreateContextWithConfigSGIX;
+ ext_req->context = (unsigned int)glxc->real_ids[screen-from_screen];
+ ext_req->fbconfig = (unsigned int)be_fbconfigId;
+ ext_req->screen = DefaultScreen(dpy);
+ ext_req->renderType = renderType;
+ ext_req->shareList = (shareglxc ? shareglxc->real_ids[screen-from_screen] : 0);
+ ext_req->isDirect = 0;
+ UnlockDisplay(dpy);
+ glxc->real_vids[screen-from_screen] = be_fbconfigId;
+ sent = 1;
+ }
+ }
+
+ if (!sent) {
+ LockDisplay(dpy);
+ GetReq(GLXCreateContext,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXCreateContext;
+ be_req->context = (unsigned int)glxc->real_ids[screen-from_screen];
+ be_req->visual = (unsigned int)be_vid;
+ be_req->screen = DefaultScreen(dpy);
+ be_req->shareList = (shareglxc ? shareglxc->real_ids[screen-from_screen] : 0);
+ be_req->isDirect = 0;
+ UnlockDisplay(dpy);
+ glxc->real_vids[screen-from_screen] = be_vid;
+ }
+ SyncHandle();
+
+ }
+
+ /*
+ ** Register this context as a resource.
+ */
+ if (!AddResource(gcId, __glXContextRes, (pointer)glxc)) {
+ free( glxc->real_ids );
+ free( glxc->real_vids );
+ free( glxc );
+ client->errorValue = gcId;
+ return BadAlloc;
+ }
+
+ /*
+ ** Finally, now that everything is working, setup the rest of the
+ ** context.
+ */
+ glxc->id = gcId;
+ glxc->share_id = shareList;
+ glxc->idExists = GL_TRUE;
+ glxc->isCurrent = GL_FALSE;
+
+ return Success;
+}
+
+int __glXCreateContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateContextReq *req = (xGLXCreateContextReq *) pc;
+
+ return( CreateContext(cl, req->context,req->visual, None,
+ req->screen, req->shareList, req->isDirect) );
+
+}
+
+int __glXCreateNewContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateNewContextReq *req = (xGLXCreateNewContextReq *) pc;
+
+ return( CreateContext(cl, req->context,None, req->fbconfig,
+ req->screen, req->shareList, req->isDirect) );
+
+}
+
+int __glXCreateContextWithConfigSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateContextWithConfigSGIXReq *req = (xGLXCreateContextWithConfigSGIXReq *) pc;
+
+ return( CreateContext(cl, req->context, None, req->fbconfig,
+ req->screen, req->shareList, req->isDirect) );
+
+}
+
+int __glXQueryMaxSwapBarriersSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXQueryMaxSwapBarriersSGIXReq *req =
+ (xGLXQueryMaxSwapBarriersSGIXReq *)pc;
+ xGLXQueryMaxSwapBarriersSGIXReply reply;
+
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.length = 0;
+ reply.max = QueryMaxSwapBarriersSGIX(req->screen);
+
+ if (client->swapped) {
+ __glXSwapQueryMaxSwapBarriersSGIXReply(client, &reply);
+ } else {
+ WriteToClient(client, sz_xGLXQueryMaxSwapBarriersSGIXReply,
+ (char *)&reply);
+ }
+
+ return Success;
+}
+
+int __glXBindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *)pc;
+ DrawablePtr pDraw;
+ __GLXpixmap *pGlxPixmap = NULL;
+ __glXWindow *pGlxWindow = NULL;
+ int rc;
+
+ rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixGetAttrAccess);
+ if (rc != Success) {
+ dixLookupResourceByType((pointer*) &pGlxPixmap, req->drawable,
+ __glXPixmapRes, NullClient, DixUnknownAccess);
+ if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
+ }
+
+ if (!pDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxWindow, req->drawable,
+ __glXWindowRes, NullClient, DixUnknownAccess);
+ if (pGlxWindow) pDraw = pGlxWindow->pDraw;
+ }
+
+ if (!pDraw) {
+ client->errorValue = req->drawable;
+ return __glXBadDrawable;
+ }
+
+ return BindSwapBarrierSGIX(pDraw, req->barrier);
+}
+
+int __glXJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXJoinSwapGroupSGIXReq *req = (xGLXJoinSwapGroupSGIXReq *)pc;
+ DrawablePtr pDraw, pMember = NULL;
+ __GLXpixmap *pGlxPixmap = NULL;
+ __glXWindow *pGlxWindow = NULL;
+ int rc;
+
+ rc = dixLookupDrawable(&pDraw, req->drawable, client, 0, DixManageAccess);
+ if (rc != Success) {
+ dixLookupResourceByType((pointer*) &pGlxPixmap, req->drawable,
+ __glXPixmapRes, NullClient, DixUnknownAccess);
+ if (pGlxPixmap) pDraw = pGlxPixmap->pDraw;
+ }
+
+ if (!pDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxWindow, req->drawable,
+ __glXWindowRes, NullClient, DixUnknownAccess);
+ if (pGlxWindow) pDraw = pGlxWindow->pDraw;
+ }
+
+ if (!pDraw) {
+ client->errorValue = req->drawable;
+ return __glXBadDrawable;
+ }
+
+ if (req->member != None) {
+ rc = dixLookupDrawable(&pMember, req->member, client, 0,
+ DixGetAttrAccess);
+ if (rc != Success) {
+ dixLookupResourceByType((pointer*) &pGlxPixmap, req->member,
+ __glXPixmapRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxPixmap) pMember = pGlxPixmap->pDraw;
+ }
+
+ if (!pMember && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxWindow, req->member,
+ __glXWindowRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxWindow) pMember = pGlxWindow->pDraw;
+ }
+
+ if (!pMember) {
+ client->errorValue = req->member;
+ return __glXBadDrawable;
+ }
+ }
+
+ return JoinSwapGroupSGIX(pDraw, pMember);
+}
+
+
+/*
+** Destroy a GL context as an X resource.
+*/
+int __glXDestroyContext(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXDestroyContextReq *req = (xGLXDestroyContextReq *) pc;
+ xGLXDestroyContextReq *be_req;
+ GLXContextID gcId = req->context;
+ __GLXcontext *glxc;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+
+ dixLookupResourceByType((pointer*) &glxc, gcId, __glXContextRes,
+ NullClient, DixUnknownAccess);
+ if (glxc) {
+ /*
+ ** Just free the resource; don't actually destroy the context,
+ ** because it might be in use. The
+ ** destroy method will be called by the resource destruction routine
+ ** if necessary.
+ */
+ FreeResourceByType(gcId, __glXContextRes, FALSE);
+
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+ } else {
+ client->errorValue = gcId;
+ return __glXBadContext;
+ }
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ /*
+ * send DestroyContext request to all back-end servers
+ */
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReq(GLXDestroyContext,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXDestroyContext;
+ be_req->context = glxc->real_ids[s-from_screen];
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ return Success;
+}
+
+/*****************************************************************************/
+
+/*
+** For each client, the server keeps a table of all the contexts that are
+** current for that client (each thread of a client may have its own current
+** context). These routines add, change, and lookup contexts in the table.
+*/
+
+/*
+** Add a current context, and return the tag that will be used to refer to it.
+*/
+static int AddCurrentContext(__GLXclientState *cl, __GLXcontext *glxc, DrawablePtr pDraw)
+{
+ int i;
+ int num = cl->numCurrentContexts;
+ __GLXcontext **table = cl->currentContexts;
+
+ if (!glxc) return -1;
+
+ /*
+ ** Try to find an empty slot and use it.
+ */
+ for (i=0; i < num; i++) {
+ if (!table[i]) {
+ table[i] = glxc;
+ return i+1;
+ }
+ }
+ /*
+ ** Didn't find a free slot, so we'll have to grow the table.
+ */
+ if (!num) {
+ table = (__GLXcontext **) malloc(sizeof(__GLXcontext *));
+ cl->currentDrawables = (DrawablePtr *) malloc(sizeof(DrawablePtr));
+ cl->be_currentCTag = (GLXContextTag *) malloc(screenInfo.numScreens *sizeof(GLXContextTag));
+ } else {
+ table = (__GLXcontext **) realloc(table,
+ (num+1)*sizeof(__GLXcontext *));
+ cl->currentDrawables = (DrawablePtr *) realloc(
+ cl->currentDrawables ,
+ (num+1)*sizeof(DrawablePtr));
+ cl->be_currentCTag = (GLXContextTag *) realloc(cl->be_currentCTag,
+ (num+1)*screenInfo.numScreens*sizeof(GLXContextTag));
+ }
+ table[num] = glxc;
+ cl->currentDrawables[num] = pDraw;
+ cl->currentContexts = table;
+ cl->numCurrentContexts++;
+
+ memset(cl->be_currentCTag + num*screenInfo.numScreens, 0,
+ screenInfo.numScreens * sizeof(GLXContextTag));
+
+ return num+1;
+}
+
+/*
+** Given a tag, change the current context for the corresponding entry.
+*/
+static void ChangeCurrentContext(__GLXclientState *cl, __GLXcontext *glxc,
+ GLXContextTag tag)
+{
+ __GLXcontext **table = cl->currentContexts;
+ table[tag-1] = glxc;
+}
+
+/*
+** Given a tag, and back-end screen number, retrives the current back-end
+** tag.
+*/
+int GetCurrentBackEndTag(__GLXclientState *cl, GLXContextTag tag, int s)
+{
+ if (tag >0) {
+ return( cl->be_currentCTag[ (tag-1)*screenInfo.numScreens + s ] );
+ }
+ else {
+ return 0;
+ }
+}
+
+/*
+** Given a tag, and back-end screen number, sets the current back-end
+** tag.
+*/
+static void SetCurrentBackEndTag(__GLXclientState *cl, GLXContextTag tag, int s, GLXContextTag be_tag)
+{
+ if (tag >0) {
+ cl->be_currentCTag[ (tag-1)*screenInfo.numScreens + s ] = be_tag;
+ }
+}
+
+/*
+** For this implementation we have chosen to simply use the index of the
+** context's entry in the table as the context tag. A tag must be greater
+** than 0.
+*/
+__GLXcontext *__glXLookupContextByTag(__GLXclientState *cl, GLXContextTag tag)
+{
+ int num = cl->numCurrentContexts;
+
+ if (tag < 1 || tag > num) {
+ return 0;
+ } else {
+ return cl->currentContexts[tag-1];
+ }
+}
+
+DrawablePtr __glXLookupDrawableByTag(__GLXclientState *cl, GLXContextTag tag)
+{
+ int num = cl->numCurrentContexts;
+
+ if (tag < 1 || tag > num) {
+ return 0;
+ } else {
+ return cl->currentDrawables[tag-1];
+ }
+}
+
+/*****************************************************************************/
+
+static void StopUsingContext(__GLXcontext *glxc)
+{
+ if (glxc) {
+ if (glxc == __glXLastContext) {
+ /* Tell server GL library */
+ __glXLastContext = 0;
+ }
+ glxc->isCurrent = GL_FALSE;
+ if (!glxc->idExists) {
+ __glXFreeContext(glxc);
+ }
+ }
+}
+
+static void StartUsingContext(__GLXclientState *cl, __GLXcontext *glxc)
+{
+ glxc->isCurrent = GL_TRUE;
+}
+
+/*****************************************************************************/
+/*
+** Make an OpenGL context and drawable current.
+*/
+static int MakeCurrent(__GLXclientState *cl,
+ GLXDrawable drawable,
+ GLXDrawable readdrawable,
+ GLXContextID context,
+ GLXContextTag oldContextTag)
+{
+ ClientPtr client = cl->client;
+ DrawablePtr pDraw = NULL;
+ DrawablePtr pReadDraw = NULL;
+ xGLXMakeCurrentReadSGIReply new_reply;
+ xGLXMakeCurrentReq *be_req;
+ xGLXMakeCurrentReply be_reply;
+ xGLXMakeContextCurrentReq *be_new_req;
+ xGLXMakeContextCurrentReply be_new_reply;
+ GLXDrawable drawId = drawable;
+ GLXDrawable readId = readdrawable;
+ GLXContextID contextId = context;
+ __GLXpixmap *pGlxPixmap = 0;
+ __GLXpixmap *pReadGlxPixmap = 0;
+ __GLXcontext *glxc, *prevglxc;
+ GLXContextTag tag = oldContextTag;
+ WindowPtr pWin = NULL;
+ WindowPtr pReadWin = NULL;
+ __glXWindow *pGlxWindow = NULL;
+ __glXWindow *pGlxReadWindow = NULL;
+ __glXPbuffer *pGlxPbuffer = NULL;
+ __glXPbuffer *pGlxReadPbuffer = NULL;
+#ifdef PANORAMIX
+ PanoramiXRes *pXinDraw = NULL;
+ PanoramiXRes *pXinReadDraw = NULL;
+#endif
+ int from_screen = 0;
+ int to_screen = 0;
+ int s, rc;
+
+ /*
+ ** If one is None and the other isn't, it's a bad match.
+ */
+ if ((drawId == None && contextId != None) ||
+ (drawId != None && contextId == None)) {
+ return BadMatch;
+ }
+
+ /*
+ ** Lookup old context. If we have one, it must be in a usable state.
+ */
+ if (tag != 0) {
+ prevglxc = __glXLookupContextByTag(cl, tag);
+ if (!prevglxc) {
+ /*
+ ** Tag for previous context is invalid.
+ */
+ return __glXBadContextTag;
+ }
+ } else {
+ prevglxc = 0;
+ }
+
+ /*
+ ** Lookup new context. It must not be current for someone else.
+ */
+ if (contextId != None) {
+ dixLookupResourceByType((pointer*) &glxc, contextId, __glXContextRes,
+ NullClient, DixUnknownAccess);
+ if (!glxc) {
+ client->errorValue = contextId;
+ return __glXBadContext;
+ }
+ if ((glxc != prevglxc) && glxc->isCurrent) {
+ /* Context is current to somebody else */
+ return BadAccess;
+ }
+ } else {
+ /* Switching to no context. Ignore new drawable. */
+ glxc = 0;
+ }
+
+ if (drawId != None) {
+ rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixWriteAccess);
+ if (rc == Success) {
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ /*
+ ** Drawable is an X Window.
+ */
+ VisualID vid;
+ pWin = (WindowPtr)pDraw;
+ vid = wVisual(pWin);
+
+ new_reply.writeVid = (glxc->pFBConfig ? glxc->pFBConfig->id : vid);
+ new_reply.writeType = GLX_WINDOW_TYPE;
+
+ /*
+ ** Check if window and context are similar.
+ */
+ if ((vid != glxc->pVisual->vid) ||
+ (pWin->drawable.pScreen != glxc->pScreen)) {
+ client->errorValue = drawId;
+ return BadMatch;
+ }
+
+ from_screen = to_screen = pWin->drawable.pScreen->myNum;
+
+ } else {
+ /*
+ ** An X Pixmap is not allowed as a parameter (a GLX Pixmap
+ ** is, but it must first be created with glxCreateGLXPixmap).
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+ }
+
+ if (!pDraw) {
+ dixLookupResourceByType((pointer*) &pGlxPixmap, drawId,
+ __glXPixmapRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxPixmap) {
+ /*
+ ** Check if pixmap and context are similar.
+ */
+ if (pGlxPixmap->pScreen != glxc->pScreen ||
+ pGlxPixmap->pGlxVisual != glxc->pGlxVisual) {
+ client->errorValue = drawId;
+ return BadMatch;
+ }
+ pDraw = pGlxPixmap->pDraw;
+
+ new_reply.writeVid = (glxc->pFBConfig ? glxc->pFBConfig->id :
+ pGlxPixmap->pGlxVisual->vid);
+
+ new_reply.writeType = GLX_PIXMAP_TYPE;
+
+ from_screen = to_screen = pGlxPixmap->pScreen->myNum;
+
+ }
+ }
+
+ if (!pDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxWindow, drawId,
+ __glXWindowRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxWindow) {
+ /*
+ ** Drawable is a GLXWindow.
+ **
+ ** Check if GLX window and context are similar.
+ */
+ if (pGlxWindow->pScreen != glxc->pScreen ||
+ pGlxWindow->pGlxFBConfig != glxc->pFBConfig) {
+ client->errorValue = drawId;
+ return BadMatch;
+ }
+
+ pDraw = pGlxWindow->pDraw;
+ new_reply.writeVid = pGlxWindow->pGlxFBConfig->id;
+ new_reply.writeType = GLX_GLXWINDOW_TYPE;
+ }
+
+ }
+
+ if (!pDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxPbuffer, drawId,
+ __glXPbufferRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxPbuffer) {
+ if (pGlxPbuffer->pScreen != glxc->pScreen ||
+ pGlxPbuffer->pFBConfig != glxc->pFBConfig) {
+ client->errorValue = drawId;
+ return BadMatch;
+ }
+
+ pDraw = (DrawablePtr)pGlxPbuffer;
+ new_reply.writeVid = pGlxPbuffer->pFBConfig->id;
+ new_reply.writeType = GLX_PBUFFER_TYPE;
+ }
+ }
+
+ if (!pDraw) {
+ /*
+ ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ } else {
+ pDraw = 0;
+ }
+
+ if (readId != None && readId != drawId ) {
+ rc = dixLookupDrawable(&pReadDraw, readId, client, 0, DixReadAccess);
+ if (rc == Success) {
+ if (pReadDraw->type == DRAWABLE_WINDOW) {
+ /*
+ ** Drawable is an X Window.
+ */
+ VisualID vid;
+ pReadWin = (WindowPtr)pDraw;
+ vid = wVisual(pReadWin);
+
+ new_reply.readVid = (glxc->pFBConfig ? glxc->pFBConfig->id : vid);
+ new_reply.readType = GLX_WINDOW_TYPE;
+
+ /*
+ ** Check if window and context are similar.
+ */
+ if ((vid != glxc->pVisual->vid) ||
+ (pReadWin->drawable.pScreen != glxc->pScreen)) {
+ client->errorValue = readId;
+ return BadMatch;
+ }
+
+ } else {
+
+ /*
+ ** An X Pixmap is not allowed as a parameter (a GLX Pixmap
+ ** is, but it must first be created with glxCreateGLXPixmap).
+ */
+ client->errorValue = readId;
+ return __glXBadDrawable;
+ }
+ }
+
+ if (!pReadDraw) {
+ dixLookupResourceByType((pointer*) &pReadGlxPixmap, readId,
+ __glXPixmapRes, NullClient,
+ DixUnknownAccess);
+ if (pReadGlxPixmap) {
+ /*
+ ** Check if pixmap and context are similar.
+ */
+ if (pReadGlxPixmap->pScreen != glxc->pScreen ||
+ pReadGlxPixmap->pGlxVisual != glxc->pGlxVisual) {
+ client->errorValue = readId;
+ return BadMatch;
+ }
+ pReadDraw = pReadGlxPixmap->pDraw;
+
+ new_reply.readVid = (glxc->pFBConfig ? glxc->pFBConfig->id :
+ pReadGlxPixmap->pGlxVisual->vid );
+ new_reply.readType = GLX_PIXMAP_TYPE;
+
+ }
+ }
+
+ if (!pReadDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxReadWindow, readId,
+ __glXWindowRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxReadWindow) {
+ /*
+ ** Drawable is a GLXWindow.
+ **
+ ** Check if GLX window and context are similar.
+ */
+ if (pGlxReadWindow->pScreen != glxc->pScreen ||
+ pGlxReadWindow->pGlxFBConfig != glxc->pFBConfig) {
+ client->errorValue = readId;
+ return BadMatch;
+ }
+
+ pReadDraw = pGlxReadWindow->pDraw;
+ new_reply.readVid = pGlxReadWindow->pGlxFBConfig->id;
+ new_reply.readType = GLX_GLXWINDOW_TYPE;
+ }
+ }
+
+ if (!pReadDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxReadPbuffer, readId,
+ __glXPbufferRes, NullClient,
+ DixUnknownAccess);
+ if (pGlxReadPbuffer) {
+ if (pGlxReadPbuffer->pScreen != glxc->pScreen ||
+ pGlxReadPbuffer->pFBConfig != glxc->pFBConfig) {
+ client->errorValue = drawId;
+ return BadMatch;
+ }
+
+ pReadDraw = (DrawablePtr)pGlxReadPbuffer;
+ new_reply.readVid = pGlxReadPbuffer->pFBConfig->id;
+ new_reply.readType = GLX_PBUFFER_TYPE;
+ }
+ }
+
+ if (!pReadDraw) {
+ /*
+ ** Drawable is neither a Window nor a GLXPixmap.
+ */
+ client->errorValue = readId;
+ return __glXBadDrawable;
+ }
+
+ } else {
+ pReadDraw = pDraw;
+ pReadGlxPixmap = pGlxPixmap;
+ pReadWin = pWin;
+ new_reply.readVid = new_reply.writeVid;
+ new_reply.readType = new_reply.writeType;
+ }
+
+ if (prevglxc) {
+
+ if (prevglxc->pGlxPixmap) {
+ /*
+ ** The previous drawable was a glx pixmap, release it.
+ */
+ prevglxc->pGlxPixmap->refcnt--;
+ __glXFreeGLXPixmap( prevglxc->pGlxPixmap );
+ prevglxc->pGlxPixmap = 0;
+ }
+
+ if (prevglxc->pGlxReadPixmap) {
+ /*
+ ** The previous drawable was a glx pixmap, release it.
+ */
+ prevglxc->pGlxReadPixmap->refcnt--;
+ __glXFreeGLXPixmap( prevglxc->pGlxReadPixmap );
+ prevglxc->pGlxReadPixmap = 0;
+ }
+
+ if (prevglxc->pGlxWindow) {
+ /*
+ ** The previous drawable was a glx window, release it.
+ */
+ prevglxc->pGlxWindow->refcnt--;
+ __glXFreeGLXWindow( prevglxc->pGlxWindow );
+ prevglxc->pGlxWindow = 0;
+ }
+
+ if (prevglxc->pGlxReadWindow) {
+ /*
+ ** The previous drawable was a glx window, release it.
+ */
+ prevglxc->pGlxReadWindow->refcnt--;
+ __glXFreeGLXWindow( prevglxc->pGlxReadWindow );
+ prevglxc->pGlxReadWindow = 0;
+ }
+
+ if (prevglxc->pGlxPbuffer) {
+ /*
+ ** The previous drawable was a glx Pbuffer, release it.
+ */
+ prevglxc->pGlxPbuffer->refcnt--;
+ __glXFreeGLXPbuffer( prevglxc->pGlxPbuffer );
+ prevglxc->pGlxPbuffer = 0;
+ }
+
+ if (prevglxc->pGlxReadPbuffer) {
+ /*
+ ** The previous drawable was a glx Pbuffer, release it.
+ */
+ prevglxc->pGlxReadPbuffer->refcnt--;
+ __glXFreeGLXPbuffer( prevglxc->pGlxReadPbuffer );
+ prevglxc->pGlxReadPbuffer = 0;
+ }
+
+ ChangeCurrentContext(cl, glxc, tag);
+ ChangeCurrentContext(cl, glxc, tag);
+ StopUsingContext(prevglxc);
+ } else {
+ tag = AddCurrentContext(cl, glxc, pDraw);
+ }
+ if (glxc) {
+
+ glxc->pGlxPixmap = pGlxPixmap;
+ glxc->pGlxReadPixmap = pReadGlxPixmap;
+ glxc->pGlxWindow = pGlxWindow;
+ glxc->pGlxReadWindow = pGlxReadWindow;
+ glxc->pGlxPbuffer = pGlxPbuffer;
+ glxc->pGlxReadPbuffer = pGlxReadPbuffer;
+
+ if (pGlxPixmap) {
+ pGlxPixmap->refcnt++;
+ }
+
+ if (pReadGlxPixmap) {
+ pReadGlxPixmap->refcnt++;
+ }
+
+ if (pGlxWindow) {
+ pGlxWindow->refcnt++;
+ }
+
+ if (pGlxReadWindow) {
+ pGlxReadWindow->refcnt++;
+ }
+
+ if (pGlxPbuffer) {
+ pGlxPbuffer->refcnt++;
+ }
+
+ if (pGlxReadPbuffer) {
+ pGlxReadPbuffer->refcnt++;
+ }
+
+ StartUsingContext(cl, glxc);
+ new_reply.contextTag = tag;
+ } else {
+ new_reply.contextTag = 0;
+ }
+ new_reply.length = 0;
+ new_reply.type = X_Reply;
+ new_reply.sequenceNumber = client->sequence;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+
+ if (pDraw && new_reply.writeType != GLX_PBUFFER_TYPE) {
+ dixLookupResourceByClass((pointer*) &pXinDraw,
+ pDraw->id, XRC_DRAWABLE,
+ client, DixReadAccess);
+ }
+
+ if (pReadDraw && pReadDraw != pDraw &&
+ new_reply.readType != GLX_PBUFFER_TYPE) {
+ dixLookupResourceByClass((pointer*) &pXinReadDraw,
+ pReadDraw->id, XRC_DRAWABLE,
+ client, DixReadAccess);
+ }
+ else {
+ pXinReadDraw = pXinDraw;
+ }
+ }
+#endif
+
+
+ /* send the MakeCurrent request to all required
+ * back-end servers.
+ */
+ for (s = from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+ unsigned int be_draw = None;
+ unsigned int be_read_draw = None;
+
+ if (pGlxPixmap) {
+ be_draw = pGlxPixmap->be_xids[s];
+ }
+ else if (pGlxPbuffer) {
+ be_draw = pGlxPbuffer->be_xids[s];
+ }
+#ifdef PANORAMIX
+ else if (pXinDraw) {
+ dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
+ }
+#endif
+ else if (pGlxWindow) {
+ pWin = (WindowPtr)pGlxWindow->pDraw;
+ }
+
+ if (pWin && be_draw == None) {
+ be_draw = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ if (!be_draw) {
+ /* it might be that the window did not created yet on the */
+ /* back-end server (lazy window creation option), force */
+ /* creation of the window */
+ dmxCreateAndRealizeWindow( pWin, TRUE );
+ be_draw = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ }
+ }
+
+ /*
+ * Before sending the MakeCurrent request - sync the
+ * X11 connection to the back-end servers to make sure
+ * that drawable is already created
+ */
+ dmxSync( dmxScreen, 1 );
+
+ if (drawId == readId) {
+ LockDisplay(dpy);
+ GetReq(GLXMakeCurrent, be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXMakeCurrent;
+ be_req->drawable = be_draw;
+ be_req->context = (unsigned int)(glxc ? glxc->real_ids[s-from_screen] : 0);
+ be_req->oldContextTag = GetCurrentBackEndTag(cl, tag, s);
+ if (!_XReply(dpy, (xReply *) &be_reply, 0, False)) {
+
+ /* The make current failed */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return( BE_TO_CLIENT_ERROR(dmxLastErrorEvent.error_code) );
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ SetCurrentBackEndTag( cl, tag, s, be_reply.contextTag );
+ }
+ else {
+
+ if (pReadGlxPixmap) {
+ be_read_draw = pReadGlxPixmap->be_xids[s];
+ }
+ else if (pGlxReadPbuffer) {
+ be_read_draw = pGlxReadPbuffer->be_xids[s];
+ }
+#ifdef PANORAMIX
+ else if (pXinReadDraw) {
+ dixLookupWindow(&pReadWin, pXinReadDraw->info[s].id, client,
+ DixReadAccess);
+ }
+#endif
+ else if (pGlxReadWindow) {
+ pReadWin = (WindowPtr)pGlxReadWindow->pDraw;
+ }
+
+ if (pReadWin && be_read_draw == None) {
+ be_read_draw = (unsigned int)(DMX_GET_WINDOW_PRIV(pReadWin))->window;
+ if (!be_read_draw) {
+ /* it might be that the window did not created yet on the */
+ /* back-end server (lazy window creation option), force */
+ /* creation of the window */
+ dmxCreateAndRealizeWindow( pReadWin, TRUE );
+ be_read_draw = (unsigned int)(DMX_GET_WINDOW_PRIV(pReadWin))->window;
+ dmxSync( dmxScreen, 1 );
+ }
+ }
+
+ if ( __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ LockDisplay(dpy);
+ GetReq(GLXMakeContextCurrent, be_new_req);
+ be_new_req->reqType = dmxScreen->glxMajorOpcode;
+ be_new_req->glxCode = X_GLXMakeContextCurrent;
+ be_new_req->drawable = be_draw;
+ be_new_req->readdrawable = be_read_draw;
+ be_new_req->context = (unsigned int)(glxc ? glxc->real_ids[s-from_screen] : 0);
+ be_new_req->oldContextTag = GetCurrentBackEndTag(cl, tag, s);
+ if (!_XReply(dpy, (xReply *) &be_new_reply, 0, False)) {
+
+ /* The make current failed */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return( BE_TO_CLIENT_ERROR(dmxLastErrorEvent.error_code) );
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ SetCurrentBackEndTag( cl, tag, s, be_new_reply.contextTag );
+ }
+ else if (glxIsExtensionSupported("GLX_SGI_make_current_read")) {
+ xGLXMakeCurrentReadSGIReq *ext_req;
+ xGLXVendorPrivateWithReplyReq *vpreq;
+ xGLXMakeCurrentReadSGIReply ext_reply;
+
+ LockDisplay(dpy);
+ GetReqExtra(GLXVendorPrivateWithReply,
+ sz_xGLXMakeCurrentReadSGIReq - sz_xGLXVendorPrivateWithReplyReq,
+ vpreq);
+ ext_req = (xGLXMakeCurrentReadSGIReq *)vpreq;
+ ext_req->reqType = dmxScreen->glxMajorOpcode;
+ ext_req->glxCode = X_GLXVendorPrivateWithReply;
+ ext_req->vendorCode = X_GLXvop_MakeCurrentReadSGI;
+ ext_req->drawable = be_draw;
+ ext_req->readable = be_read_draw;
+ ext_req->context = (unsigned int)(glxc ? glxc->real_ids[s-from_screen] : 0);
+ ext_req->oldContextTag = GetCurrentBackEndTag(cl, tag, s);
+ if (!_XReply(dpy, (xReply *) &ext_reply, 0, False)) {
+
+ /* The make current failed */
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return( BE_TO_CLIENT_ERROR(dmxLastErrorEvent.error_code) );
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ SetCurrentBackEndTag( cl, tag, s, ext_reply.contextTag );
+
+ }
+ else {
+ return BadMatch;
+ }
+ }
+
+ XFlush( dpy );
+ }
+
+ if (client->swapped) {
+ __glXSwapMakeCurrentReply(client, &new_reply);
+ } else {
+ WriteToClient(client, sz_xGLXMakeContextCurrentReply, (char *)&new_reply);
+ }
+
+ return Success;
+}
+
+int __glXMakeCurrent(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXMakeCurrentReq *req = (xGLXMakeCurrentReq *) pc;
+
+ return( MakeCurrent(cl, req->drawable, req->drawable,
+ req->context, req->oldContextTag ) );
+}
+
+int __glXMakeContextCurrent(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXMakeContextCurrentReq *req = (xGLXMakeContextCurrentReq *) pc;
+
+ return( MakeCurrent(cl, req->drawable, req->readdrawable,
+ req->context, req->oldContextTag ) );
+}
+
+int __glXMakeCurrentReadSGI(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXMakeCurrentReadSGIReq *req = (xGLXMakeCurrentReadSGIReq *) pc;
+
+ return( MakeCurrent(cl, req->drawable, req->readable,
+ req->context, req->oldContextTag ) );
+}
+
+int __glXIsDirect(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXIsDirectReq *req = (xGLXIsDirectReq *) pc;
+ xGLXIsDirectReply reply;
+ __GLXcontext *glxc;
+
+ /*
+ ** Find the GL context.
+ */
+ dixLookupResourceByType((pointer*) &glxc, req->context, __glXContextRes,
+ NullClient, DixUnknownAccess);
+ if (!glxc) {
+ client->errorValue = req->context;
+ return __glXBadContext;
+ }
+
+ reply.isDirect = 0;
+ reply.length = 0;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ if (client->swapped) {
+ __glXSwapIsDirectReply(client, &reply);
+ } else {
+ WriteToClient(client, sz_xGLXIsDirectReply, (char *)&reply);
+ }
+
+ return Success;
+}
+
+int __glXQueryVersion(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+/* xGLXQueryVersionReq *req = (xGLXQueryVersionReq *) pc; */
+ xGLXQueryVersionReply reply;
+
+ /*
+ ** Server should take into consideration the version numbers sent by the
+ ** client if it wants to work with older clients; however, in this
+ ** implementation the server just returns its version number.
+ */
+ reply.majorVersion = __glXVersionMajor;
+ reply.minorVersion = __glXVersionMinor;
+ reply.length = 0;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ if (client->swapped) {
+ __glXSwapQueryVersionReply(client, &reply);
+ } else {
+ WriteToClient(client, sz_xGLXQueryVersionReply, (char *)&reply);
+ }
+ return Success;
+}
+
+int __glXWaitGL(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXWaitGLReq *req = (xGLXWaitGLReq *)pc;
+ xGLXWaitGLReq *be_req = (xGLXWaitGLReq *)pc;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+ __GLXcontext *glxc = NULL;
+
+ if (req->contextTag != 0) {
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (glxc) {
+ from_screen = to_screen = glxc->pScreen->myNum;
+ }
+ }
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReq(GLXWaitGL,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXWaitGL;
+ be_req->contextTag = (glxc ? GetCurrentBackEndTag(cl,req->contextTag,s) : 0);
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ XSync(dpy, False);
+ }
+
+ return Success;
+}
+
+int __glXWaitX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXWaitXReq *req = (xGLXWaitXReq *)pc;
+ xGLXWaitXReq *be_req;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+ __GLXcontext *glxc = NULL;
+
+ if (req->contextTag != 0) {
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (glxc) {
+ from_screen = to_screen = glxc->pScreen->myNum;
+ }
+ }
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ dmxSync( dmxScreen, 1 );
+
+ LockDisplay(dpy);
+ GetReq(GLXWaitX,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXWaitX;
+ be_req->contextTag = (glxc ? GetCurrentBackEndTag(cl,req->contextTag,s) : 0);
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ XFlush( dpy );
+ }
+
+ return Success;
+}
+
+int __glXCopyContext(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXCopyContextReq *be_req;
+ xGLXCopyContextReq *req = (xGLXCopyContextReq *) pc;
+ GLXContextID source = req->source;
+ GLXContextID dest = req->dest;
+ GLXContextTag tag = req->contextTag;
+ unsigned long mask = req->mask;
+ __GLXcontext *src, *dst;
+ int s;
+ int from_screen = 0;
+ int to_screen = 0;
+
+ /*
+ ** Check that each context exists.
+ */
+ dixLookupResourceByType((pointer*) &src, source, __glXContextRes,
+ NullClient, DixUnknownAccess);
+ if (!src) {
+ client->errorValue = source;
+ return __glXBadContext;
+ }
+ dixLookupResourceByType((pointer*) &dst, dest, __glXContextRes,
+ NullClient, DixUnknownAccess);
+ if (!dst) {
+ client->errorValue = dest;
+ return __glXBadContext;
+ }
+
+ /*
+ ** They must be in the same address space, and same screen.
+ */
+ if (src->pGlxScreen != dst->pGlxScreen) {
+ client->errorValue = source;
+ return BadMatch;
+ }
+
+ /*
+ ** The destination context must not be current for any client.
+ */
+ if (dst->isCurrent) {
+ client->errorValue = dest;
+ return BadAccess;
+ }
+
+ if (tag) {
+ __GLXcontext *tagcx = __glXLookupContextByTag(cl, tag);
+
+ if (!tagcx) {
+ return __glXBadContextTag;
+ }
+ if (tagcx != src) {
+ /*
+ ** This would be caused by a faulty implementation of the client
+ ** library.
+ */
+ return BadMatch;
+ }
+ }
+
+ from_screen = to_screen = src->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReq(GLXCopyContext,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXCopyContext;
+ be_req->source = (unsigned int)src->real_ids[s-from_screen];
+ be_req->dest = (unsigned int)dst->real_ids[s-from_screen];
+ be_req->mask = mask;
+ be_req->contextTag = (tag ? GetCurrentBackEndTag(cl,req->contextTag,s) : 0);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ return Success;
+}
+
+int __glXGetVisualConfigs(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc;
+ xGLXGetVisualConfigsReply reply;
+ __GLXscreenInfo *pGlxScreen;
+ __GLXvisualConfig *pGlxVisual;
+ CARD32 buf[__GLX_TOTAL_CONFIG];
+ unsigned int screen;
+ int i, p;
+
+ screen = req->screen;
+ if (screen >= screenInfo.numScreens) {
+ /* The client library must send a valid screen number. */
+ client->errorValue = screen;
+ return BadValue;
+ }
+ pGlxScreen = &__glXActiveScreens[screen];
+
+ reply.numVisuals = pGlxScreen->numGLXVisuals;
+ reply.numProps = __GLX_TOTAL_CONFIG;
+ reply.length = (pGlxScreen->numGLXVisuals * __GLX_SIZE_CARD32 *
+ __GLX_TOTAL_CONFIG) >> 2;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ WriteToClient(client, sz_xGLXGetVisualConfigsReply, (char *)&reply);
+
+ for (i=0; i < pGlxScreen->numVisuals; i++) {
+ pGlxVisual = &pGlxScreen->pGlxVisual[i];
+ if (!pGlxScreen->isGLXvis[i] || pGlxVisual->vid == 0) {
+ /* not a usable visual */
+ continue;
+ }
+ p = 0;
+ buf[p++] = pGlxVisual->vid;
+ buf[p++] = pGlxVisual->class;
+ buf[p++] = pGlxVisual->rgba;
+
+ buf[p++] = pGlxVisual->redSize;
+ buf[p++] = pGlxVisual->greenSize;
+ buf[p++] = pGlxVisual->blueSize;
+ buf[p++] = pGlxVisual->alphaSize;
+ buf[p++] = pGlxVisual->accumRedSize;
+ buf[p++] = pGlxVisual->accumGreenSize;
+ buf[p++] = pGlxVisual->accumBlueSize;
+ buf[p++] = pGlxVisual->accumAlphaSize;
+
+ buf[p++] = pGlxVisual->doubleBuffer;
+ buf[p++] = pGlxVisual->stereo;
+
+ buf[p++] = pGlxVisual->bufferSize;
+ buf[p++] = pGlxVisual->depthSize;
+ buf[p++] = pGlxVisual->stencilSize;
+ buf[p++] = pGlxVisual->auxBuffers;
+ buf[p++] = pGlxVisual->level;
+ /*
+ ** Add token/value pairs for extensions.
+ */
+ buf[p++] = GLX_VISUAL_CAVEAT_EXT;
+ buf[p++] = pGlxVisual->visualRating;
+ buf[p++] = GLX_TRANSPARENT_TYPE_EXT;
+ buf[p++] = pGlxVisual->transparentPixel;
+ buf[p++] = GLX_TRANSPARENT_RED_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentRed;
+ buf[p++] = GLX_TRANSPARENT_GREEN_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentGreen;
+ buf[p++] = GLX_TRANSPARENT_BLUE_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentBlue;
+ buf[p++] = GLX_TRANSPARENT_ALPHA_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentAlpha;
+ buf[p++] = GLX_TRANSPARENT_INDEX_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentIndex;
+ buf[p++] = GLX_SAMPLES_SGIS;
+ buf[p++] = pGlxVisual->multiSampleSize;
+ buf[p++] = GLX_SAMPLE_BUFFERS_SGIS;
+ buf[p++] = pGlxVisual->nMultiSampleBuffers;
+ buf[p++] = GLX_VISUAL_SELECT_GROUP_SGIX;
+ buf[p++] = pGlxVisual->visualSelectGroup;
+
+ WriteToClient(client, __GLX_SIZE_CARD32 * __GLX_TOTAL_CONFIG,
+ (char *)buf);
+ }
+ return Success;
+}
+
+/*
+** Create a GLX Pixmap from an X Pixmap.
+*/
+static int CreateGLXPixmap(__GLXclientState *cl,
+ VisualID visual, GLXFBConfigID fbconfigId,
+ int screenNum, XID pixmapId, XID glxpixmapId )
+{
+ ClientPtr client = cl->client;
+ xGLXCreateGLXPixmapReq *be_req;
+ xGLXCreatePixmapReq *be_new_req;
+ DrawablePtr pDraw;
+ ScreenPtr pScreen;
+ VisualPtr pVisual;
+ __GLXpixmap *pGlxPixmap;
+ __GLXscreenInfo *pGlxScreen;
+ __GLXvisualConfig *pGlxVisual;
+ __GLXFBConfig *pFBConfig;
+ int i, s, rc;
+ int from_screen, to_screen;
+#ifdef PANORAMIX
+ PanoramiXRes *pXinDraw = NULL;
+#endif
+
+ rc = dixLookupDrawable(&pDraw, pixmapId, client, M_DRAWABLE_PIXMAP,
+ DixAddAccess);
+ if (rc != Success)
+ return rc;
+
+ /*
+ ** Check if screen of visual matches screen of pixmap.
+ */
+ pScreen = pDraw->pScreen;
+ if (screenNum != pScreen->myNum) {
+ return BadMatch;
+ }
+
+ if (fbconfigId == 0 && visual == 0) {
+ return BadValue;
+ }
+
+ if (fbconfigId != None) {
+ pFBConfig = glxLookupFBConfig( fbconfigId );
+ if (!pFBConfig) {
+ client->errorValue = fbconfigId;
+ return BadValue;
+ }
+ visual = pFBConfig->associatedVisualId;
+ }
+ else {
+ pFBConfig = NULL;
+ }
+
+ if (visual != None) {
+ /*
+ ** Find the VisualRec for this visual.
+ */
+ pVisual = pScreen->visuals;
+ for (i=0; i < pScreen->numVisuals; i++, pVisual++) {
+ if (pVisual->vid == visual) {
+ break;
+ }
+ }
+ if (i == pScreen->numVisuals) {
+ client->errorValue = visual;
+ return BadValue;
+ }
+ /*
+ ** Check if depth of visual matches depth of pixmap.
+ */
+ if (pVisual->nplanes != pDraw->depth) {
+ client->errorValue = visual;
+ return BadMatch;
+ }
+
+ /*
+ ** Get configuration of the visual.
+ */
+ pGlxScreen = &__glXActiveScreens[screenNum];
+ pGlxVisual = pGlxScreen->pGlxVisual;
+ for (i = 0; i < pGlxScreen->numVisuals; i++, pGlxVisual++) {
+ if (pGlxVisual->vid == visual) {
+ break;
+ }
+ }
+ if (i == pGlxScreen->numVisuals) {
+ /*
+ ** Visual not support on this screen by this OpenGL implementation.
+ */
+ client->errorValue = visual;
+ return BadValue;
+ }
+
+
+ /* find the FBConfig for that visual (if any) */
+ if ( pFBConfig == NULL ) {
+ pFBConfig = glxLookupFBConfigByVID( visual );
+
+ if ( pFBConfig == NULL ) {
+ /*
+ * visual does not have an FBConfig ???
+ client->errorValue = visual;
+ return BadValue;
+ */
+ }
+ }
+ }
+ else {
+ pVisual = NULL;
+ pGlxVisual = NULL;
+ pGlxScreen = &__glXActiveScreens[pDraw->pScreen->myNum];
+ }
+
+ pGlxPixmap = (__GLXpixmap *) malloc(sizeof(__GLXpixmap));
+ if (!pGlxPixmap) {
+ return BadAlloc;
+ }
+ pGlxPixmap->be_xids = (XID *) malloc(sizeof(XID) * screenInfo.numScreens);
+ if (!pGlxPixmap->be_xids) {
+ free( pGlxPixmap );
+ return BadAlloc;
+ }
+
+ pGlxPixmap->pDraw = pDraw;
+ pGlxPixmap->pGlxScreen = pGlxScreen;
+ pGlxPixmap->pGlxVisual = pGlxVisual;
+ pGlxPixmap->pFBConfig = pFBConfig;
+ pGlxPixmap->pScreen = pScreen;
+ pGlxPixmap->idExists = True;
+ pGlxPixmap->refcnt = 0;
+
+ /*
+ ** Bump the ref count on the X pixmap so it won't disappear.
+ */
+ ((PixmapPtr) pDraw)->refcnt++;
+
+ /*
+ * send the request to the back-end server(s)
+ */
+ from_screen = to_screen = screenNum;
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+
+ dixLookupResourceByClass((pointer*) &pXinDraw,
+ pDraw->id, XRC_DRAWABLE,
+ client, DixReadAccess);
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+ Pixmap be_pixmap;
+ DrawablePtr pRealDraw = pDraw;
+
+#ifdef PANORAMIX
+ if (pXinDraw) {
+ dixLookupDrawable(&pRealDraw, pXinDraw->info[s].id, client, 0,
+ DixAddAccess);
+ }
+#endif
+
+ be_pixmap = (DMX_GET_PIXMAP_PRIV((PixmapPtr)pRealDraw))->pixmap;
+
+ /* make sure pixmap already created on back-end */
+ dmxSync( dmxScreen, 1 );
+
+ if ( pFBConfig && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ __GLXFBConfig *be_FBConfig = glxLookupBackEndFBConfig( pFBConfig->id, s );
+
+ LockDisplay(dpy);
+ pGlxPixmap->be_xids[s] = XAllocID(dpy);
+ GetReq(GLXCreatePixmap,be_new_req);
+ be_new_req->reqType = dmxScreen->glxMajorOpcode;
+ be_new_req->glxCode = X_GLXCreatePixmap;
+ be_new_req->screen = DefaultScreen(dpy);
+ be_new_req->fbconfig = be_FBConfig->id;
+ be_new_req->pixmap = (unsigned int)be_pixmap;
+ be_new_req->glxpixmap = (unsigned int)pGlxPixmap->be_xids[s];
+ be_new_req->numAttribs = 0;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+ else if (pFBConfig && glxIsExtensionSupported("GLX_SGIX_fbconfig")) {
+ __GLXFBConfig *be_FBConfig = glxLookupBackEndFBConfig( pFBConfig->id, s );
+ xGLXCreateGLXPixmapWithConfigSGIXReq *ext_req;
+ xGLXVendorPrivateReq *vpreq;
+
+ LockDisplay(dpy);
+ pGlxPixmap->be_xids[s] = XAllocID(dpy);
+ GetReqExtra(GLXVendorPrivate,
+ sz_xGLXCreateGLXPixmapWithConfigSGIXReq-sz_xGLXVendorPrivateReq,
+ vpreq);
+ ext_req = (xGLXCreateGLXPixmapWithConfigSGIXReq *)vpreq;
+ ext_req->reqType = dmxScreen->glxMajorOpcode;
+ ext_req->glxCode = X_GLXVendorPrivate;
+ ext_req->vendorCode = X_GLXvop_CreateGLXPixmapWithConfigSGIX;
+ ext_req->screen = DefaultScreen(dpy);
+ ext_req->fbconfig = be_FBConfig->id;
+ ext_req->pixmap = (unsigned int)be_pixmap;
+ ext_req->glxpixmap = (unsigned int)pGlxPixmap->be_xids[s];
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+ else if (pGlxVisual) {
+ LockDisplay(dpy);
+ pGlxPixmap->be_xids[s] = XAllocID(dpy);
+ GetReq(GLXCreateGLXPixmap,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXCreateGLXPixmap;
+ be_req->screen = DefaultScreen(dpy);
+ be_req->visual = (unsigned int)glxMatchGLXVisualInConfigList(
+ pGlxVisual,
+ dmxScreen->glxVisuals,
+ dmxScreen->numGlxVisuals );
+ be_req->pixmap = (unsigned int)be_pixmap;
+ be_req->glxpixmap = (unsigned int)pGlxPixmap->be_xids[s];
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+ else {
+ client->errorValue = ( visual ? visual : fbconfigId );
+ free( pGlxPixmap );
+ return BadValue;
+ }
+
+ XFlush( dpy );
+ }
+
+ if (!(AddResource(glxpixmapId, __glXPixmapRes, pGlxPixmap))) {
+ free( pGlxPixmap );
+ return BadAlloc;
+ }
+
+ return Success;
+}
+
+int __glXCreateGLXPixmap(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateGLXPixmapReq *req = (xGLXCreateGLXPixmapReq *) pc;
+
+ return( CreateGLXPixmap(cl, req->visual, None,
+ req->screen, req->pixmap, req->glxpixmap) );
+}
+
+int __glXCreatePixmap(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreatePixmapReq *req = (xGLXCreatePixmapReq *) pc;
+
+ return( CreateGLXPixmap(cl, None, req->fbconfig,
+ req->screen, req->pixmap, req->glxpixmap) );
+}
+
+int __glXDestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
+ XID glxpixmap = req->glxpixmap;
+ __GLXpixmap *pGlxPixmap;
+ int s;
+ int from_screen, to_screen;
+
+ /*
+ ** Check if it's a valid GLX pixmap.
+ */
+ dixLookupResourceByType((pointer*) &pGlxPixmap, glxpixmap,
+ __glXPixmapRes, NullClient, DixUnknownAccess);
+ if (!pGlxPixmap) {
+ client->errorValue = glxpixmap;
+ return __glXBadPixmap;
+ }
+ FreeResource(glxpixmap, FALSE);
+
+ /*
+ * destroy the pixmap on the back-end server(s).
+ */
+ from_screen = to_screen = pGlxPixmap->pDraw->pScreen->myNum;
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ /* make sure pixmap exist in back-end */
+ dmxSync( dmxScreen, 1 );
+
+ LockDisplay(dpy);
+ GetReq(GLXDestroyGLXPixmap,req);
+ req->reqType = dmxScreen->glxMajorOpcode;
+ req->glxCode = X_GLXDestroyGLXPixmap;
+ req->glxpixmap = (unsigned int)pGlxPixmap->be_xids[s];
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+
+ return Success;
+}
+
+/*****************************************************************************/
+
+/*
+** NOTE: There is no portable implementation for swap buffers as of
+** this time that is of value. Consequently, this code must be
+** implemented by somebody other than SGI.
+*/
+int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag)
+{
+ ClientPtr client = cl->client;
+ DrawablePtr pDraw;
+ xGLXSwapBuffersReq *be_req;
+ WindowPtr pWin = NULL;
+ __GLXpixmap *pGlxPixmap = NULL;
+ __GLXcontext *glxc = NULL;
+#ifdef PANORAMIX
+ PanoramiXRes *pXinDraw = NULL;
+#endif
+ __glXWindow *pGlxWindow = NULL;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s, rc;
+
+ /*
+ ** Check that the GLX drawable is valid.
+ */
+ rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixWriteAccess);
+ if (rc == Success) {
+ from_screen = to_screen = pDraw->pScreen->myNum;
+
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ /*
+ ** Drawable is an X window.
+ */
+ pWin = (WindowPtr)pDraw;
+ } else {
+ /*
+ ** Drawable is an X pixmap, which is not allowed.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+ }
+
+ if (!pDraw) {
+ dixLookupResourceByType((pointer*) &pGlxPixmap, drawId,
+ __glXPixmapRes, NullClient, DixUnknownAccess);
+ if (pGlxPixmap) {
+ /*
+ ** Drawable is a GLX pixmap.
+ */
+ pDraw = pGlxPixmap->pDraw;
+ from_screen = to_screen = pGlxPixmap->pScreen->myNum;
+ }
+ }
+
+ if (!pDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxWindow, drawId,
+ __glXWindowRes, NullClient, DixUnknownAccess);
+ if (pGlxWindow) {
+ /*
+ ** Drawable is a GLXWindow.
+ */
+ pDraw = pGlxWindow->pDraw;
+ from_screen = to_screen = pGlxWindow->pScreen->myNum;
+ }
+ }
+
+ if (!pDraw) {
+ /*
+ ** Drawable is neither a X window nor a GLX pixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ if (tag) {
+ glxc = __glXLookupContextByTag(cl, tag);
+ if (!glxc) {
+ return __glXBadContextTag;
+ }
+ }
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ dixLookupResourceByClass((pointer*) &pXinDraw,
+ pDraw->id, XRC_DRAWABLE,
+ client, DixReadAccess);
+ }
+#endif
+
+ /* If requested, send a glFinish to all back-end servers before swapping. */
+ if (dmxGLXFinishSwap) {
+ for (s=from_screen; s<=to_screen; s++) {
+ Display *dpy = GetBackEndDisplay(cl,s);
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ xGLXSingleReq *finishReq;
+ xGLXSingleReply reply;
+
+#define X_GLXSingle 0 /* needed by GetReq below */
+
+ LockDisplay(dpy);
+ GetReq(GLXSingle,finishReq);
+ finishReq->reqType = dmxScreen->glxMajorOpcode;
+ finishReq->glxCode = X_GLsop_Finish;
+ finishReq->contextTag = (tag ? GetCurrentBackEndTag(cl,tag,s) : 0);
+ (void) _XReply(dpy, (xReply*) &reply, 0, False);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+ }
+
+ /* If requested, send an XSync to all back-end servers before swapping. */
+ if (dmxGLXSyncSwap) {
+ for (s=from_screen; s<=to_screen; s++)
+ XSync(GetBackEndDisplay(cl,s), False);
+ }
+
+
+ /* send the SwapBuffers request to all back-end servers */
+
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+ unsigned int be_draw = 0;
+
+ if (pGlxPixmap) {
+ be_draw = (unsigned int)pGlxPixmap->be_xids[s];
+ }
+#ifdef PANORAMIX
+ else if (pXinDraw) {
+ dixLookupWindow(&pWin, pXinDraw->info[s].id, client, DixReadAccess);
+ }
+#endif
+ else if (pGlxWindow) {
+ pWin = (WindowPtr)pGlxWindow->pDraw;
+ }
+
+ if (pWin && !be_draw) {
+ be_draw = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ if (!be_draw) {
+ /* it might be that the window did not created yet on the */
+ /* back-end server (lazy window creation option), force */
+ /* creation of the window */
+ dmxCreateAndRealizeWindow( pWin, TRUE );
+ be_draw = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ }
+ }
+
+ dmxSync( dmxScreen, 1 );
+
+ LockDisplay(dpy);
+ GetReq(GLXSwapBuffers,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXSwapBuffers;
+ be_req->drawable = be_draw;
+ be_req->contextTag = ( tag ? GetCurrentBackEndTag(cl,tag,s) : 0 );
+ UnlockDisplay(dpy);
+ SyncHandle();
+ XFlush(dpy);
+ }
+
+ return Success;
+}
+
+int __glXSwapBuffers(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ DrawablePtr pDraw;
+ xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc;
+ GLXContextTag tag = req->contextTag;
+ XID drawId = req->drawable;
+ __GLXpixmap *pGlxPixmap = NULL;
+ __GLXcontext *glxc = NULL;
+ __glXWindow *pGlxWindow = NULL;
+ int rc;
+
+ /*
+ ** Check that the GLX drawable is valid.
+ */
+ rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixWriteAccess);
+ if (rc == Success) {
+ if (pDraw->type != DRAWABLE_WINDOW) {
+ /*
+ ** Drawable is an X pixmap, which is not allowed.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+ }
+
+ if (!pDraw) {
+ dixLookupResourceByType((pointer*) &pGlxPixmap, drawId,
+ __glXPixmapRes, NullClient, DixUnknownAccess);
+ if (pGlxPixmap) {
+ /*
+ ** Drawable is a GLX pixmap.
+ */
+ pDraw = pGlxPixmap->pDraw;
+ }
+ }
+
+ if (!pDraw && __GLX_IS_VERSION_SUPPORTED(1,3) ) {
+ dixLookupResourceByType((pointer*) &pGlxWindow, drawId,
+ __glXWindowRes, NullClient, DixUnknownAccess);
+ if (pGlxWindow) {
+ /*
+ ** Drawable is a GLXWindow.
+ */
+ pDraw = pGlxWindow->pDraw;
+ }
+ }
+
+ if (!pDraw) {
+ /*
+ ** Drawable is neither a X window nor a GLX pixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ if (tag) {
+ glxc = __glXLookupContextByTag(cl, tag);
+ if (!glxc) {
+ return __glXBadContextTag;
+ }
+ }
+
+ if (pDraw &&
+ pDraw->type == DRAWABLE_WINDOW &&
+ DMX_GET_WINDOW_PRIV((WindowPtr)pDraw)->swapGroup) {
+ return SGSwapBuffers(cl, drawId, tag, pDraw);
+ }
+
+ return __glXDoSwapBuffers(cl, drawId, tag);
+}
+
+
+/************************************************************************/
+
+/*
+** Render and Renderlarge are not in the GLX API. They are used by the GLX
+** client library to send batches of GL rendering commands.
+*/
+
+/*
+** Execute all the drawing commands in a request.
+*/
+int __glXRender(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXRenderReq *req;
+ xGLXRenderReq *be_req;
+ int size;
+ __GLXcontext *glxc;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+
+ /*
+ ** NOTE: much of this code also appears in the byteswapping version of this
+ ** routine, __glXSwapRender(). Any changes made here should also be
+ ** duplicated there.
+ */
+
+ req = (xGLXRenderReq *) pc;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXRenderReq;
+ size = (req->length << 2) - sz_xGLXRenderReq;
+
+ /*
+ * just forward the request to back-end server(s)
+ */
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReq(GLXRender,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXRender;
+ be_req->length = req->length;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ _XSend(dpy, (const char *)pc, size);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ return Success;
+}
+
+/*
+** Execute a large rendering request (one that spans multiple X requests).
+*/
+int __glXRenderLarge(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXRenderLargeReq *req;
+ xGLXRenderLargeReq *be_req;
+ __GLXcontext *glxc;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+
+ /*
+ ** NOTE: much of this code also appears in the byteswapping version of this
+ ** routine, __glXSwapRenderLarge(). Any changes made here should also be
+ ** duplicated there.
+ */
+
+ req = (xGLXRenderLargeReq *) pc;
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXRenderLargeReq;
+
+ /*
+ * just forward the request to back-end server(s)
+ */
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ GetReq(GLXRenderLarge,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXRenderLarge;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ be_req->length = req->length;
+ be_req->requestNumber = req->requestNumber;
+ be_req->requestTotal = req->requestTotal;
+ be_req->dataBytes = req->dataBytes;
+ Data(dpy, (const char *)pc, req->dataBytes);
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ }
+
+ return Success;
+}
+
+
+/************************************************************************/
+
+int __glXVendorPrivate(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXVendorPrivateReq *req;
+
+ req = (xGLXVendorPrivateReq *) pc;
+
+ switch( req->vendorCode ) {
+
+ case X_GLvop_DeleteTexturesEXT:
+ return __glXVForwardSingleReq( cl, pc );
+ break;
+
+ case X_GLXvop_SwapIntervalSGI:
+ if (glxIsExtensionSupported("SGI_swap_control")) {
+ return __glXVForwardSingleReq( cl, pc );
+ }
+ else {
+ return Success;
+ }
+ break;
+
+#if 0 /* glx 1.3 */
+ case X_GLXvop_CreateGLXVideoSourceSGIX:
+ break;
+ case X_GLXvop_DestroyGLXVideoSourceSGIX:
+ break;
+ case X_GLXvop_CreateGLXPixmapWithConfigSGIX:
+ break;
+ case X_GLXvop_DestroyGLXPbufferSGIX:
+ break;
+ case X_GLXvop_ChangeDrawableAttributesSGIX:
+ break;
+#endif
+
+ case X_GLXvop_BindSwapBarrierSGIX:
+ return __glXBindSwapBarrierSGIX( cl, pc );
+ break;
+
+ case X_GLXvop_JoinSwapGroupSGIX:
+ return __glXJoinSwapGroupSGIX( cl, pc );
+ break;
+
+ case X_GLXvop_CreateContextWithConfigSGIX:
+ return __glXCreateContextWithConfigSGIX( cl, pc );
+ break;
+
+ default:
+ /*
+ ** unsupported private request
+ */
+ cl->client->errorValue = req->vendorCode;
+ return __glXUnsupportedPrivateRequest;
+ }
+
+ cl->client->errorValue = req->vendorCode;
+ return __glXUnsupportedPrivateRequest;
+
+}
+
+int __glXVendorPrivateWithReply(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXVendorPrivateWithReplyReq *req;
+
+ req = (xGLXVendorPrivateWithReplyReq *) pc;
+
+ switch( req->vendorCode ) {
+
+ case X_GLvop_GetConvolutionFilterEXT:
+ case X_GLvop_GetConvolutionParameterfvEXT:
+ case X_GLvop_GetConvolutionParameterivEXT:
+ case X_GLvop_GetSeparableFilterEXT:
+ case X_GLvop_GetHistogramEXT:
+ case X_GLvop_GetHistogramParameterivEXT:
+ case X_GLvop_GetMinmaxEXT:
+ case X_GLvop_GetMinmaxParameterfvEXT:
+ case X_GLvop_GetMinmaxParameterivEXT:
+ case X_GLvop_AreTexturesResidentEXT:
+ case X_GLvop_IsTextureEXT:
+ return( __glXVForwardPipe0WithReply(cl, pc) );
+ break;
+
+ case X_GLvop_GenTexturesEXT:
+ return( __glXVForwardAllWithReply(cl, pc) );
+ break;
+
+
+#if 0 /* glx1.3 */
+ case X_GLvop_GetDetailTexFuncSGIS:
+ case X_GLvop_GetSharpenTexFuncSGIS:
+ case X_GLvop_GetColorTableSGI:
+ case X_GLvop_GetColorTableParameterfvSGI:
+ case X_GLvop_GetColorTableParameterivSGI:
+ case X_GLvop_GetTexFilterFuncSGIS:
+ case X_GLvop_GetInstrumentsSGIX:
+ case X_GLvop_InstrumentsBufferSGIX:
+ case X_GLvop_PollInstrumentsSGIX:
+ case X_GLvop_FlushRasterSGIX:
+ case X_GLXvop_CreateGLXPbufferSGIX:
+ case X_GLXvop_GetDrawableAttributesSGIX:
+ case X_GLXvop_QueryHyperpipeNetworkSGIX:
+ case X_GLXvop_QueryHyperpipeConfigSGIX:
+ case X_GLXvop_HyperpipeConfigSGIX:
+ case X_GLXvop_DestroyHyperpipeConfigSGIX:
+#endif
+ case X_GLXvop_QueryMaxSwapBarriersSGIX:
+ return( __glXQueryMaxSwapBarriersSGIX(cl, pc) );
+ break;
+
+ case X_GLXvop_GetFBConfigsSGIX:
+ return( __glXGetFBConfigsSGIX(cl, pc) );
+ break;
+
+ case X_GLXvop_MakeCurrentReadSGI:
+ return( __glXMakeCurrentReadSGI(cl, pc) );
+ break;
+
+ case X_GLXvop_QueryContextInfoEXT:
+ return( __glXQueryContextInfoEXT(cl,pc) );
+ break;
+
+ default:
+ /*
+ ** unsupported private request
+ */
+ cl->client->errorValue = req->vendorCode;
+ return __glXUnsupportedPrivateRequest;
+ }
+
+}
+
+int __glXQueryExtensionsString(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXQueryExtensionsStringReq *req = (xGLXQueryExtensionsStringReq *) pc;
+ xGLXQueryExtensionsStringReply reply;
+ GLint screen;
+ size_t length;
+ int len, numbytes;
+ char *be_buf;
+
+#ifdef FWD_QUERY_REQ
+ xGLXQueryExtensionsStringReq *be_req;
+ xGLXQueryExtensionsStringReply be_reply;
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+ int slop;
+#endif
+
+ screen = req->screen;
+
+ /*
+ ** Check if screen exists.
+ */
+ if ((screen < 0) || (screen >= screenInfo.numScreens)) {
+ client->errorValue = screen;
+ return BadValue;
+ }
+
+#ifdef FWD_QUERY_REQ
+ dmxScreen = &dmxScreens[screen];
+
+ /* Send the glXQueryServerString request */
+ dpy = GetBackEndDisplay(cl,screen);
+ LockDisplay(dpy);
+ GetReq(GLXQueryExtensionsString,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXQueryServerString;
+ be_req->screen = DefaultScreen(dpy);
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+ len = (int)be_reply.length;
+ numbytes = (int)be_reply.n;
+ slop = numbytes * __GLX_SIZE_INT8 & 3;
+ be_buf = (char *)malloc(numbytes);
+ if (!be_buf) {
+ /* Throw data on the floor */
+ _XEatData(dpy, len);
+ } else {
+ _XRead(dpy, (char *)be_buf, numbytes);
+ if (slop) _XEatData(dpy,4-slop);
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+#else
+
+ be_buf = __glXGetServerString(GLX_EXTENSIONS);
+ numbytes = strlen(be_buf) + 1;
+ len = __GLX_PAD(numbytes) >> 2;
+
+#endif
+
+ length = len;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.length = len;
+ reply.n = numbytes;
+
+ if (client->swapped) {
+ glxSwapQueryExtensionsStringReply(client, &reply, be_buf);
+ } else {
+ WriteToClient(client, sz_xGLXQueryExtensionsStringReply,(char *)&reply);
+ WriteToClient(client, (int)(length << 2), (char *)be_buf);
+ }
+
+ return Success;
+}
+
+int __glXQueryServerString(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXQueryServerStringReq *req = (xGLXQueryServerStringReq *) pc;
+ xGLXQueryServerStringReply reply;
+ int name;
+ GLint screen;
+ size_t length;
+ int len, numbytes;
+ char *be_buf;
+#ifdef FWD_QUERY_REQ
+ xGLXQueryServerStringReq *be_req;
+ xGLXQueryServerStringReply be_reply;
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+ int slop;
+#endif
+
+ name = req->name;
+ screen = req->screen;
+ /*
+ ** Check if screen exists.
+ */
+ if ((screen < 0) || (screen >= screenInfo.numScreens)) {
+ client->errorValue = screen;
+ return BadValue;
+ }
+
+#ifdef FWD_QUERY_REQ
+ dmxScreen = &dmxScreens[screen];
+
+ /* Send the glXQueryServerString request */
+ dpy = GetBackEndDisplay(cl,screen);
+ LockDisplay(dpy);
+ GetReq(GLXQueryServerString,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXQueryServerString;
+ be_req->screen = DefaultScreen(dpy);
+ be_req->name = name;
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+ len = (int)be_reply.length;
+ numbytes = (int)be_reply.n;
+ slop = numbytes * __GLX_SIZE_INT8 & 3;
+ be_buf = (char *)malloc(numbytes);
+ if (!be_buf) {
+ /* Throw data on the floor */
+ _XEatData(dpy, len);
+ } else {
+ _XRead(dpy, (char *)be_buf, numbytes);
+ if (slop) _XEatData(dpy,4-slop);
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+#else
+ be_buf = __glXGetServerString(name);
+ numbytes = strlen(be_buf) + 1;
+ len = __GLX_PAD(numbytes) >> 2;
+#endif
+
+ length = len;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.length = length;
+ reply.n = numbytes;
+
+ if (client->swapped) {
+ glxSwapQueryServerStringReply(client, &reply, be_buf);
+ } else {
+ WriteToClient(client, sz_xGLXQueryServerStringReply, (char *)&reply);
+ WriteToClient(client, (int)(length << 2), be_buf);
+ }
+
+ return Success;
+}
+
+int __glXClientInfo(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXClientInfoReq *req = (xGLXClientInfoReq *) pc;
+ xGLXClientInfoReq *be_req;
+ const char *buf;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+
+ cl->GLClientmajorVersion = req->major;
+ cl->GLClientminorVersion = req->minor;
+ free(cl->GLClientextensions);
+ buf = (const char *)(req+1);
+ cl->GLClientextensions = strdup(buf);
+
+ to_screen = screenInfo.numScreens - 1;
+
+ for (s=from_screen; s<=to_screen; s++)
+ {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReq(GLXClientInfo,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXClientInfo;
+ be_req->major = req->major;
+ be_req->minor = req->minor;
+ be_req->length = req->length;
+ be_req->numbytes = req->numbytes;
+ Data(dpy, buf, req->numbytes);
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ return Success;
+}
+
+int __glXUseXFont(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXUseXFontReq *req;
+ xGLXUseXFontReq *be_req;
+ FontPtr pFont;
+ __GLXcontext *glxc = NULL;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+ dmxFontPrivPtr pFontPriv;
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+
+ req = (xGLXUseXFontReq *) pc;
+
+ if (req->contextTag != 0) {
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (glxc) {
+ from_screen = to_screen = glxc->pScreen->myNum;
+ }
+ }
+
+ /*
+ ** Font can actually be either the ID of a font or the ID of a GC
+ ** containing a font.
+ */
+ dixLookupResourceByType((pointer*) &pFont, req->font, RT_FONT,
+ NullClient, DixUnknownAccess);
+ if (!pFont) {
+ GC *pGC;
+ dixLookupResourceByType((pointer*) &pGC, req->font,
+ RT_GC, NullClient,
+ DixUnknownAccess);
+ if (!pGC) {
+ client->errorValue = req->font;
+ return BadFont;
+ }
+ pFont = pGC->font;
+ }
+
+ pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex);
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+
+ for (s=from_screen; s<=to_screen; s++) {
+ dmxScreen = &dmxScreens[s];
+ dpy = GetBackEndDisplay(cl,s);
+
+ dmxSync( dmxScreen, 1 );
+
+ LockDisplay(dpy);
+ GetReq(GLXUseXFont,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXUseXFont;
+ be_req->contextTag = (glxc ? GetCurrentBackEndTag(cl,req->contextTag,s) : 0);
+ be_req->font = pFontPriv->font[s]->fid;
+ be_req->first = req->first;
+ be_req->count = req->count;
+ be_req->listBase = req->listBase;
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ XSync( dpy, False );
+ }
+
+ return Success;
+}
+
+/*
+ * start GLX 1.3 here
+ */
+
+int __glXGetFBConfigs(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXGetFBConfigsReq *req = (xGLXGetFBConfigsReq *) pc;
+ xGLXGetFBConfigsReply reply;
+ __GLXFBConfig *pFBConfig;
+ CARD32 buf[2 * __GLX_TOTAL_FBCONFIG_PROPS];
+ int numAttribs = __GLX_TOTAL_FBCONFIG_PROPS;
+ unsigned int screen = req->screen;
+ int numFBConfigs, i, p;
+ __GLXscreenInfo *pGlxScreen;
+
+ if (screen >= screenInfo.numScreens) {
+ /* The client library must send a valid screen number. */
+ client->errorValue = screen;
+ return BadValue;
+ }
+
+ pGlxScreen = &__glXActiveScreens[screen];
+ numFBConfigs = __glXNumFBConfigs;
+
+ reply.numFBConfigs = numFBConfigs;
+ reply.numAttribs = numAttribs;
+ reply.length = (numFBConfigs * 2 * numAttribs * __GLX_SIZE_CARD32) >> 2;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ if (client->swapped) {
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply.sequenceNumber);
+ __GLX_SWAP_INT(&reply.length);
+ __GLX_SWAP_INT(&reply.numFBConfigs);
+ __GLX_SWAP_INT(&reply.numAttribs);
+ }
+ WriteToClient(client, sz_xGLXGetFBConfigsReply, (char *)&reply);
+
+ for (i=0; i < numFBConfigs; i++) {
+ int associatedVisualId = 0;
+ int drawableTypeIndex;
+ pFBConfig = __glXFBConfigs[ i * (screenInfo.numScreens+1) ];
+
+ p = 0;
+ /* core attributes */
+ buf[p++] = GLX_FBCONFIG_ID;
+ buf[p++] = pFBConfig->id;
+ buf[p++] = GLX_BUFFER_SIZE;
+ buf[p++] = pFBConfig->indexBits;
+ buf[p++] = GLX_LEVEL;
+ buf[p++] = pFBConfig->level;
+ buf[p++] = GLX_DOUBLEBUFFER;
+ buf[p++] = pFBConfig->doubleBufferMode;
+ buf[p++] = GLX_STEREO;
+ buf[p++] = pFBConfig->stereoMode;
+ buf[p++] = GLX_AUX_BUFFERS;
+ buf[p++] = pFBConfig->maxAuxBuffers;
+ buf[p++] = GLX_RED_SIZE;
+ buf[p++] = pFBConfig->redBits;
+ buf[p++] = GLX_GREEN_SIZE;
+ buf[p++] = pFBConfig->greenBits;
+ buf[p++] = GLX_BLUE_SIZE;
+ buf[p++] = pFBConfig->blueBits;
+ buf[p++] = GLX_ALPHA_SIZE;
+ buf[p++] = pFBConfig->alphaBits;
+ buf[p++] = GLX_DEPTH_SIZE;
+ buf[p++] = pFBConfig->depthBits;
+ buf[p++] = GLX_STENCIL_SIZE;
+ buf[p++] = pFBConfig->stencilBits;
+ buf[p++] = GLX_ACCUM_RED_SIZE;
+ buf[p++] = pFBConfig->accumRedBits;
+ buf[p++] = GLX_ACCUM_GREEN_SIZE;
+ buf[p++] = pFBConfig->accumGreenBits;
+ buf[p++] = GLX_ACCUM_BLUE_SIZE;
+ buf[p++] = pFBConfig->accumBlueBits;
+ buf[p++] = GLX_ACCUM_ALPHA_SIZE;
+ buf[p++] = pFBConfig->accumAlphaBits;
+ buf[p++] = GLX_RENDER_TYPE;
+ buf[p++] = pFBConfig->renderType;
+ buf[p++] = GLX_DRAWABLE_TYPE;
+ drawableTypeIndex = p;
+ buf[p++] = pFBConfig->drawableType;
+ buf[p++] = GLX_X_VISUAL_TYPE;
+ buf[p++] = pFBConfig->visualType;
+ buf[p++] = GLX_CONFIG_CAVEAT;
+ buf[p++] = pFBConfig->visualCaveat;
+ buf[p++] = GLX_TRANSPARENT_TYPE;
+ buf[p++] = pFBConfig->transparentType;
+ buf[p++] = GLX_TRANSPARENT_RED_VALUE;
+ buf[p++] = pFBConfig->transparentRed;
+ buf[p++] = GLX_TRANSPARENT_GREEN_VALUE;
+ buf[p++] = pFBConfig->transparentGreen;
+ buf[p++] = GLX_TRANSPARENT_BLUE_VALUE;
+ buf[p++] = pFBConfig->transparentBlue;
+ buf[p++] = GLX_TRANSPARENT_ALPHA_VALUE;
+ buf[p++] = pFBConfig->transparentAlpha;
+ buf[p++] = GLX_TRANSPARENT_INDEX_VALUE;
+ buf[p++] = pFBConfig->transparentIndex;
+ buf[p++] = GLX_MAX_PBUFFER_WIDTH;
+ buf[p++] = pFBConfig->maxPbufferWidth;
+ buf[p++] = GLX_MAX_PBUFFER_HEIGHT;
+ buf[p++] = pFBConfig->maxPbufferHeight;
+ buf[p++] = GLX_MAX_PBUFFER_PIXELS;
+ buf[p++] = pFBConfig->maxPbufferPixels;
+
+ /*
+ * find the visual of the back-end server and match a visual
+ * on the proxy.
+ * do only once - if a visual is not yet associated.
+ */
+ if (pFBConfig->associatedVisualId == (unsigned int)-1) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[screen];
+ __GLXFBConfig *be_pFBConfig = __glXFBConfigs[ i * (screenInfo.numScreens+1)+screen+1 ];
+ __GLXvisualConfig *pGlxVisual = NULL;
+ int v;
+ int found = 0;
+ for (v=0; v<dmxScreen->numGlxVisuals; v++) {
+ if (dmxScreen->glxVisuals[v].vid == be_pFBConfig->associatedVisualId) {
+ pGlxVisual = &dmxScreen->glxVisuals[v];
+ break;
+ }
+ }
+
+ if (pGlxVisual) {
+ for (v=0; v<pGlxScreen->numVisuals; v++) {
+ if (glxVisualsMatch(&pGlxScreen->pGlxVisual[v], pGlxVisual)) {
+ associatedVisualId = pGlxScreen->pGlxVisual[v].vid;
+ found = 1;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ associatedVisualId = 0;
+ pFBConfig->drawableType &= ~(GLX_WINDOW_BIT);
+ buf[drawableTypeIndex] = pFBConfig->drawableType;
+ }
+#ifdef PANORAMIX
+ else if (!noPanoramiXExtension) {
+ /* convert the associated visualId to the panoramix one */
+ pFBConfig->associatedVisualId =
+ PanoramiXTranslateVisualID(screen, v);
+ }
+#endif
+ }
+ else {
+ associatedVisualId = pFBConfig->associatedVisualId;
+ }
+
+ buf[p++] = GLX_VISUAL_ID;
+ buf[p++] = associatedVisualId;
+
+ /* SGIS_multisample attributes */
+ buf[p++] = GLX_SAMPLES_SGIS;
+ buf[p++] = pFBConfig->multiSampleSize;
+ buf[p++] = GLX_SAMPLE_BUFFERS_SGIS;
+ buf[p++] = pFBConfig->nMultiSampleBuffers;
+
+ /* SGIX_pbuffer specific attributes */
+ buf[p++] = GLX_OPTIMAL_PBUFFER_WIDTH_SGIX;
+ buf[p++] = pFBConfig->optimalPbufferWidth;
+ buf[p++] = GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX;
+ buf[p++] = pFBConfig->optimalPbufferHeight;
+
+ buf[p++] = GLX_VISUAL_SELECT_GROUP_SGIX;
+ buf[p++] = pFBConfig->visualSelectGroup;
+
+ if (client->swapped) {
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+ __GLX_SWAP_INT_ARRAY((int *)buf, 2*numAttribs);
+ }
+ WriteToClient(client, 2*numAttribs * __GLX_SIZE_CARD32, (char *)buf);
+ }
+ return Success;
+}
+
+int __glXGetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *)pc;
+ xGLXGetFBConfigsReq new_req;
+
+ new_req.reqType = req->reqType;
+ new_req.glxCode = req->glxCode;
+ new_req.length = req->length;
+ new_req.screen = req->screen;
+
+ return( __glXGetFBConfigs( cl, (GLbyte *)&new_req ) );
+}
+
+
+int __glXCreateWindow(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc;
+ int screen = req->screen;
+ GLXFBConfigID fbconfigId = req->fbconfig;
+ XID windowId = req->window;
+ XID glxwindowId = req->glxwindow;
+ DrawablePtr pDraw;
+ ScreenPtr pScreen;
+ __glXWindow *pGlxWindow;
+ __GLXFBConfig *pGlxFBConfig = NULL;
+ VisualPtr pVisual;
+ VisualID visId;
+ int i, rc;
+ pointer val;
+
+ /*
+ ** Check if windowId is valid
+ */
+ rc = dixLookupDrawable(&pDraw, windowId, client, M_DRAWABLE_WINDOW,
+ DixAddAccess);
+ if (rc != Success)
+ return rc;
+
+ /*
+ ** Check if screen of window matches screen of fbconfig.
+ */
+ pScreen = pDraw->pScreen;
+ if (screen != pScreen->myNum) {
+ return BadMatch;
+ }
+
+ /*
+ ** Find the FBConfigRec for this fbconfigid.
+ */
+ if (!(pGlxFBConfig = glxLookupFBConfig(fbconfigId))) {
+ client->errorValue = fbconfigId;
+ return __glXBadFBConfig;
+ }
+ visId = pGlxFBConfig->associatedVisualId;
+
+ /*
+ ** Check if the fbconfig supports rendering to windows
+ */
+ if( !(pGlxFBConfig->drawableType & GLX_WINDOW_BIT) ) {
+ return BadMatch;
+ }
+
+ if (visId != None) {
+ /*
+ ** Check if the visual ID is valid for this screen.
+ */
+ pVisual = pScreen->visuals;
+ for (i = 0; i < pScreen->numVisuals; i++, pVisual++) {
+ if (pVisual->vid == visId) {
+ break;
+ }
+ }
+ if (i == pScreen->numVisuals) {
+ client->errorValue = visId;
+ return BadValue;
+ }
+
+ /*
+ ** Check if color buffer depth of fbconfig matches depth
+ ** of window.
+ */
+ if (pVisual->nplanes != pDraw->depth) {
+ return BadMatch;
+ }
+ } else
+ /*
+ ** The window was created with no visual that corresponds
+ ** to fbconfig
+ */
+ return BadMatch;
+
+ /*
+ ** Check if there is already a fbconfig associated with this window
+ */
+ if (Success == dixLookupResourceByType(&val,
+ glxwindowId, __glXWindowRes,
+ NullClient, DixUnknownAccess)) {
+ client->errorValue = glxwindowId;
+ return BadAlloc;
+ }
+
+ pGlxWindow = (__glXWindow *) malloc(sizeof(__glXWindow));
+ if (!pGlxWindow) {
+ return BadAlloc;
+ }
+
+ /*
+ ** Register this GLX window as a resource
+ */
+ if (!(AddResource(glxwindowId, __glXWindowRes, pGlxWindow))) {
+ return BadAlloc;
+ }
+
+ pGlxWindow->pDraw = pDraw;
+ pGlxWindow->type = GLX_GLXWINDOW_TYPE;
+ pGlxWindow->idExists = True;
+ pGlxWindow->refcnt = 0;
+ pGlxWindow->pGlxFBConfig = pGlxFBConfig;
+ pGlxWindow->pScreen = pScreen;
+
+ return Success;
+}
+
+int __glXDestroyWindow(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
+ XID glxwindow = req->glxwindow;
+ pointer val;
+
+ /*
+ ** Check if it's a valid GLX window.
+ */
+ if (Success != dixLookupResourceByType(&val,
+ glxwindow, __glXWindowRes,
+ NullClient, DixUnknownAccess)) {
+ client->errorValue = glxwindow;
+ return __glXBadDrawable;
+ }
+ /*
+ ** The glx window destructor will check whether it's current before
+ ** freeing anything.
+ */
+ FreeResource(glxwindow, RT_NONE);
+
+ return Success;
+}
+
+int __glXQueryContext(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ __GLXcontext *ctx;
+ xGLXQueryContextReq *req;
+ xGLXQueryContextReply reply;
+ int nProps;
+ int *sendBuf, *pSendBuf;
+ int nReplyBytes;
+
+ req = (xGLXQueryContextReq *)pc;
+ dixLookupResourceByType((pointer*) &ctx, req->context, __glXContextRes,
+ NullClient, DixUnknownAccess);
+ if (!ctx) {
+ client->errorValue = req->context;
+ return __glXBadContext;
+ }
+
+ nProps = 3;
+
+ reply.length = nProps << 1;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.n = nProps;
+
+ nReplyBytes = reply.length << 2;
+ sendBuf = (int *)malloc(nReplyBytes);
+ pSendBuf = sendBuf;
+ *pSendBuf++ = GLX_FBCONFIG_ID;
+ *pSendBuf++ = (int)(ctx->pFBConfig->id);
+ *pSendBuf++ = GLX_RENDER_TYPE;
+ *pSendBuf++ = (int)(ctx->pFBConfig->renderType);
+ *pSendBuf++ = GLX_SCREEN;
+ *pSendBuf++ = (int)(ctx->pScreen->myNum);
+
+ if (client->swapped) {
+ __glXSwapQueryContextReply(client, &reply, sendBuf);
+ } else {
+ WriteToClient(client, sz_xGLXQueryContextReply, (char *)&reply);
+ WriteToClient(client, nReplyBytes, (char *)sendBuf);
+ }
+ free((char *)sendBuf);
+
+ return Success;
+}
+
+int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ __GLXcontext *ctx;
+ xGLXQueryContextInfoEXTReq *req;
+ xGLXQueryContextInfoEXTReply reply;
+ int nProps;
+ int *sendBuf, *pSendBuf;
+ int nReplyBytes;
+
+ req = (xGLXQueryContextInfoEXTReq *)pc;
+ dixLookupResourceByType((pointer*) &ctx,
+ req->context, __glXContextRes,
+ client, DixReadAccess);
+
+ if (!ctx) {
+ client->errorValue = req->context;
+ return __glXBadContext;
+ }
+
+ nProps = 4;
+
+ reply.length = nProps << 1;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.n = nProps;
+
+ nReplyBytes = reply.length << 2;
+ sendBuf = (int *)malloc(nReplyBytes);
+ pSendBuf = sendBuf;
+ *pSendBuf++ = GLX_SHARE_CONTEXT_EXT;
+ *pSendBuf++ = (int)(ctx->share_id);
+ *pSendBuf++ = GLX_VISUAL_ID_EXT;
+ *pSendBuf++ = (int)(ctx->pVisual ? ctx->pVisual->vid : 0);
+ *pSendBuf++ = GLX_SCREEN_EXT;
+ *pSendBuf++ = (int)(ctx->pScreen->myNum);
+ *pSendBuf++ = GLX_FBCONFIG_ID;
+ *pSendBuf++ = (int)(ctx->pFBConfig ? ctx->pFBConfig->id : 0);
+
+ if (client->swapped) {
+ __glXSwapQueryContextInfoEXTReply(client, &reply, sendBuf);
+ } else {
+ WriteToClient(client, sz_xGLXQueryContextInfoEXTReply, (char *)&reply);
+ WriteToClient(client, nReplyBytes, (char *)sendBuf);
+ }
+ free((char *)sendBuf);
+
+ return Success;
+}
+
+int __glXCreatePbuffer(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *)pc;
+ xGLXCreatePbufferReq *be_req;
+ int screen = req->screen;
+ GLXFBConfigID fbconfigId = req->fbconfig;
+ GLXPbuffer pbuffer = req->pbuffer;
+ __glXPbuffer *pGlxPbuffer;
+ int numAttribs = req->numAttribs;
+ int *attr;
+ ScreenPtr pScreen;
+ __GLXFBConfig *pGlxFBConfig;
+ __GLXFBConfig *be_pGlxFBConfig;
+ XID be_xid;
+ Display *dpy;
+ DMXScreenInfo *dmxScreen;
+ int s;
+ int from_screen, to_screen;
+
+ /*
+ ** Look up screen and FBConfig.
+ */
+ if (screen >= screenInfo.numScreens) {
+ /* The client library must send a valid screen number. */
+ client->errorValue = screen;
+ return BadValue;
+ }
+ pScreen = screenInfo.screens[screen];
+
+ /*
+ ** Find the FBConfigRec for this fbconfigid.
+ */
+ if (!(pGlxFBConfig = glxLookupFBConfig(fbconfigId))) {
+ client->errorValue = fbconfigId;
+ return __glXBadFBConfig;
+ }
+
+ /*
+ ** Create the GLX part of the Pbuffer.
+ */
+ pGlxPbuffer = (__glXPbuffer *) malloc(sizeof(__glXPbuffer));
+ if (!pGlxPbuffer) {
+ return BadAlloc;
+ }
+
+ pGlxPbuffer->be_xids = (XID *) malloc( sizeof(XID) * screenInfo.numScreens );
+ if (!pGlxPbuffer->be_xids) {
+ free(pGlxPbuffer);
+ return BadAlloc;
+ }
+
+ /*
+ * Allocate an XID on the back-end server(s) and send him the request
+ */
+ from_screen = to_screen = screen;
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+ dpy = GetBackEndDisplay(cl,s);
+ be_xid = XAllocID(dpy);
+ dmxScreen = &dmxScreens[s];
+ be_pGlxFBConfig = glxLookupBackEndFBConfig( pGlxFBConfig->id, s );
+
+ attr = (int *)( req+1 );
+
+ LockDisplay(dpy);
+ GetReqExtra(GLXCreatePbuffer, 2 * numAttribs * __GLX_SIZE_CARD32, be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXCreatePbuffer;
+ be_req->screen = be_pGlxFBConfig->screen;
+ be_req->fbconfig = be_pGlxFBConfig->id;
+ be_req->pbuffer = be_xid;
+ be_req->numAttribs = numAttribs;
+
+ /* Send attributes */
+ if ( attr != NULL ) {
+ CARD32 *pc = (CARD32 *)(be_req + 1);
+
+ while (numAttribs-- > 0) {
+ *pc++ = *attr++; /* token */
+ *pc++ = *attr++; /* value */
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ pGlxPbuffer->be_xids[s] = be_xid;
+ }
+
+
+ pGlxPbuffer->idExists = True;
+ pGlxPbuffer->refcnt = 0;
+ pGlxPbuffer->pFBConfig = pGlxFBConfig;
+ pGlxPbuffer->pScreen = pScreen;
+
+ /*
+ ** Register the resource.
+ */
+ if (!(AddResource(pbuffer, __glXPbufferRes, pGlxPbuffer))) {
+ return BadAlloc;
+ }
+
+ return Success;
+
+}
+
+int __glXDestroyPbuffer(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc;
+ xGLXDestroyPbufferReq *be_req;
+ GLXPbuffer pbuffer = req->pbuffer;
+ Display *dpy;
+ int screen;
+ DMXScreenInfo *dmxScreen;
+ __glXPbuffer *pGlxPbuffer;
+ int s;
+ int from_screen, to_screen;
+
+ /*
+ ** Check if it's a valid Pbuffer
+ */
+ dixLookupResourceByType((pointer*) &pGlxPbuffer, pbuffer,
+ __glXPbufferRes, NullClient, DixUnknownAccess);
+ if (!pGlxPbuffer) {
+ client->errorValue = pbuffer;
+ return __glXBadPbuffer;
+ }
+
+ screen = pGlxPbuffer->pScreen->myNum;
+
+ from_screen = to_screen = screen;
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ for (s=from_screen; s<=to_screen; s++) {
+ dpy = GetBackEndDisplay(cl,s);
+ dmxScreen = &dmxScreens[s];
+
+ /* send the destroy request to the back-end server */
+ LockDisplay(dpy);
+ GetReq(GLXDestroyPbuffer, be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXDestroyPbuffer;
+ be_req->pbuffer = pGlxPbuffer->be_xids[s];
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ FreeResource(pbuffer, RT_NONE);
+
+ return Success;
+}
+
+int __glXGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
+ xGLXGetDrawableAttributesReq *be_req;
+ xGLXGetDrawableAttributesReply reply;
+ ClientPtr client = cl->client;
+ GLXDrawable drawId = req->drawable;
+ GLXDrawable be_drawable = 0;
+ DrawablePtr pDraw = NULL;
+ Display *dpy;
+ int screen, rc;
+ DMXScreenInfo *dmxScreen;
+ CARD32 *attribs = NULL;
+ int attribs_size = 0;
+#ifdef PANORAMIX
+ PanoramiXRes *pXinDraw = NULL;
+#endif
+
+ if (drawId != None) {
+ rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixGetAttrAccess);
+ if (rc == Success && pDraw->type == DRAWABLE_WINDOW) {
+ WindowPtr pWin = (WindowPtr)pDraw;
+ be_drawable = 0;
+ screen = pWin->drawable.pScreen->myNum;
+ } else {
+ /*
+ ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ if (!pDraw) {
+ __GLXpixmap *pGlxPixmap;
+ dixLookupResourceByType((pointer*) &pGlxPixmap,
+ drawId, __glXPixmapRes,
+ NullClient, DixUnknownAccess);
+ if (pGlxPixmap) {
+ pDraw = pGlxPixmap->pDraw;
+ screen = pGlxPixmap->pScreen->myNum;
+ be_drawable = pGlxPixmap->be_xids[screen];
+ }
+ }
+
+ if (!pDraw) {
+ __glXWindow *pGlxWindow;
+ dixLookupResourceByType((pointer*) &pGlxWindow,
+ drawId, __glXWindowRes,
+ NullClient, DixUnknownAccess);
+ if (pGlxWindow) {
+ pDraw = pGlxWindow->pDraw;
+ screen = pGlxWindow->pScreen->myNum;
+ be_drawable = 0;
+ }
+ }
+
+ if (!pDraw) {
+ __glXPbuffer *pGlxPbuffer;
+ dixLookupResourceByType((pointer*) &pGlxPbuffer,
+ drawId, __glXPbufferRes,
+ NullClient, DixUnknownAccess);
+ if (pGlxPbuffer) {
+ pDraw = (DrawablePtr)pGlxPbuffer;
+ screen = pGlxPbuffer->pScreen->myNum;
+ be_drawable = pGlxPbuffer->be_xids[screen];
+ }
+ }
+ }
+
+ if (!pDraw) {
+ /*
+ ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ /* if the drawable is a window or GLXWindow -
+ * we need to find the base id on the back-end server
+ */
+ if (!be_drawable) {
+ WindowPtr pWin = (WindowPtr)pDraw;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ if (Success != dixLookupResourceByClass((pointer*) &pXinDraw,
+ pDraw->id, XRC_DRAWABLE,
+ client, DixReadAccess)) {
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
+ DixReadAccess);
+ }
+#endif
+
+ if (pWin) {
+ be_drawable = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ if (!be_drawable) {
+ /* it might be that the window did not created yet on the */
+ /* back-end server (lazy window creation option), force */
+ /* creation of the window */
+ dmxCreateAndRealizeWindow( pWin, TRUE );
+ be_drawable = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ }
+ }
+ else {
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+ }
+
+
+ /* send the request to the back-end server */
+ dpy = GetBackEndDisplay(cl,screen);
+ dmxScreen = &dmxScreens[screen];
+
+ /* make sure drawable exists on back-end */
+ dmxSync( dmxScreen, 1 );
+
+ LockDisplay(dpy);
+ GetReq(GLXGetDrawableAttributes, be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXGetDrawableAttributes;
+ be_req->drawable = be_drawable;
+ be_req->length = req->length;
+ if (!_XReply(dpy, (xReply *) &reply, 0, False)) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return( BE_TO_CLIENT_ERROR(dmxLastErrorEvent.error_code) );
+ }
+
+ if (reply.numAttribs) {
+ attribs_size = 2 * reply.numAttribs * __GLX_SIZE_CARD32;
+ attribs = (CARD32 *) malloc(attribs_size);
+ if (attribs == NULL) {
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return BadAlloc;
+ }
+
+ _XRead(dpy, (char *) attribs, attribs_size);
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+
+ /* send the reply back to the client */
+ reply.sequenceNumber = client->sequence;
+ if (client->swapped) {
+ __glXSwapGetDrawableAttributesReply(client, &reply, (int *)attribs);
+ }
+ else {
+ WriteToClient(client, sz_xGLXGetDrawableAttributesReply, (char *)&reply);
+ WriteToClient(client, attribs_size, (char *)attribs);
+ }
+
+ free(attribs);
+
+ return Success;
+}
+
+int __glXChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXChangeDrawableAttributesReq *req = (xGLXChangeDrawableAttributesReq *)pc;
+ xGLXChangeDrawableAttributesReq *be_req;
+ ClientPtr client = cl->client;
+ GLXDrawable drawId = req->drawable;
+ GLXDrawable be_drawable = 0;
+ DrawablePtr pDraw = NULL;
+ Display *dpy;
+ int screen, rc;
+ DMXScreenInfo *dmxScreen;
+
+ if (drawId != None) {
+ rc = dixLookupDrawable(&pDraw, drawId, client, 0, DixSetAttrAccess);
+ if (rc == Success && pDraw->type == DRAWABLE_WINDOW) {
+ be_drawable = 0;
+ screen = pDraw->pScreen->myNum;
+ } else {
+ /*
+ ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ if (!pDraw) {
+ __GLXpixmap *pGlxPixmap;
+ dixLookupResourceByType((pointer*) &pGlxPixmap,
+ drawId, __glXPixmapRes,
+ NullClient, DixUnknownAccess);
+ if (pGlxPixmap) {
+ pDraw = pGlxPixmap->pDraw;
+ screen = pGlxPixmap->pScreen->myNum;
+ be_drawable = pGlxPixmap->be_xids[screen];
+ }
+ }
+
+ if (!pDraw) {
+ __glXWindow *pGlxWindow;
+ dixLookupResourceByType((pointer*) &pGlxWindow,
+ drawId, __glXWindowRes,
+ NullClient, DixUnknownAccess);
+ if (pGlxWindow) {
+ pDraw = pGlxWindow->pDraw;
+ screen = pGlxWindow->pScreen->myNum;
+ be_drawable = 0;
+ }
+ }
+
+ if (!pDraw) {
+ __glXPbuffer *pGlxPbuffer;
+ dixLookupResourceByType((pointer*) &pGlxPbuffer,
+ drawId, __glXPbufferRes,
+ NullClient, DixUnknownAccess);
+ if (pGlxPbuffer) {
+ pDraw = (DrawablePtr)pGlxPbuffer;
+ screen = pGlxPbuffer->pScreen->myNum;
+ be_drawable = pGlxPbuffer->be_xids[screen];
+ }
+ }
+ }
+
+ if (!pDraw) {
+ /*
+ ** Drawable is not a Window , GLXWindow or a GLXPixmap.
+ */
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ /* if the drawable is a window or GLXWindow -
+ * we need to find the base id on the back-end server
+ */
+ if (!be_drawable) {
+ WindowPtr pWin = (WindowPtr)pDraw;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ PanoramiXRes *pXinDraw;
+ if (Success != dixLookupResourceByClass((pointer*) &pXinDraw,
+ pDraw->id, XRC_DRAWABLE,
+ client, DixReadAccess)) {
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+
+ dixLookupWindow(&pWin, pXinDraw->info[screen].id, client,
+ DixReadAccess);
+ }
+#endif
+
+ if (pWin) {
+ be_drawable = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ if (!be_drawable) {
+ /* it might be that the window did not created yet on the */
+ /* back-end server (lazy window creation option), force */
+ /* creation of the window */
+ dmxCreateAndRealizeWindow( pWin, TRUE );
+ be_drawable = (unsigned int)(DMX_GET_WINDOW_PRIV(pWin))->window;
+ }
+ }
+ else {
+ client->errorValue = drawId;
+ return __glXBadDrawable;
+ }
+ }
+
+
+ /* send the request to the back-end server */
+ dpy = GetBackEndDisplay(cl,screen);
+ dmxScreen = &dmxScreens[screen];
+
+ /* make sure drawable exists on back-end */
+ dmxSync( dmxScreen, 1 );
+
+ LockDisplay(dpy);
+ GetReqExtra(GLXChangeDrawableAttributes,
+ 2 * req->numAttribs * __GLX_SIZE_CARD32, be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLXChangeDrawableAttributes;
+ be_req->drawable = be_drawable;
+ be_req->numAttribs = req->numAttribs;
+ be_req->length = req->length;
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ return Success;
+}
+
+int __glXSendLargeCommand(__GLXclientState *cl, GLXContextTag contextTag)
+{
+ ClientPtr client = cl->client;
+ xGLXRenderLargeReq *req;
+ GLint maxSize, amount;
+ GLint totalRequests, requestNumber;
+ GLint dataLen;
+ GLbyte *data;
+ __GLXcontext *glxc;
+ int s;
+ int from_screen, to_screen;
+
+ maxSize = cl->largeCmdMaxReqDataSize - (GLint)sizeof(xGLXRenderLargeReq);
+ dataLen = cl->largeCmdBytesTotal;
+ totalRequests = (dataLen / maxSize);
+ if (dataLen % maxSize) totalRequests++;
+
+ glxc = __glXLookupContextByTag(cl, contextTag);
+ if (!glxc) {
+ client->errorValue = contextTag;
+ return __glXBadContext;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ /*
+ ** Send enough requests until the whole array is sent.
+ */
+ requestNumber = 1;
+ data = cl->largeCmdBuf;
+ while (dataLen > 0) {
+ amount = dataLen;
+ if (amount > maxSize) {
+ amount = maxSize;
+ }
+
+ for (s=from_screen; s<=to_screen; s++) {
+
+ Display *dpy = GetBackEndDisplay(cl,s);
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+
+ LockDisplay(dpy);
+ GetReq(GLXRenderLarge,req);
+ req->reqType = dmxScreen->glxMajorOpcode;
+ req->glxCode = X_GLXRenderLarge;
+ req->contextTag = GetCurrentBackEndTag(cl,contextTag,s);
+ req->length += (amount + 3) >> 2;
+ req->requestNumber = requestNumber++;
+ req->requestTotal = totalRequests;
+ req->dataBytes = amount;
+ Data(dpy, ((const char*)data), amount);
+ dataLen -= amount;
+ data = ((GLbyte *) data) + amount;
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+ }
+
+ return Success;
+}
diff --git a/hw/dmx/glxProxy/glxcmdsswap.c b/hw/dmx/glxProxy/glxcmdsswap.c
new file mode 100644
index 0000000..2294059
--- /dev/null
+++ b/hw/dmx/glxProxy/glxcmdsswap.c
@@ -0,0 +1,1059 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+#include "glxutil.h"
+#include <GL/glxtokens.h>
+#include <g_disptab.h>
+#include <pixmapstr.h>
+#include <windowstr.h>
+#include "unpack.h"
+#include "glxext.h"
+#include "glxvendor.h"
+
+extern int glxIsExtensionSupported( char *ext );
+
+/************************************************************************/
+
+/*
+** Byteswapping versions of GLX commands. In most cases they just swap
+** the incoming arguments and then call the unswapped routine. For commands
+** that have replies, a separate swapping routine for the reply is provided;
+** it is called at the end of the unswapped routine.
+*/
+
+int __glXSwapCreateContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateContextReq *req = (xGLXCreateContextReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+ __GLX_SWAP_INT(&req->visual);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->shareList);
+
+ return __glXCreateContext(cl, pc);
+}
+
+int __glXSwapCreateNewContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateNewContextReq *req = (xGLXCreateNewContextReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+ __GLX_SWAP_INT(&req->fbconfig);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->shareList);
+
+ return __glXCreateNewContext(cl, pc);
+}
+
+int __glXSwapCreateContextWithConfigSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateContextWithConfigSGIXReq *req = (xGLXCreateContextWithConfigSGIXReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+ __GLX_SWAP_INT(&req->fbconfig);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->shareList);
+
+ return __glXCreateContextWithConfigSGIX(cl, pc);
+}
+
+int __glXSwapQueryMaxSwapBarriersSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXQueryMaxSwapBarriersSGIXReq *req =
+ (xGLXQueryMaxSwapBarriersSGIXReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+
+ return __glXQueryMaxSwapBarriersSGIX(cl, pc);
+}
+
+int __glXSwapBindSwapBarrierSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXBindSwapBarrierSGIXReq *req = (xGLXBindSwapBarrierSGIXReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+ __GLX_SWAP_INT(&req->barrier);
+
+ return __glXBindSwapBarrierSGIX(cl, pc);
+}
+
+int __glXSwapJoinSwapGroupSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXJoinSwapGroupSGIXReq *req = (xGLXJoinSwapGroupSGIXReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+ __GLX_SWAP_INT(&req->member);
+
+ return __glXJoinSwapGroupSGIX(cl, pc);
+}
+
+int __glXSwapDestroyContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXDestroyContextReq *req = (xGLXDestroyContextReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+
+ return __glXDestroyContext(cl, pc);
+}
+
+int __glXSwapMakeCurrent(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXMakeCurrentReq *req = (xGLXMakeCurrentReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+ __GLX_SWAP_INT(&req->context);
+ __GLX_SWAP_INT(&req->oldContextTag);
+
+ return __glXMakeCurrent(cl, pc);
+}
+
+int __glXSwapMakeContextCurrent(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXMakeContextCurrentReq *req = (xGLXMakeContextCurrentReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+ __GLX_SWAP_INT(&req->readdrawable);
+ __GLX_SWAP_INT(&req->context);
+ __GLX_SWAP_INT(&req->oldContextTag);
+
+ return __glXMakeContextCurrent(cl, pc);
+}
+
+int __glXSwapMakeCurrentReadSGI(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXMakeCurrentReadSGIReq *req = (xGLXMakeCurrentReadSGIReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+ __GLX_SWAP_INT(&req->readable);
+ __GLX_SWAP_INT(&req->context);
+ __GLX_SWAP_INT(&req->oldContextTag);
+
+ return __glXMakeCurrentReadSGI(cl, pc);
+}
+
+int __glXSwapIsDirect(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXIsDirectReq *req = (xGLXIsDirectReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+
+ return __glXIsDirect(cl, pc);
+}
+
+int __glXSwapQueryVersion(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXQueryVersionReq *req = (xGLXQueryVersionReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->majorVersion);
+ __GLX_SWAP_INT(&req->minorVersion);
+
+ return __glXQueryVersion(cl, pc);
+}
+
+int __glXSwapWaitGL(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXWaitGLReq *req = (xGLXWaitGLReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ return __glXWaitGL(cl, pc);
+}
+
+int __glXSwapWaitX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXWaitXReq *req = (xGLXWaitXReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ return __glXWaitX(cl, pc);
+}
+
+int __glXSwapCopyContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCopyContextReq *req = (xGLXCopyContextReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->source);
+ __GLX_SWAP_INT(&req->dest);
+ __GLX_SWAP_INT(&req->mask);
+
+ return __glXCopyContext(cl, pc);
+}
+
+int __glXSwapGetVisualConfigs(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc;
+ xGLXGetVisualConfigsReply reply;
+ __GLXscreenInfo *pGlxScreen;
+ __GLXvisualConfig *pGlxVisual;
+ CARD32 buf[__GLX_TOTAL_CONFIG];
+ unsigned int screen;
+ int i, p;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(&req->screen);
+ screen = req->screen;
+ if (screen >= screenInfo.numScreens) {
+ /* The client library must send a valid screen number. */
+ client->errorValue = screen;
+ return BadValue;
+ }
+ pGlxScreen = &__glXActiveScreens[screen];
+
+ reply.numVisuals = pGlxScreen->numGLXVisuals;
+ reply.numProps = __GLX_TOTAL_CONFIG;
+ reply.length = (pGlxScreen->numGLXVisuals * __GLX_SIZE_CARD32 *
+ __GLX_TOTAL_CONFIG) >> 2;
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ __GLX_SWAP_SHORT(&reply.sequenceNumber);
+ __GLX_SWAP_INT(&reply.length);
+ __GLX_SWAP_INT(&reply.numVisuals);
+ __GLX_SWAP_INT(&reply.numProps);
+ WriteToClient(client, sz_xGLXGetVisualConfigsReply, (char *)&reply);
+
+ for (i=0; i < pGlxScreen->numVisuals; i++) {
+ pGlxVisual = &pGlxScreen->pGlxVisual[i];
+ if (!pGlxScreen->isGLXvis[i] || pGlxVisual->vid == 0) {
+ /* not a usable visual */
+ continue;
+ }
+ p = 0;
+ buf[p++] = pGlxVisual->vid;
+ buf[p++] = pGlxVisual->class;
+ buf[p++] = pGlxVisual->rgba;
+
+ buf[p++] = pGlxVisual->redSize;
+ buf[p++] = pGlxVisual->greenSize;
+ buf[p++] = pGlxVisual->blueSize;
+ buf[p++] = pGlxVisual->alphaSize;
+ buf[p++] = pGlxVisual->accumRedSize;
+ buf[p++] = pGlxVisual->accumGreenSize;
+ buf[p++] = pGlxVisual->accumBlueSize;
+ buf[p++] = pGlxVisual->accumAlphaSize;
+
+ buf[p++] = pGlxVisual->doubleBuffer;
+ buf[p++] = pGlxVisual->stereo;
+
+ buf[p++] = pGlxVisual->bufferSize;
+ buf[p++] = pGlxVisual->depthSize;
+ buf[p++] = pGlxVisual->stencilSize;
+ buf[p++] = pGlxVisual->auxBuffers;
+ buf[p++] = pGlxVisual->level;
+ /*
+ ** Add token/value pairs for extensions.
+ */
+ buf[p++] = GLX_VISUAL_CAVEAT_EXT;
+ buf[p++] = pGlxVisual->visualRating;
+ buf[p++] = GLX_TRANSPARENT_TYPE_EXT;
+ buf[p++] = pGlxVisual->transparentPixel;
+ buf[p++] = GLX_TRANSPARENT_RED_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentRed;
+ buf[p++] = GLX_TRANSPARENT_GREEN_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentGreen;
+ buf[p++] = GLX_TRANSPARENT_BLUE_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentBlue;
+ buf[p++] = GLX_TRANSPARENT_ALPHA_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentAlpha;
+ buf[p++] = GLX_TRANSPARENT_INDEX_VALUE_EXT;
+ buf[p++] = pGlxVisual->transparentIndex;
+
+ __GLX_SWAP_INT_ARRAY(buf, __GLX_TOTAL_CONFIG);
+ WriteToClient(client, __GLX_SIZE_CARD32 * __GLX_TOTAL_CONFIG,
+ (char *)buf);
+ }
+ return Success;
+}
+
+int __glXSwapCreateGLXPixmap(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateGLXPixmapReq *req = (xGLXCreateGLXPixmapReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->visual);
+ __GLX_SWAP_INT(&req->pixmap);
+ __GLX_SWAP_INT(&req->glxpixmap);
+
+ return __glXCreateGLXPixmap(cl, pc);
+}
+
+int __glXSwapCreatePixmap(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreatePixmapReq *req = (xGLXCreatePixmapReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->fbconfig);
+ __GLX_SWAP_INT(&req->pixmap);
+ __GLX_SWAP_INT(&req->glxpixmap);
+ __GLX_SWAP_INT(&req->numAttribs);
+
+ return __glXCreatePixmap(cl, pc);
+}
+
+int __glXSwapDestroyGLXPixmap(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXDestroyGLXPixmapReq *req = (xGLXDestroyGLXPixmapReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->glxpixmap);
+
+ return __glXDestroyGLXPixmap(cl, pc);
+}
+
+int __glXSwapSwapBuffers(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXSwapBuffersReq *req = (xGLXSwapBuffersReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+ __GLX_SWAP_INT(&req->drawable);
+
+ return __glXSwapBuffers(cl, pc);
+}
+
+int __glXSwapUseXFont(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXUseXFontReq *req = (xGLXUseXFontReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+ __GLX_SWAP_INT(&req->font);
+ __GLX_SWAP_INT(&req->first);
+ __GLX_SWAP_INT(&req->count);
+ __GLX_SWAP_INT(&req->listBase);
+
+ return __glXUseXFont(cl, pc);
+}
+
+
+int __glXSwapQueryExtensionsString(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXQueryExtensionsStringReq *req = NULL;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+
+ return __glXQueryExtensionsString(cl, pc);
+}
+
+int __glXSwapQueryServerString(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXQueryServerStringReq *req = (xGLXQueryServerStringReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->name);
+
+ return __glXQueryServerString(cl, pc);
+}
+
+int __glXSwapClientInfo(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXClientInfoReq *req = (xGLXClientInfoReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->major);
+ __GLX_SWAP_INT(&req->minor);
+ __GLX_SWAP_INT(&req->numbytes);
+
+ return __glXClientInfo(cl, pc);
+}
+
+int __glXSwapQueryContextInfoEXT(__GLXclientState *cl, char *pc)
+{
+ xGLXQueryContextInfoEXTReq *req = (xGLXQueryContextInfoEXTReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+
+ return __glXQueryContextInfoEXT(cl, (GLbyte *)pc);
+}
+
+/************************************************************************/
+
+/*
+** Swap replies.
+*/
+
+void __glXSwapMakeCurrentReply(ClientPtr client, xGLXMakeCurrentReadSGIReply *reply)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->contextTag);
+ __GLX_SWAP_INT(&reply->writeVid);
+ __GLX_SWAP_INT(&reply->writeType);
+ __GLX_SWAP_INT(&reply->readVid);
+ __GLX_SWAP_INT(&reply->readType);
+ WriteToClient(client, sz_xGLXMakeCurrentReadSGIReply, (char *)reply);
+}
+
+void __glXSwapIsDirectReply(ClientPtr client, xGLXIsDirectReply *reply)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ WriteToClient(client, sz_xGLXIsDirectReply, (char *)reply);
+}
+
+void __glXSwapQueryVersionReply(ClientPtr client, xGLXQueryVersionReply *reply)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->majorVersion);
+ __GLX_SWAP_INT(&reply->minorVersion);
+ WriteToClient(client, sz_xGLXQueryVersionReply, (char *)reply);
+}
+
+void glxSwapQueryExtensionsStringReply(ClientPtr client,
+ xGLXQueryExtensionsStringReply *reply, char *buf)
+{
+ int length = reply->length;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->n);
+ WriteToClient(client, sz_xGLXQueryExtensionsStringReply, (char *)reply);
+ __GLX_SWAP_INT_ARRAY((int *)buf, length);
+ WriteToClient(client, length << 2, buf);
+}
+
+void glxSwapQueryServerStringReply(ClientPtr client,
+ xGLXQueryServerStringReply *reply, char *buf)
+{
+ int length = reply->length;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->n);
+ WriteToClient(client, sz_xGLXQueryServerStringReply, (char *)reply);
+ /** no swap is needed for an array of chars **/
+ /* __GLX_SWAP_INT_ARRAY((int *)buf, length); */
+ WriteToClient(client, length << 2, buf);
+}
+
+void __glXSwapQueryContextInfoEXTReply(ClientPtr client, xGLXQueryContextInfoEXTReply *reply, int *buf)
+{
+ int length = reply->length;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->n);
+ WriteToClient(client, sz_xGLXQueryContextInfoEXTReply, (char *)reply);
+ __GLX_SWAP_INT_ARRAY((int *)buf, length);
+ WriteToClient(client, length << 2, (char *)buf);
+}
+
+
+void __glXSwapQueryContextReply(ClientPtr client,
+ xGLXQueryContextReply *reply, int *buf)
+{
+ int length = reply->length;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->n);
+ WriteToClient(client, sz_xGLXQueryContextReply, (char *)reply);
+ __GLX_SWAP_INT_ARRAY((int *)buf, length);
+ WriteToClient(client, length << 2, (char *)buf);
+}
+
+void __glXSwapGetDrawableAttributesReply(ClientPtr client,
+ xGLXGetDrawableAttributesReply *reply, int *buf)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->numAttribs);
+ __GLX_SWAP_INT_ARRAY( buf, reply->length );
+ WriteToClient(client, sz_xGLXGetDrawableAttributesReply, (char *)reply);
+ WriteToClient(client, reply->length << 2, (char *)buf);
+}
+
+void __glXSwapQueryMaxSwapBarriersSGIXReply(ClientPtr client, xGLXQueryMaxSwapBarriersSGIXReply *reply)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->max);
+ WriteToClient(client, sz_xGLXQueryMaxSwapBarriersSGIXReply, (char *)reply);
+}
+
+/************************************************************************/
+
+/*
+** Render and Renderlarge are not in the GLX API. They are used by the GLX
+** client library to send batches of GL rendering commands.
+*/
+
+int __glXSwapRender(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXRenderReq *req;
+ int left;
+ __GLXrenderHeader *hdr;
+ ClientPtr client = cl->client;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ /*
+ ** NOTE: much of this code also appears in the nonswapping version of this
+ ** routine, __glXRender(). Any changes made here should also be
+ ** duplicated there.
+ */
+
+ req = (xGLXRenderReq *) pc;
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ pc += sz_xGLXRenderReq;
+ left = (req->length << 2) - sz_xGLXRenderReq;
+ while (left > 0) {
+ void (* proc)(GLbyte *);
+ CARD16 opcode;
+
+ /*
+ ** Verify that the header length and the overall length agree.
+ ** Also, each command must be word aligned.
+ */
+ hdr = (__GLXrenderHeader *) pc;
+ __GLX_SWAP_SHORT(&hdr->length);
+ __GLX_SWAP_SHORT(&hdr->opcode);
+
+ /*
+ * call the command procedure to swap any arguments
+ */
+ opcode = hdr->opcode;
+ if ( (opcode >= __GLX_MIN_RENDER_OPCODE) &&
+ (opcode <= __GLX_MAX_RENDER_OPCODE) ) {
+ proc = __glXSwapRenderTable[opcode];
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+ } else if ( (opcode >= __GLX_MIN_RENDER_OPCODE_EXT) &&
+ (opcode <= __GLX_MAX_RENDER_OPCODE_EXT) ) {
+ int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+ __GLXRenderSwapInfo *info = &__glXSwapRenderTable_EXT[index];
+ if (info->swapfunc) {
+ proc = info->swapfunc;
+ }
+ else {
+ proc = NULL;
+ if (info->elem_size == 4 && info->nelems > 0) {
+ __GLX_SWAP_INT_ARRAY( (int *)(pc + __GLX_RENDER_HDR_SIZE),
+ info->nelems );
+ }
+ else if (info->elem_size == 2 && info->nelems > 0) {
+ __GLX_SWAP_SHORT_ARRAY( (short *)(pc + __GLX_RENDER_HDR_SIZE),
+ info->nelems );
+ }
+ else if (info->elem_size == 8 && info->nelems > 0) {
+ __GLX_SWAP_DOUBLE_ARRAY( (double *)(pc + __GLX_RENDER_HDR_SIZE),
+ info->nelems );
+ }
+ }
+#endif /* __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT */
+ } else {
+ client->errorValue = 0;
+ return __glXBadRenderRequest;
+ }
+
+ if (proc != NULL)
+ (*proc)(pc + __GLX_RENDER_HDR_SIZE);
+
+ /*
+ * proceed to the next command
+ */
+ pc += hdr->length;
+ left -= hdr->length;
+ }
+
+ return __glXRender( cl, (GLbyte *)req );
+}
+
+/*
+** Execute a large rendering request (one that spans multiple X requests).
+*/
+int __glXSwapRenderLarge(__GLXclientState *cl, GLbyte *pc)
+{
+ ClientPtr client = cl->client;
+ xGLXRenderLargeReq *req;
+ __GLXrenderLargeHeader *hdr;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ req = (xGLXRenderLargeReq *) pc;
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+ __GLX_SWAP_INT(&req->dataBytes);
+ __GLX_SWAP_SHORT(&req->requestNumber);
+ __GLX_SWAP_SHORT(&req->requestTotal);
+
+ pc += sz_xGLXRenderLargeReq;
+
+ if (req->requestNumber == 1) {
+ void (* proc)(GLbyte *) = NULL;
+ __GLXRenderSwapInfo *info = NULL;
+ CARD16 opcode;
+
+ hdr = (__GLXrenderLargeHeader *) pc;
+ __GLX_SWAP_INT(&hdr->length);
+ __GLX_SWAP_INT(&hdr->opcode);
+
+ /*
+ * call the command procedure to swap any arguments
+ * Note that we are assuming that all arguments that needs to be
+ * swaped are on the first req only !
+ */
+ opcode = hdr->opcode;
+ if ( (opcode >= __GLX_MIN_RENDER_OPCODE) &&
+ (opcode <= __GLX_MAX_RENDER_OPCODE) ) {
+ proc = __glXSwapRenderTable[opcode];
+#if __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT
+ } else if ( (opcode >= __GLX_MIN_RENDER_OPCODE_EXT) &&
+ (opcode <= __GLX_MAX_RENDER_OPCODE_EXT) ) {
+ int index = opcode - __GLX_MIN_RENDER_OPCODE_EXT;
+ info = &__glXSwapRenderTable_EXT[index];
+ if (info->swapfunc) {
+ proc = info->swapfunc;
+ }
+#endif /* __GLX_MAX_RENDER_OPCODE_EXT > __GLX_MIN_RENDER_OPCODE_EXT */
+ } else {
+ client->errorValue = 0;
+ cl->largeCmdRequestsTotal = 0;
+ return __glXBadLargeRequest;
+ }
+
+ /*
+ ** Make enough space in the buffer, then copy the entire request.
+ */
+ if (cl->largeCmdBufSize < hdr->length) {
+ if (!cl->largeCmdBuf) {
+ cl->largeCmdBuf = (GLbyte *) malloc(hdr->length);
+ } else {
+ cl->largeCmdBuf = (GLbyte *) realloc(cl->largeCmdBuf, hdr->length);
+ }
+ if (!cl->largeCmdBuf) {
+ cl->largeCmdRequestsTotal = 0;
+ return BadAlloc;
+ }
+ cl->largeCmdBufSize = hdr->length;
+ }
+ memcpy(cl->largeCmdBuf, pc, req->dataBytes);
+
+ cl->largeCmdBytesSoFar = req->dataBytes;
+ cl->largeCmdBytesTotal = hdr->length;
+ cl->largeCmdRequestsSoFar = 1;
+ cl->largeCmdRequestsTotal = req->requestTotal;
+ cl->largeCmdRequestsSwapProc = proc;
+ cl->largeCmdMaxReqDataSize = req->dataBytes;
+ cl->largeCmdRequestsSwap_info = info;
+
+ return Success;
+
+
+ }
+ else if (req->requestNumber < cl->largeCmdRequestsTotal) {
+ /*
+ * This is not the first nor last request - just copy the data
+ */
+ if ( cl->largeCmdBytesSoFar + req->dataBytes > cl->largeCmdBytesTotal) {
+ cl->largeCmdRequestsTotal = 0;
+ return __glXBadLargeRequest;
+ }
+
+ memcpy(cl->largeCmdBuf + cl->largeCmdBytesSoFar,
+ pc, req->dataBytes);
+
+ cl->largeCmdBytesSoFar += req->dataBytes;
+
+ if (req->dataBytes > cl->largeCmdMaxReqDataSize)
+ cl->largeCmdMaxReqDataSize = req->dataBytes;
+
+ return Success;
+ }
+ else if (req->requestNumber == cl->largeCmdRequestsTotal) {
+ /*
+ * this is the last request
+ * copy the remainder bytes, call the procedure to swap any
+ * needed data, and then call to transfer the command to all
+ * back-end servers
+ */
+ if ( cl->largeCmdBytesSoFar + req->dataBytes > cl->largeCmdBytesTotal) {
+ cl->largeCmdRequestsTotal = 0;
+ return __glXBadLargeRequest;
+ }
+
+ memcpy(cl->largeCmdBuf + cl->largeCmdBytesSoFar,
+ pc, req->dataBytes);
+
+ cl->largeCmdBytesSoFar += req->dataBytes;
+
+ if (req->dataBytes > cl->largeCmdMaxReqDataSize)
+ cl->largeCmdMaxReqDataSize = req->dataBytes;
+
+ if (cl->largeCmdRequestsSwapProc != NULL) {
+ (*cl->largeCmdRequestsSwapProc)(cl->largeCmdBuf + __GLX_RENDER_LARGE_HDR_SIZE);
+ }
+ else if (cl->largeCmdRequestsSwap_info &&
+ cl->largeCmdRequestsSwap_info->nelems > 0) {
+ if (cl->largeCmdRequestsSwap_info->elem_size == 4) {
+ __GLX_SWAP_INT_ARRAY( (int *)(pc + __GLX_RENDER_LARGE_HDR_SIZE),
+ cl->largeCmdRequestsSwap_info->nelems );
+ }
+ else if (cl->largeCmdRequestsSwap_info->elem_size == 2) {
+ __GLX_SWAP_SHORT_ARRAY( (short *)(pc + __GLX_RENDER_LARGE_HDR_SIZE),
+ cl->largeCmdRequestsSwap_info->nelems );
+ }
+ else if (cl->largeCmdRequestsSwap_info->elem_size == 8) {
+ __GLX_SWAP_DOUBLE_ARRAY( (double *)(pc + __GLX_RENDER_LARGE_HDR_SIZE),
+ cl->largeCmdRequestsSwap_info->nelems );
+ }
+ }
+
+ cl->largeCmdRequestsTotal = 0;
+ return( __glXSendLargeCommand(cl, req->contextTag) );
+
+ }
+ else {
+ cl->largeCmdRequestsTotal = 0;
+ return __glXBadLargeRequest;
+ }
+
+}
+
+/************************************************************************/
+
+/*
+** No support is provided for the vendor-private requests other than
+** allocating these entry points in the dispatch table.
+*/
+
+int __glXSwapVendorPrivate(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXVendorPrivateReq *req;
+ CARD32 vendorCode;
+
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ req = (xGLXVendorPrivateReq *) pc;
+ vendorCode = req->vendorCode;
+ __GLX_SWAP_INT(&vendorCode);
+
+
+ switch( vendorCode ) {
+
+ case X_GLvop_DeleteTexturesEXT:
+ return __glXVForwardSingleReqSwap( cl, pc );
+ break;
+
+ case X_GLXvop_SwapIntervalSGI:
+ if (glxIsExtensionSupported("SGI_swap_control")) {
+ return __glXVForwardSingleReqSwap( cl, pc );
+ }
+ else {
+ return Success;
+ }
+ break;
+
+#if 0 /* glx 1.3 */
+ case X_GLXvop_CreateGLXVideoSourceSGIX:
+ break;
+ case X_GLXvop_DestroyGLXVideoSourceSGIX:
+ break;
+ case X_GLXvop_CreateGLXPixmapWithConfigSGIX:
+ break;
+ case X_GLXvop_DestroyGLXPbufferSGIX:
+ break;
+ case X_GLXvop_ChangeDrawableAttributesSGIX:
+ break;
+#endif
+
+ case X_GLXvop_JoinSwapGroupSGIX:
+ return __glXSwapJoinSwapGroupSGIX( cl, pc );
+ break;
+
+ case X_GLXvop_BindSwapBarrierSGIX:
+ return __glXSwapBindSwapBarrierSGIX( cl, pc );
+ break;
+
+ case X_GLXvop_CreateContextWithConfigSGIX:
+ return __glXSwapCreateContextWithConfigSGIX( cl, pc );
+ break;
+
+ default:
+ /*
+ ** unsupported private request
+ */
+ cl->client->errorValue = req->vendorCode;
+ return __glXUnsupportedPrivateRequest;
+ }
+
+}
+
+int __glXSwapVendorPrivateWithReply(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXVendorPrivateWithReplyReq *req;
+ CARD32 vendorCode;
+
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ req = (xGLXVendorPrivateWithReplyReq *) pc;
+ vendorCode = req->vendorCode;
+ __GLX_SWAP_INT(&vendorCode);
+
+ switch( vendorCode ) {
+
+ case X_GLvop_GetConvolutionFilterEXT:
+ case X_GLvop_GetSeparableFilterEXT:
+ case X_GLvop_GetHistogramEXT:
+ case X_GLvop_GetMinmaxEXT:
+ return( __glXNoSuchSingleOpcode(cl, pc) );
+ break;
+
+ case X_GLvop_GetConvolutionParameterfvEXT:
+ case X_GLvop_GetConvolutionParameterivEXT:
+ case X_GLvop_GetHistogramParameterivEXT:
+ case X_GLvop_GetMinmaxParameterfvEXT:
+ case X_GLvop_GetMinmaxParameterivEXT:
+ case X_GLvop_GenTexturesEXT:
+ return( __glXVForwardAllWithReplySwapiv(cl, pc) );
+ break;
+
+ case X_GLvop_AreTexturesResidentEXT:
+ case X_GLvop_IsTextureEXT:
+ return( __glXVForwardPipe0WithReplySwap(cl, pc) );
+ break;
+
+#if 0 /* glx1.3 */
+ case X_GLvop_GetDetailTexFuncSGIS:
+ case X_GLvop_GetSharpenTexFuncSGIS:
+ case X_GLvop_GetColorTableSGI:
+ case X_GLvop_GetColorTableParameterfvSGI:
+ case X_GLvop_GetColorTableParameterivSGI:
+ case X_GLvop_GetTexFilterFuncSGIS:
+ case X_GLvop_GetInstrumentsSGIX:
+ case X_GLvop_InstrumentsBufferSGIX:
+ case X_GLvop_PollInstrumentsSGIX:
+ case X_GLvop_FlushRasterSGIX:
+ case X_GLXvop_CreateGLXPbufferSGIX:
+ case X_GLXvop_GetDrawableAttributesSGIX:
+ case X_GLXvop_QueryHyperpipeNetworkSGIX:
+ case X_GLXvop_QueryHyperpipeConfigSGIX:
+ case X_GLXvop_HyperpipeConfigSGIX:
+ case X_GLXvop_DestroyHyperpipeConfigSGIX:
+#endif
+ case X_GLXvop_QueryMaxSwapBarriersSGIX:
+ return( __glXSwapQueryMaxSwapBarriersSGIX(cl, pc) );
+ break;
+
+ case X_GLXvop_GetFBConfigsSGIX:
+ return( __glXSwapGetFBConfigsSGIX(cl, pc) );
+ break;
+
+ case X_GLXvop_MakeCurrentReadSGI:
+ return( __glXSwapMakeCurrentReadSGI(cl, pc) );
+ break;
+
+ case X_GLXvop_QueryContextInfoEXT:
+ return( __glXSwapQueryContextInfoEXT(cl,(char *)pc) );
+ break;
+
+ default:
+ /*
+ ** unsupported private request
+ */
+ cl->client->errorValue = req->vendorCode;
+ return __glXUnsupportedPrivateRequest;
+ }
+
+}
+
+int __glXSwapGetFBConfigs(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXGetFBConfigsReq *req = (xGLXGetFBConfigsReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+
+ return __glXGetFBConfigs(cl, pc);
+}
+
+int __glXSwapGetFBConfigsSGIX(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXGetFBConfigsSGIXReq *req = (xGLXGetFBConfigsSGIXReq *)pc;
+ xGLXGetFBConfigsReq new_req;
+
+ new_req.reqType = req->reqType;
+ new_req.glxCode = req->glxCode;
+ new_req.length = req->length;
+ new_req.screen = req->screen;
+
+ return( __glXSwapGetFBConfigs( cl, (GLbyte *)&new_req ) );
+}
+
+int __glXSwapCreateWindow(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreateWindowReq *req = (xGLXCreateWindowReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->fbconfig);
+ __GLX_SWAP_INT(&req->window);
+ __GLX_SWAP_INT(&req->glxwindow);
+ __GLX_SWAP_INT(&req->numAttribs);
+
+ return( __glXCreateWindow( cl, (GLbyte *)pc ) );
+}
+
+int __glXSwapDestroyWindow(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXDestroyWindowReq *req = (xGLXDestroyWindowReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->glxwindow);
+
+ return( __glXDestroyWindow( cl, (GLbyte *)pc ) );
+}
+
+int __glXSwapQueryContext(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXQueryContextReq *req = (xGLXQueryContextReq *)pc;
+
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->context);
+
+ return( __glXQueryContext(cl, (GLbyte *)pc) );
+
+}
+
+int __glXSwapCreatePbuffer(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXCreatePbufferReq *req = (xGLXCreatePbufferReq *)pc;
+ int nattr = req->numAttribs;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->screen);
+ __GLX_SWAP_INT(&req->fbconfig);
+ __GLX_SWAP_INT(&req->pbuffer);
+ __GLX_SWAP_INT(&req->numAttribs);
+ __GLX_SWAP_INT_ARRAY( (int *)(req+1), nattr*2 );
+
+ return( __glXCreatePbuffer( cl, pc ) );
+}
+
+int __glXSwapDestroyPbuffer(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXDestroyPbufferReq *req = (xGLXDestroyPbufferReq *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->pbuffer);
+
+ return( __glXDestroyPbuffer( cl, (GLbyte *)pc ) );
+}
+
+int __glXSwapGetDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXGetDrawableAttributesReq *req = (xGLXGetDrawableAttributesReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+
+ return( __glXGetDrawableAttributes(cl, pc) );
+}
+
+int __glXSwapChangeDrawableAttributes(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXChangeDrawableAttributesReq *req = (xGLXChangeDrawableAttributesReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->drawable);
+ __GLX_SWAP_INT(&req->numAttribs);
+ __GLX_SWAP_INT_ARRAY( (int *)(req+1), req->numAttribs * 2 );
+
+ return( __glXChangeDrawableAttributes(cl, pc) );
+}
diff --git a/hw/dmx/glxProxy/glxcontext.h b/hw/dmx/glxProxy/glxcontext.h
new file mode 100644
index 0000000..f88093b
--- /dev/null
+++ b/hw/dmx/glxProxy/glxcontext.h
@@ -0,0 +1,111 @@
+#ifndef _GLX_context_h_
+#define _GLX_context_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+typedef struct __GLXcontextRec __GLXcontext;
+
+#include "GL/internal/glcore.h"
+
+struct __GLXcontextRec {
+ /*
+ ** list of context structs
+ */
+ struct __GLXcontextRec *last;
+ struct __GLXcontextRec *next;
+
+ /*
+ ** Pointer to screen info data for this context. This is set
+ ** when the context is created.
+ */
+ ScreenPtr pScreen;
+ __GLXscreenInfo *pGlxScreen;
+
+ /*
+ ** This context is created with respect to this visual.
+ */
+ VisualRec *pVisual;
+ __GLXvisualConfig *pGlxVisual;
+ __GLXFBConfig *pFBConfig;
+
+ /*
+ ** The XID of this context.
+ */
+ XID id;
+ XID *real_ids;
+
+ /*
+ ** The XID of the shareList context.
+ */
+ XID share_id;
+
+ /*
+ ** Visual id.
+ */
+ VisualID vid;
+ VisualID *real_vids;
+
+ /*
+ ** screen number.
+ */
+ GLint screen;
+
+ /*
+ ** Whether this context's ID still exists.
+ */
+ GLboolean idExists;
+
+ /*
+ ** Whether this context is current for some client.
+ */
+ GLboolean isCurrent;
+
+ /*
+ ** Buffers for feedback and selection.
+ */
+ GLfloat *feedbackBuf;
+ GLint feedbackBufSize; /* number of elements allocated */
+ GLuint *selectBuf;
+ GLint selectBufSize; /* number of elements allocated */
+
+ /*
+ ** Set only if current drawable is a glx pixmap.
+ */
+ __GLXpixmap *pGlxPixmap;
+ __GLXpixmap *pGlxReadPixmap;
+ __glXWindow *pGlxWindow;
+ __glXWindow *pGlxReadWindow;
+ __glXPbuffer *pGlxPbuffer;
+ __glXPbuffer *pGlxReadPbuffer;
+
+};
+
+#endif /* !__GLX_context_h__ */
diff --git a/hw/dmx/glxProxy/glxdrawable.h b/hw/dmx/glxProxy/glxdrawable.h
new file mode 100644
index 0000000..8f2d81e
--- /dev/null
+++ b/hw/dmx/glxProxy/glxdrawable.h
@@ -0,0 +1,66 @@
+#ifndef _GLX_drawable_h_
+#define _GLX_drawable_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+typedef struct {
+
+ DrawablePtr pDraw;
+ __GLXvisualConfig *pGlxVisual;
+ __GLXscreenInfo *pGlxScreen;
+ __GLXFBConfig *pFBConfig;
+ ScreenPtr pScreen;
+ Bool idExists;
+ int refcnt;
+ XID *be_xids;
+
+} __GLXpixmap;
+
+typedef struct {
+ DrawablePtr pDraw;
+ int type;
+ Bool idExists;
+ int refcnt; /* contexts bound */
+ __GLXFBConfig *pGlxFBConfig;
+ ScreenPtr pScreen;
+} __glXWindow;
+
+
+typedef struct {
+ __GLXscreenInfo *pGlxScreen;
+ __GLXFBConfig *pFBConfig;
+ ScreenPtr pScreen;
+ Bool idExists;
+ int refcnt;
+ XID *be_xids;
+} __glXPbuffer;
+
+#endif /* !__GLX_drawable_h__ */
diff --git a/hw/dmx/glxProxy/glxerror.h b/hw/dmx/glxProxy/glxerror.h
new file mode 100644
index 0000000..d84ec44
--- /dev/null
+++ b/hw/dmx/glxProxy/glxerror.h
@@ -0,0 +1,52 @@
+#ifndef _GLX_error_h_
+#define _GLX_error_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+/*
+** Error codes. These have the extension error base added to them
+** when the extension initializes.
+*/
+extern int __glXerrorBase;
+extern int __glXBadContext;
+extern int __glXBadContextState;
+extern int __glXBadDrawable;
+extern int __glXBadPixmap;
+extern int __glXBadCurrentWindow;
+extern int __glXBadContextTag;
+extern int __glXBadRenderRequest;
+extern int __glXBadLargeRequest;
+extern int __glXUnsupportedPrivateRequest;
+extern int __glXBadFBConfig;
+extern int __glXBadPbuffer;
+
+
+#endif
diff --git a/hw/dmx/glxProxy/glxext.c b/hw/dmx/glxProxy/glxext.c
new file mode 100644
index 0000000..7f63b6b
--- /dev/null
+++ b/hw/dmx/glxProxy/glxext.c
@@ -0,0 +1,496 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+
+#include "glxserver.h"
+#include <windowstr.h>
+#include <propertyst.h>
+#include <os.h>
+#include "g_disptab.h"
+#include "glxutil.h"
+#include "glxext.h"
+#include "glxvisuals.h"
+#include "micmap.h"
+#include "glxswap.h"
+
+/*
+** Stubs to satisfy miinitext.c references.
+*/
+typedef int __GLXprovider;
+__GLXprovider __glXDRISWRastProvider;
+void GlxPushProvider(__GLXprovider *provider) { }
+
+/*
+** Forward declarations.
+*/
+static int __glXSwapDispatch(ClientPtr);
+static int __glXDispatch(ClientPtr);
+
+/*
+** Called when the extension is reset.
+*/
+static void ResetExtension(ExtensionEntry* extEntry)
+{
+ __glXFlushContextCache();
+ __glXScreenReset();
+ SwapBarrierReset();
+}
+
+/*
+** Initialize the per-client context storage.
+*/
+static void ResetClientState(int clientIndex)
+{
+ __GLXclientState *cl = __glXClients[clientIndex];
+ Display **keep_be_displays;
+ int i;
+
+ free(cl->returnBuf);
+ free(cl->currentContexts);
+ free(cl->currentDrawables);
+ free(cl->largeCmdBuf);
+
+ for (i=0; i< screenInfo.numScreens; i++) {
+ if (cl->be_displays[i])
+ XCloseDisplay( cl->be_displays[i] );
+ }
+
+ keep_be_displays = cl->be_displays;
+ memset(cl, 0, sizeof(__GLXclientState));
+ cl->be_displays = keep_be_displays;
+
+ /*
+ ** By default, assume that the client supports
+ ** GLX major version 1 minor version 0 protocol.
+ */
+ cl->GLClientmajorVersion = 1;
+ cl->GLClientminorVersion = 0;
+ free(cl->GLClientextensions);
+
+ memset(cl->be_displays, 0, screenInfo.numScreens * sizeof(Display *));
+}
+
+
+/*
+** This procedure is called when the client who created the context goes
+** away OR when glXDestroyContext is called. In either case, all we do is
+** flag that the ID is no longer valid, and (maybe) free the context.
+** use.
+*/
+static int ContextGone(__GLXcontext* cx, XID id)
+{
+ cx->idExists = GL_FALSE;
+ if (!cx->isCurrent) {
+ __glXFreeContext(cx);
+ }
+
+ return True;
+}
+
+/*
+** Free a client's state.
+*/
+static int ClientGone(int clientIndex, XID id)
+{
+ __GLXcontext *cx;
+ __GLXclientState *cl = __glXClients[clientIndex];
+ int i;
+
+ if (cl) {
+ /*
+ ** Free all the contexts that are current for this client.
+ */
+ for (i=0; i < cl->numCurrentContexts; i++) {
+ cx = cl->currentContexts[i];
+ if (cx) {
+ cx->isCurrent = GL_FALSE;
+ if (!cx->idExists) {
+ __glXFreeContext(cx);
+ }
+ }
+ }
+ /*
+ ** Re-initialize the client state structure. Don't free it because
+ ** we'll probably get another client with this index and use the struct
+ ** again. There is a maximum of MAXCLIENTS of these structures.
+ */
+ ResetClientState(clientIndex);
+ }
+
+ return True;
+}
+
+/*
+** Free a GLX Pixmap.
+*/
+void __glXFreeGLXPixmap( __GLXpixmap *pGlxPixmap )
+{
+ if (!pGlxPixmap->idExists &&
+ !pGlxPixmap->refcnt) {
+
+ PixmapPtr pPixmap = (PixmapPtr) pGlxPixmap->pDraw;
+
+ /*
+ ** The DestroyPixmap routine should decrement the refcount and free
+ ** only if it's zero.
+ */
+ (*pGlxPixmap->pScreen->DestroyPixmap)(pPixmap);
+ free(pGlxPixmap->be_xids);
+ free(pGlxPixmap);
+ }
+
+}
+
+static int PixmapGone(__GLXpixmap *pGlxPixmap, XID id)
+{
+
+ pGlxPixmap->idExists = False;
+ __glXFreeGLXPixmap( pGlxPixmap );
+
+ return True;
+}
+
+void __glXFreeGLXWindow(__glXWindow *pGlxWindow)
+{
+ if (!pGlxWindow->idExists && !pGlxWindow->refcnt) {
+ WindowPtr pWindow = (WindowPtr) pGlxWindow->pDraw;
+ WindowPtr ret;
+
+ dixLookupResourceByType((pointer) &ret,
+ pWindow->drawable.id, RT_WINDOW,
+ NullClient, DixUnknownAccess);
+ if (ret == pWindow) {
+ (*pGlxWindow->pScreen->DestroyWindow)(pWindow);
+ }
+
+ free(pGlxWindow);
+ }
+}
+
+static void WindowGone(__glXWindow *pGlxWindow, XID id)
+{
+ pGlxWindow->idExists = False;
+ __glXFreeGLXWindow(pGlxWindow);
+}
+
+void __glXFreeGLXPbuffer(__glXPbuffer *pGlxPbuffer)
+{
+ if (!pGlxPbuffer->idExists && !pGlxPbuffer->refcnt) {
+ free(pGlxPbuffer->be_xids);
+ free(pGlxPbuffer);
+ }
+}
+
+static void PbufferGone(__glXPbuffer *pGlxPbuffer, XID id)
+{
+ pGlxPbuffer->idExists = False;
+ __glXFreeGLXPbuffer(pGlxPbuffer);
+}
+
+/*
+** Free a context.
+*/
+GLboolean __glXFreeContext(__GLXcontext *cx)
+{
+ if (cx->idExists || cx->isCurrent) return GL_FALSE;
+
+ free(cx->feedbackBuf);
+ free(cx->selectBuf);
+ free(cx->real_ids);
+ free(cx->real_vids);
+
+ if (cx->pGlxPixmap) {
+ /*
+ ** The previous drawable was a glx pixmap, release it.
+ */
+ cx->pGlxPixmap->refcnt--;
+ __glXFreeGLXPixmap( cx->pGlxPixmap );
+ cx->pGlxPixmap = 0;
+ }
+
+ if (cx->pGlxReadPixmap) {
+ /*
+ ** The previous drawable was a glx pixmap, release it.
+ */
+ cx->pGlxReadPixmap->refcnt--;
+ __glXFreeGLXPixmap( cx->pGlxReadPixmap );
+ cx->pGlxReadPixmap = 0;
+ }
+
+ if (cx->pGlxWindow) {
+ /*
+ ** The previous drawable was a glx window, release it.
+ */
+ cx->pGlxWindow->refcnt--;
+ __glXFreeGLXWindow( cx->pGlxWindow );
+ cx->pGlxWindow = 0;
+ }
+
+ if (cx->pGlxReadWindow) {
+ /*
+ ** The previous drawable was a glx window, release it.
+ */
+ cx->pGlxReadWindow->refcnt--;
+ __glXFreeGLXWindow( cx->pGlxReadWindow );
+ cx->pGlxReadWindow = 0;
+ }
+
+ free(cx);
+
+ if (cx == __glXLastContext) {
+ __glXFlushContextCache();
+ }
+
+ return GL_TRUE;
+}
+
+/*
+** Initialize the GLX extension.
+*/
+void GlxExtensionInit(void)
+{
+ ExtensionEntry *extEntry;
+ int i;
+ int glxSupported = 1;
+
+ /*
+ // do not initialize GLX extension if GLX is not supported
+ // by ALL back-end servers.
+ */
+ for (i=0; i<screenInfo.numScreens; i++) {
+ glxSupported &= (dmxScreens[i].glxMajorOpcode > 0);
+ }
+
+ if (!glxSupported || !dmxGLXProxy) {
+ return;
+ }
+
+ __glXContextRes = CreateNewResourceType((DeleteType)ContextGone,
+ "GLXContext");
+ __glXClientRes = CreateNewResourceType((DeleteType)ClientGone,
+ "GLXClient");
+ __glXPixmapRes = CreateNewResourceType((DeleteType)PixmapGone,
+ "GLXPixmap");
+ __glXWindowRes = CreateNewResourceType((DeleteType)WindowGone,
+ "GLXWindow");
+ __glXPbufferRes = CreateNewResourceType((DeleteType)PbufferGone,
+ "GLXPbuffer");
+
+ if (!__glXContextRes || !__glXClientRes || !__glXPixmapRes ||
+ !__glXWindowRes || !__glXPbufferRes)
+ return;
+
+ /*
+ ** Add extension to server extensions.
+ */
+ extEntry = AddExtension(GLX_EXTENSION_NAME, __GLX_NUMBER_EVENTS,
+ __GLX_NUMBER_ERRORS, __glXDispatch,
+ __glXSwapDispatch, ResetExtension,
+ StandardMinorOpcode);
+ if (!extEntry) {
+ FatalError("__glXExtensionInit: AddExtensions failed\n");
+ return;
+ }
+ /*
+ if (!AddExtensionAlias(GLX_EXTENSION_ALIAS, extEntry)) {
+ ErrorF("__glXExtensionInit: AddExtensionAlias failed\n");
+ return;
+ }
+ */
+
+ __glXerrorBase = extEntry->errorBase;
+ __glXBadContext = extEntry->errorBase + GLXBadContext;
+ __glXBadContextState = extEntry->errorBase + GLXBadContextState;
+ __glXBadDrawable = extEntry->errorBase + GLXBadDrawable;
+ __glXBadPixmap = extEntry->errorBase + GLXBadPixmap;
+ __glXBadContextTag = extEntry->errorBase + GLXBadContextTag;
+ __glXBadCurrentWindow = extEntry->errorBase + GLXBadCurrentWindow;
+ __glXBadRenderRequest = extEntry->errorBase + GLXBadRenderRequest;
+ __glXBadLargeRequest = extEntry->errorBase + GLXBadLargeRequest;
+ __glXUnsupportedPrivateRequest = extEntry->errorBase +
+ GLXUnsupportedPrivateRequest;
+ __glXBadFBConfig = extEntry->errorBase + GLXBadFBConfig;
+ __glXBadPbuffer = extEntry->errorBase + GLXBadPbuffer;
+
+ /*
+ ** Initialize table of client state. There is never a client 0.
+ */
+ for (i=1; i <= MAXCLIENTS; i++) {
+ __glXClients[i] = 0;
+ }
+
+ /*
+ ** Initialize screen specific data.
+ */
+ __glXScreenInit(screenInfo.numScreens);
+
+ /*
+ ** Initialize swap barrier support.
+ */
+ SwapBarrierInit();
+}
+
+/************************************************************************/
+
+Bool __glXCoreType(void)
+{
+ return 0;
+}
+
+/************************************************************************/
+
+void __glXFlushContextCache(void)
+{
+ __glXLastContext = 0;
+}
+
+/************************************************************************/
+
+/*
+** Top level dispatcher; all commands are executed from here down.
+*/
+static int __glXDispatch(ClientPtr client)
+{
+ REQUEST(xGLXSingleReq);
+ CARD8 opcode;
+ int (*proc)(__GLXclientState *cl, GLbyte *pc);
+ __GLXclientState *cl;
+
+ opcode = stuff->glxCode;
+ cl = __glXClients[client->index];
+ if (!cl) {
+ cl = calloc(1, sizeof(__GLXclientState));
+ __glXClients[client->index] = cl;
+ if (!cl) {
+ return BadAlloc;
+ }
+
+ cl->be_displays = calloc(screenInfo.numScreens, sizeof(Display *));
+ if (!cl->be_displays) {
+ free( cl );
+ return BadAlloc;
+ }
+ }
+
+ if (!cl->inUse) {
+ /*
+ ** This is first request from this client. Associate a resource
+ ** with the client so we will be notified when the client dies.
+ */
+ XID xid = FakeClientID(client->index);
+ if (!AddResource( xid, __glXClientRes, (pointer)(long)client->index)) {
+ return BadAlloc;
+ }
+ ResetClientState(client->index);
+ cl->largeCmdRequestsTotal = 0;
+ cl->inUse = GL_TRUE;
+ cl->client = client;
+ }
+
+ /*
+ ** Check for valid opcode.
+ */
+ if (opcode >= __GLX_SINGLE_TABLE_SIZE) {
+ return BadRequest;
+ }
+
+ /*
+ ** Use the opcode to index into the procedure table.
+ */
+ proc = __glXSingleTable[opcode];
+ return (*proc)(cl, (GLbyte *) stuff);
+}
+
+static int __glXSwapDispatch(ClientPtr client)
+{
+ REQUEST(xGLXSingleReq);
+ CARD8 opcode;
+ int (*proc)(__GLXclientState *cl, GLbyte *pc);
+ __GLXclientState *cl;
+
+ opcode = stuff->glxCode;
+ cl = __glXClients[client->index];
+ if (!cl) {
+ cl = calloc(1, sizeof(__GLXclientState));
+ __glXClients[client->index] = cl;
+ if (!cl) {
+ return BadAlloc;
+ }
+
+ cl->be_displays = calloc(screenInfo.numScreens, sizeof(Display *));
+ if (!cl->be_displays) {
+ free( cl );
+ return BadAlloc;
+ }
+ }
+
+ if (!cl->inUse) {
+ /*
+ ** This is first request from this client. Associate a resource
+ ** with the client so we will be notified when the client dies.
+ */
+ XID xid = FakeClientID(client->index);
+ if (!AddResource( xid, __glXClientRes, (pointer)(long)client->index)) {
+ return BadAlloc;
+ }
+ ResetClientState(client->index);
+ cl->inUse = GL_TRUE;
+ cl->client = client;
+ }
+
+ /*
+ ** Check for valid opcode.
+ */
+ if (opcode >= __GLX_SINGLE_TABLE_SIZE) {
+ return BadRequest;
+ }
+
+ /*
+ ** Use the opcode to index into the procedure table.
+ */
+ proc = __glXSwapSingleTable[opcode];
+ return (*proc)(cl, (GLbyte *) stuff);
+}
+
+int __glXNoSuchSingleOpcode(__GLXclientState *cl, GLbyte *pc)
+{
+ return BadRequest;
+}
+
+void __glXNoSuchRenderOpcode(GLbyte *pc)
+{
+ return;
+}
+
diff --git a/hw/dmx/glxProxy/glxext.h b/hw/dmx/glxProxy/glxext.h
new file mode 100644
index 0000000..361bcac
--- /dev/null
+++ b/hw/dmx/glxProxy/glxext.h
@@ -0,0 +1,78 @@
+#ifndef _glxext_h_
+#define _glxext_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+/*
+ * Added by VA Linux for XFree86 4.0.x
+ */
+typedef struct {
+ int type;
+ void (*resetExtension)(void);
+ Bool (*initVisuals)(
+ VisualPtr * visualp,
+ DepthPtr * depthp,
+ int * nvisualp,
+ int * ndepthp,
+ int * rootDepthp,
+ VisualID * defaultVisp,
+ unsigned long sizes,
+ int bitsPerRGB
+ );
+ void (*setVisualConfigs)(
+ int nconfigs,
+ __GLXvisualConfig *configs,
+ void **privates
+ );
+} __GLXextensionInfo;
+
+extern GLboolean __glXFreeContext(__GLXcontext *glxc);
+extern void __glXFlushContextCache(void);
+
+extern void __glXFreeGLXWindow(__glXWindow *pGlxWindow);
+extern void __glXFreeGLXPixmap( __GLXpixmap *pGlxPixmap );
+
+extern void __glXNoSuchRenderOpcode(GLbyte*);
+extern int __glXNoSuchSingleOpcode(__GLXclientState*, GLbyte*);
+extern void __glXErrorCallBack(GLenum code);
+extern void __glXClearErrorOccured(void);
+extern GLboolean __glXErrorOccured(void);
+extern void __glXResetLargeCommandStatus(__GLXclientState*);
+
+extern int __glXQueryContextInfoEXT(__GLXclientState *cl, GLbyte *pc);
+extern int __glXSwapQueryContextInfoEXT(__GLXclientState *cl, char *pc);
+
+extern void GlxExtensionInit(void);
+
+extern Bool __glXCoreType(void);
+
+#endif /* _glxext_h_ */
+
diff --git a/hw/dmx/glxProxy/glxfbconfig.c b/hw/dmx/glxProxy/glxfbconfig.c
new file mode 100644
index 0000000..a7741ff
--- /dev/null
+++ b/hw/dmx/glxProxy/glxfbconfig.c
@@ -0,0 +1,106 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxfbconfig.h"
+
+int AreFBConfigsMatch( __GLXFBConfig *c1, __GLXFBConfig *c2 )
+{
+ int match;
+
+ match = (
+ (c1->visualType == c2->visualType) &&
+ (c1->transparentType == c2->transparentType) &&
+ (c1->transparentRed == c2->transparentRed) &&
+ (c1->transparentGreen == c2->transparentGreen) &&
+ (c1->transparentBlue == c2->transparentBlue) &&
+ (c1->transparentAlpha == c2->transparentAlpha) &&
+ (c1->transparentIndex == c2->transparentIndex) &&
+ (c1->visualCaveat == c2->visualCaveat) &&
+ (c1->drawableType == c2->drawableType) &&
+ (c1->renderType == c2->renderType) &&
+#if 0
+ (c1->maxPbufferWidth == c2->maxPbufferWidth) &&
+ (c1->maxPbufferHeight == c2->maxPbufferHeight) &&
+ (c1->maxPbufferPixels == c2->maxPbufferPixels) &&
+ (c1->optimalPbufferWidth == c2->optimalPbufferWidth) &&
+ (c1->optimalPbufferHeight == c2->optimalPbufferHeight) &&
+#endif
+ (c1->visualSelectGroup == c2->visualSelectGroup) &&
+ (c1->rgbMode == c2->rgbMode) &&
+ (c1->colorIndexMode == c2->colorIndexMode) &&
+ (c1->doubleBufferMode == c2->doubleBufferMode) &&
+ (c1->stereoMode == c2->stereoMode) &&
+ (c1->haveAccumBuffer == c2->haveAccumBuffer) &&
+ (c1->haveDepthBuffer == c2->haveDepthBuffer) &&
+ (c1->haveStencilBuffer == c2->haveStencilBuffer) &&
+ (c1->accumRedBits == c2->accumRedBits) &&
+ (c1->accumGreenBits == c2->accumGreenBits) &&
+ (c1->accumBlueBits == c2->accumBlueBits) &&
+ (c1->accumAlphaBits == c2->accumAlphaBits) &&
+ (c1->depthBits == c2->depthBits) &&
+ (c1->stencilBits == c2->stencilBits) &&
+ (c1->indexBits == c2->indexBits) &&
+ (c1->redBits == c2->redBits) &&
+ (c1->greenBits == c2->greenBits) &&
+ (c1->blueBits == c2->blueBits) &&
+ (c1->alphaBits == c2->alphaBits) &&
+ (c1->redMask == c2->redMask) &&
+ (c1->greenMask == c2->greenMask) &&
+ (c1->blueMask == c2->blueMask) &&
+ (c1->alphaMask == c2->alphaMask) &&
+ (c1->multiSampleSize == c2->multiSampleSize) &&
+ (c1->nMultiSampleBuffers == c2->nMultiSampleBuffers) &&
+ (c1->maxAuxBuffers == c2->maxAuxBuffers) &&
+ (c1->level == c2->level) &&
+ (c1->extendedRange == c2->extendedRange) &&
+ (c1->minRed == c2->minRed) &&
+ (c1->maxRed == c2->maxRed) &&
+ (c1->minGreen == c2->minGreen) &&
+ (c1->maxGreen == c2->maxGreen) &&
+ (c1->minBlue == c2->minBlue) &&
+ (c1->maxBlue == c2->maxBlue) &&
+ (c1->minAlpha == c2->minAlpha) &&
+ (c1->maxAlpha == c2->maxAlpha)
+ );
+
+ return match;
+}
+
+__GLXFBConfig *FindMatchingFBConfig( __GLXFBConfig *c, __GLXFBConfig *configs, int nconfigs )
+{
+ int i;
+
+ for (i=0; i<nconfigs; i++) {
+ if ( AreFBConfigsMatch( c, configs + i ) )
+ return configs + i;
+ }
+
+ return 0;
+}
diff --git a/hw/dmx/glxProxy/glxfbconfig.h b/hw/dmx/glxProxy/glxfbconfig.h
new file mode 100644
index 0000000..c5e9404
--- /dev/null
+++ b/hw/dmx/glxProxy/glxfbconfig.h
@@ -0,0 +1,38 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifndef _GLXFBCONFIG_H
+
+#include <GL/glxint.h>
+
+int AreFBConfigsMatch( __GLXFBConfig *c1, __GLXFBConfig *c2 );
+__GLXFBConfig *FindMatchingFBConfig( __GLXFBConfig *c, __GLXFBConfig *configs, int nconfigs );
+
+#endif
diff --git a/hw/dmx/glxProxy/glxscreens.c b/hw/dmx/glxProxy/glxscreens.c
new file mode 100644
index 0000000..4cbac66
--- /dev/null
+++ b/hw/dmx/glxProxy/glxscreens.c
@@ -0,0 +1,371 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxlog.h"
+
+#include "glxserver.h"
+
+#include <windowstr.h>
+
+#include "glxfbconfig.h"
+
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+#endif
+
+__GLXscreenInfo *__glXActiveScreens;
+GLint __glXNumActiveScreens;
+
+__GLXFBConfig **__glXFBConfigs;
+int __glXNumFBConfigs;
+
+static char GLXServerVendorName[] = "SGI DMX/glxProxy";
+static char GLXServerVersion[64];
+static char GLXServerExtensions[] =
+ "GLX_EXT_visual_info "
+ "GLX_EXT_visual_rating "
+ "GLX_EXT_import_context "
+ "GLX_SGIX_fbconfig "
+ "GLX_SGI_make_current_read "
+ "GLX_SGI_swap_control "
+ ;
+
+static char ExtensionsString[1024];
+
+static void CalcServerVersionAndExtensions( void )
+{
+ int s;
+ xGLXQueryVersionReq *req;
+ xGLXQueryVersionReply reply;
+ char **be_extensions;
+ char *ext;
+ char *denied_extensions;
+
+ /*
+ * set the server glx version to be the minimum version
+ * supported by all back-end servers
+ */
+ __glXVersionMajor = 0;
+ __glXVersionMinor = 0;
+ for (s=0; s<__glXNumActiveScreens; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = dmxScreen->beDisplay;
+
+ /* Send the glXQueryVersion request */
+ LockDisplay(dpy);
+ GetReq(GLXQueryVersion,req);
+ req->reqType = dmxScreen->glxMajorOpcode;
+ req->glxCode = X_GLXQueryVersion;
+ req->majorVersion = GLX_SERVER_MAJOR_VERSION;
+ req->minorVersion = GLX_SERVER_MINOR_VERSION;
+ _XReply(dpy, (xReply*) &reply, 0, False);
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ if (s == 0) {
+ __glXVersionMajor = reply.majorVersion;
+ __glXVersionMinor = reply.minorVersion;
+ }
+ else {
+ if (reply.majorVersion < __glXVersionMajor) {
+ __glXVersionMajor = reply.majorVersion;
+ __glXVersionMinor = reply.minorVersion;
+ }
+ else if ( (reply.majorVersion == __glXVersionMajor) &&
+ (reply.minorVersion < __glXVersionMinor) ) {
+ __glXVersionMinor = reply.minorVersion;
+ }
+ }
+
+ }
+
+ if (GLX_SERVER_MAJOR_VERSION < __glXVersionMajor) {
+ __glXVersionMajor = GLX_SERVER_MAJOR_VERSION;
+ __glXVersionMinor = GLX_SERVER_MINOR_VERSION;
+ }
+ else if ( (GLX_SERVER_MAJOR_VERSION == __glXVersionMajor) &&
+ (GLX_SERVER_MINOR_VERSION < __glXVersionMinor) ) {
+ __glXVersionMinor = GLX_SERVER_MINOR_VERSION;
+ }
+
+ sprintf(GLXServerVersion, "%d.%d DMX %d back-end server(s)",
+ __glXVersionMajor, __glXVersionMinor, __glXNumActiveScreens );
+ /*
+ * set the ExtensionsString to the minimum extensions string
+ */
+ ExtensionsString[0] = '\0';
+
+ /*
+ * read extensions strings of all back-end servers
+ */
+ be_extensions = (char **)malloc( __glXNumActiveScreens * sizeof(char *) );
+ if (!be_extensions)
+ return;
+
+ for (s=0; s<__glXNumActiveScreens; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = dmxScreen->beDisplay;
+ xGLXQueryServerStringReq *req;
+ xGLXQueryServerStringReply reply;
+ int length, numbytes, slop;
+
+ /* Send the glXQueryServerString request */
+ LockDisplay(dpy);
+ GetReq(GLXQueryServerString,req);
+ req->reqType = dmxScreen->glxMajorOpcode;
+ req->glxCode = X_GLXQueryServerString;
+ req->screen = DefaultScreen(dpy);
+ req->name = GLX_EXTENSIONS;
+ _XReply(dpy, (xReply*) &reply, 0, False);
+
+ length = (int)reply.length;
+ numbytes = (int)reply.n;
+ slop = numbytes * __GLX_SIZE_INT8 & 3;
+ be_extensions[s] = (char *)malloc(numbytes);
+ if (!be_extensions[s]) {
+ /* Throw data on the floor */
+ _XEatData(dpy, length);
+ } else {
+ _XRead(dpy, (char *)be_extensions[s], numbytes);
+ if (slop) _XEatData(dpy,4-slop);
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ /*
+ * extensions string will include only extensions that our
+ * server supports as well as all back-end servers supports.
+ * extensions that are in the DMX_DENY_EXTENSIONS string will
+ * not be supported.
+ */
+ denied_extensions = getenv("DMX_DENY_GLX_EXTENSIONS");
+ ext = strtok(GLXServerExtensions, " ");
+ while( ext ) {
+ int supported = 1;
+
+ if (denied_extensions && strstr(denied_extensions, ext)) {
+ supported = 0;
+ }
+ else {
+ for (s=0; s<__glXNumActiveScreens && supported; s++) {
+ if ( !strstr(be_extensions[s], ext) ) {
+ supported = 0;
+ }
+ }
+ }
+
+ if (supported) {
+ strcat(ExtensionsString, ext);
+ strcat(ExtensionsString, " ");
+ }
+
+ ext = strtok(NULL, " ");
+ }
+
+ /*
+ * release temporary storage
+ */
+ for (s=0; s<__glXNumActiveScreens; s++) {
+ free(be_extensions[s]);
+ }
+ free( be_extensions );
+
+ if (dmxGLXSwapGroupSupport) {
+ if (!denied_extensions ||
+ !strstr(denied_extensions, "GLX_SGIX_swap_group")) {
+ strcat(ExtensionsString, "GLX_SGIX_swap_group");
+ if (!denied_extensions ||
+ !strstr(denied_extensions, "GLX_SGIX_swap_barrier")) {
+ strcat(ExtensionsString, " GLX_SGIX_swap_barrier");
+ }
+ }
+ }
+
+}
+
+void __glXScreenInit(GLint numscreens)
+{
+ int s;
+ int c;
+ DMXScreenInfo *dmxScreen0 = &dmxScreens[0];
+ __glXNumActiveScreens = numscreens;
+
+
+ CalcServerVersionAndExtensions();
+
+
+ __glXFBConfigs = NULL;
+ __glXNumFBConfigs = 0;
+
+ if ( (__glXVersionMajor == 1 && __glXVersionMinor >= 3) ||
+ (__glXVersionMajor > 1) ||
+ ( strstr(ExtensionsString, "GLX_SGIX_fbconfig") ) ) {
+
+ /*
+ // Initialize FBConfig info.
+ // find the set of FBConfigs that are present on all back-end
+ // servers - only those configs will be supported
+ */
+ __glXFBConfigs = (__GLXFBConfig **)malloc( dmxScreen0->numFBConfigs *
+ (numscreens+1) * sizeof(__GLXFBConfig *) );
+ __glXNumFBConfigs = 0;
+
+ for (c=0; c<dmxScreen0->numFBConfigs; c++) {
+ __GLXFBConfig *cfg = NULL;
+
+ if (numscreens > 1) {
+ for (s=1; s<numscreens; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+
+ cfg = FindMatchingFBConfig( &dmxScreen0->fbconfigs[c],
+ dmxScreen->fbconfigs,
+ dmxScreen->numFBConfigs );
+ __glXFBConfigs[ __glXNumFBConfigs * (numscreens+1) + s + 1 ] = cfg;
+ if (!cfg) {
+ dmxLog(dmxInfo,"screen0 FBConfig 0x%x is missing on screen#%d\n", dmxScreen0->fbconfigs[c].id, s);
+ break;
+ }
+ else {
+ dmxLog(dmxInfo,"screen0 FBConfig 0x%x matched to 0x%x on screen#%d\n", dmxScreen0->fbconfigs[c].id, cfg->id, s);
+ }
+ }
+ }
+ else {
+ cfg = &dmxScreen0->fbconfigs[c];
+ }
+
+ if (cfg) {
+
+ /* filter out overlay visuals */
+ if (cfg->level == 0) {
+ __GLXFBConfig *proxy_cfg;
+
+ __glXFBConfigs[ __glXNumFBConfigs * (numscreens+1) + 1 ] =
+ &dmxScreen0->fbconfigs[c];
+
+ proxy_cfg = malloc( sizeof(__GLXFBConfig) );
+ memcpy( proxy_cfg, cfg, sizeof(__GLXFBConfig) );
+ proxy_cfg->id = FakeClientID(0);
+ /* visual will be associated later in __glXGetFBConfigs */
+ proxy_cfg->associatedVisualId = (unsigned int)-1;
+
+ __glXFBConfigs[ __glXNumFBConfigs * (numscreens+1) + 0 ] = proxy_cfg;
+
+ __glXNumFBConfigs++;
+ }
+
+ }
+
+ }
+
+ }
+
+}
+
+void __glXScreenReset(void)
+{
+ __glXNumActiveScreens = 0;
+}
+
+char *__glXGetServerString( unsigned int name )
+{
+ char *ret = NULL;
+
+ switch( name) {
+
+ case GLX_VENDOR:
+ ret = GLXServerVendorName;
+ break;
+
+ case GLX_VERSION:
+ ret = GLXServerVersion;
+ break;
+
+ case GLX_EXTENSIONS:
+ ret = ExtensionsString;
+ break;
+
+ default:
+ break;
+ }
+
+ return ret;
+
+}
+
+
+__GLXFBConfig *glxLookupFBConfig( GLXFBConfigID id )
+{
+ int i,j;
+
+ for (i=0, j=0; i<__glXNumFBConfigs; i++,j+=(__glXNumActiveScreens+1) ) {
+ if ( __glXFBConfigs[j]->id == id)
+ return __glXFBConfigs[j];
+ }
+
+ return NULL;
+}
+
+__GLXFBConfig *glxLookupFBConfigByVID( VisualID vid )
+{
+ int i,j;
+
+ for (i=0, j=0; i<__glXNumFBConfigs; i++,j+=(__glXNumActiveScreens+1) ) {
+ if ( __glXFBConfigs[j]->associatedVisualId == vid)
+ return __glXFBConfigs[j];
+ }
+
+ return NULL;
+}
+
+__GLXFBConfig *glxLookupBackEndFBConfig( GLXFBConfigID id, int screen )
+{
+ int i;
+ int j;
+
+ for (i=0, j=0; i<__glXNumFBConfigs; i++,j+=(__glXNumActiveScreens+1) ) {
+ if ( __glXFBConfigs[j]->id == id)
+ return __glXFBConfigs[j+screen+1];
+ }
+
+ return NULL;
+
+}
+
+int glxIsExtensionSupported( char *ext )
+{
+ return( strstr(ExtensionsString, ext) != NULL );
+}
diff --git a/hw/dmx/glxProxy/glxscreens.h b/hw/dmx/glxProxy/glxscreens.h
new file mode 100644
index 0000000..a57c387
--- /dev/null
+++ b/hw/dmx/glxProxy/glxscreens.h
@@ -0,0 +1,57 @@
+#ifndef _GLX_screens_h_
+#define _GLX_screens_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "GL/internal/glcore.h"
+
+
+
+typedef struct {
+
+ __GLXvisualConfig *pGlxVisual;
+ GLint numVisuals;
+ GLint numGLXVisuals;
+ GLint *isGLXvis;
+
+ char *GLXvendor;
+ char *GLXversion;
+ char *GLXextensions;
+
+} __GLXscreenInfo;
+
+
+extern void __glXScreenInit(GLint);
+extern void __glXScreenReset(void);
+
+extern char *__glXGetServerString( unsigned int name );
+
+#endif /* !__GLX_screens_h__ */
diff --git a/hw/dmx/glxProxy/glxserver.h b/hw/dmx/glxProxy/glxserver.h
new file mode 100644
index 0000000..17adce4
--- /dev/null
+++ b/hw/dmx/glxProxy/glxserver.h
@@ -0,0 +1,317 @@
+#ifndef _GLX_server_h_
+#define _GLX_server_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "dmx.h"
+
+#include <misc.h>
+#include <dixstruct.h>
+#include <pixmapstr.h>
+#include <gcstruct.h>
+#include <extnsionst.h>
+#include <resource.h>
+#include <scrnintstr.h>
+
+
+/*
+** The X header misc.h defines these math functions.
+*/
+#undef abs
+#undef fabs
+
+#define GL_GLEXT_PROTOTYPES /* we want prototypes */
+#include <GL/gl.h>
+#include <GL/glxproto.h>
+#include <GL/glxint.h>
+
+#include "glxscreens.h"
+#include "glxdrawable.h"
+#include "glxcontext.h"
+#include "glxerror.h"
+
+
+#define GLX_SERVER_MAJOR_VERSION 1
+#define GLX_SERVER_MINOR_VERSION 3
+
+#ifndef True
+#define True 1
+#endif
+#ifndef False
+#define False 0
+#endif
+
+/*
+** GLX resources.
+typedef XID GLXContextID;
+typedef XID GLXPixmap;
+typedef XID GLXDrawable;
+typedef XID GLXWindow;
+typedef XID GLXPbuffer;
+
+typedef struct __GLXcontextRec *GLXContext;
+*/
+typedef struct __GLXclientStateRec __GLXclientState;
+
+extern __GLXscreenInfo *__glXActiveScreens;
+extern GLint __glXNumActiveScreens;
+
+/************************************************************************/
+
+/*
+** The last context used (from the server's persective) is cached.
+*/
+extern __GLXcontext *__glXLastContext;
+extern __GLXcontext *__glXForceCurrent(__GLXclientState*, GLXContextTag, int*);
+
+/*
+** Macros to set, unset, and retrieve the flag that says whether a context
+** has unflushed commands.
+*/
+#define __GLX_NOTE_UNFLUSHED_CMDS(glxc) glxc->hasUnflushedCommands = GL_TRUE
+#define __GLX_NOTE_FLUSHED_CMDS(glxc) glxc->hasUnflushedCommands = GL_FALSE
+#define __GLX_HAS_UNFLUSHED_CMDS(glxc) (glxc->hasUnflushedCommands)
+
+/************************************************************************/
+
+typedef struct {
+ int elem_size; /* element size in bytes */
+ int nelems; /* number of elements to swap */
+ void (*swapfunc)(GLbyte *pc);
+} __GLXRenderSwapInfo;
+
+/*
+** State kept per client.
+*/
+struct __GLXclientStateRec {
+ /*
+ ** Whether this structure is currently being used to support a client.
+ */
+ Bool inUse;
+
+ /*
+ ** Buffer for returned data.
+ */
+ GLbyte *returnBuf;
+ GLint returnBufSize;
+
+ /*
+ ** Keep a list of all the contexts that are current for this client's
+ ** threads.
+ */
+ __GLXcontext **currentContexts;
+ DrawablePtr *currentDrawables;
+ GLint numCurrentContexts;
+
+ /* Back pointer to X client record */
+ ClientPtr client;
+
+ int GLClientmajorVersion;
+ int GLClientminorVersion;
+ char *GLClientextensions;
+
+ GLXContextTag *be_currentCTag;
+ Display **be_displays;
+
+ /*
+ ** Keep track of large rendering commands, which span multiple requests.
+ */
+ GLint largeCmdBytesSoFar; /* bytes received so far */
+ GLint largeCmdBytesTotal; /* total bytes expected */
+ GLint largeCmdRequestsSoFar; /* requests received so far */
+ GLint largeCmdRequestsTotal; /* total requests expected */
+ void (*largeCmdRequestsSwapProc)(GLbyte *);
+ __GLXRenderSwapInfo *largeCmdRequestsSwap_info;
+ GLbyte *largeCmdBuf;
+ GLint largeCmdBufSize;
+ GLint largeCmdMaxReqDataSize;
+
+};
+
+extern __GLXclientState *__glXClients[];
+
+/************************************************************************/
+
+/*
+** Dispatch tables.
+*/
+typedef void (*__GLXdispatchRenderProcPtr)(GLbyte *);
+typedef int (*__GLXdispatchSingleProcPtr)(__GLXclientState *, GLbyte *);
+typedef int (*__GLXdispatchVendorPrivProcPtr)(__GLXclientState *, GLbyte *);
+extern __GLXdispatchSingleProcPtr __glXSingleTable[];
+extern __GLXdispatchVendorPrivProcPtr __glXVendorPrivTable_EXT[];
+extern __GLXdispatchSingleProcPtr __glXSwapSingleTable[];
+extern __GLXdispatchVendorPrivProcPtr __glXSwapVendorPrivTable_EXT[];
+extern __GLXdispatchRenderProcPtr __glXSwapRenderTable[];
+
+extern __GLXRenderSwapInfo __glXSwapRenderTable_EXT[];
+
+/*
+ * Dispatch for GLX commands.
+ */
+typedef int (*__GLXprocPtr)(__GLXclientState *, char *pc);
+extern __GLXprocPtr __glXProcTable[];
+
+/*
+ * Tables for computing the size of each rendering command.
+ */
+typedef struct {
+ int bytes;
+ int (*varsize)(GLbyte *pc, Bool swap);
+} __GLXrenderSizeData;
+extern __GLXrenderSizeData __glXRenderSizeTable[];
+extern __GLXrenderSizeData __glXRenderSizeTable_EXT[];
+
+/************************************************************************/
+
+/*
+** X resources.
+*/
+extern RESTYPE __glXContextRes;
+extern RESTYPE __glXClientRes;
+extern RESTYPE __glXPixmapRes;
+extern RESTYPE __glXDrawableRes;
+extern RESTYPE __glXWindowRes;
+extern RESTYPE __glXPbufferRes;
+
+/************************************************************************/
+
+/*
+** Prototypes.
+*/
+
+
+extern char *__glXcombine_strings(const char *, const char *);
+
+extern void __glXDisp_DrawArrays(GLbyte*);
+extern void __glXDispSwap_DrawArrays(GLbyte*);
+
+
+/*
+** Routines for sending swapped replies.
+*/
+
+extern void __glXSwapMakeCurrentReply(ClientPtr client,
+ xGLXMakeCurrentReadSGIReply *reply);
+
+extern void __glXSwapIsDirectReply(ClientPtr client,
+ xGLXIsDirectReply *reply);
+extern void __glXSwapQueryVersionReply(ClientPtr client,
+ xGLXQueryVersionReply *reply);
+extern void __glXSwapQueryContextInfoEXTReply(ClientPtr client,
+ xGLXQueryContextInfoEXTReply *reply,
+ int *buf);
+extern void glxSwapQueryExtensionsStringReply(ClientPtr client,
+ xGLXQueryExtensionsStringReply *reply, char *buf);
+extern void glxSwapQueryServerStringReply(ClientPtr client,
+ xGLXQueryServerStringReply *reply, char *buf);
+extern void __glXSwapQueryContextReply(ClientPtr client,
+ xGLXQueryContextReply *reply, int *buf);
+extern void __glXSwapGetDrawableAttributesReply(ClientPtr client,
+ xGLXGetDrawableAttributesReply *reply, int *buf);
+extern void __glXSwapQueryMaxSwapBarriersSGIXReply(ClientPtr client,
+ xGLXQueryMaxSwapBarriersSGIXReply *reply);
+
+/*
+ * Routines for computing the size of variably-sized rendering commands.
+ */
+
+extern int __glXTypeSize(GLenum enm);
+extern int __glXImageSize(GLenum format, GLenum type, GLsizei w, GLsizei h,
+ GLint rowLength, GLint skipRows, GLint alignment);
+extern int __glXImage3DSize(GLenum format, GLenum type,
+ GLsizei w, GLsizei h, GLsizei d,
+ GLint imageHeight, GLint rowLength,
+ GLint skipImages, GLint skipRows,
+ GLint alignment);
+
+extern int __glXCallListsReqSize(GLbyte *pc, Bool swap);
+extern int __glXBitmapReqSize(GLbyte *pc, Bool swap);
+extern int __glXFogfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXFogivReqSize(GLbyte *pc, Bool swap);
+extern int __glXLightfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXLightivReqSize(GLbyte *pc, Bool swap);
+extern int __glXLightModelfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXLightModelivReqSize(GLbyte *pc, Bool swap);
+extern int __glXMaterialfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXMaterialivReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexParameterfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexParameterivReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexImage1DReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexImage2DReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexEnvfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexEnvivReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexGendvReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexGenfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexGenivReqSize(GLbyte *pc, Bool swap);
+extern int __glXMap1dReqSize(GLbyte *pc, Bool swap);
+extern int __glXMap1fReqSize(GLbyte *pc, Bool swap);
+extern int __glXMap2dReqSize(GLbyte *pc, Bool swap);
+extern int __glXMap2fReqSize(GLbyte *pc, Bool swap);
+extern int __glXPixelMapfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXPixelMapuivReqSize(GLbyte *pc, Bool swap);
+extern int __glXPixelMapusvReqSize(GLbyte *pc, Bool swap);
+extern int __glXDrawPixelsReqSize(GLbyte *pc, Bool swap);
+extern int __glXDrawArraysSize(GLbyte *pc, Bool swap);
+extern int __glXPrioritizeTexturesReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexSubImage1DReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexSubImage2DReqSize(GLbyte *pc, Bool swap);
+extern int __glXTexImage3DReqSize(GLbyte *pc, Bool swap );
+extern int __glXTexSubImage3DReqSize(GLbyte *pc, Bool swap);
+extern int __glXConvolutionFilter1DReqSize(GLbyte *pc, Bool swap);
+extern int __glXConvolutionFilter2DReqSize(GLbyte *pc, Bool swap);
+extern int __glXConvolutionParameterivReqSize(GLbyte *pc, Bool swap);
+extern int __glXConvolutionParameterfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXSeparableFilter2DReqSize(GLbyte *pc, Bool swap);
+extern int __glXColorTableReqSize(GLbyte *pc, Bool swap);
+extern int __glXColorSubTableReqSize(GLbyte *pc, Bool swap);
+extern int __glXColorTableParameterfvReqSize(GLbyte *pc, Bool swap);
+extern int __glXColorTableParameterivReqSize(GLbyte *pc, Bool swap);
+
+/*
+ * Routines for computing the size of returned data.
+ */
+extern int __glXConvolutionParameterivSize(GLenum pname);
+extern int __glXConvolutionParameterfvSize(GLenum pname);
+extern int __glXColorTableParameterfvSize(GLenum pname);
+extern int __glXColorTableParameterivSize(GLenum pname);
+
+extern void __glXFreeGLXWindow(__glXWindow *pGlxWindow);
+extern void __glXFreeGLXPbuffer(__glXPbuffer *pGlxPbuffer);
+
+extern int __glXVersionMajor;
+extern int __glXVersionMinor;
+
+#define __GLX_IS_VERSION_SUPPORTED(major,minor) \
+ ( (__glXVersionMajor > (major)) || \
+ ((__glXVersionMajor == (major)) && (__glXVersionMinor >= (minor))) )
+
+#endif /* !__GLX_server_h__ */
diff --git a/hw/dmx/glxProxy/glxsingle.c b/hw/dmx/glxProxy/glxsingle.c
new file mode 100644
index 0000000..33cc612
--- /dev/null
+++ b/hw/dmx/glxProxy/glxsingle.c
@@ -0,0 +1,1016 @@
+/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED */
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+#include "dmxfont.h"
+#include "dmxcb.h"
+
+#include "glxserver.h"
+#include "glxext.h"
+#include "g_disptab.h"
+/* #include "g_disptab_EXT.h" */
+#include "unpack.h"
+#include "glxutil.h"
+
+#include "GL/glxproto.h"
+
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+#endif
+
+/*
+ * GetReqSingle - this is the equivalent of GetReq macro
+ * from Xlibint.h but it does not set the reqType field (the opcode).
+ * this is because the GL single opcodes has different naming convension
+ * the other X opcodes (ie. X_GLsop_GetFloatv).
+ */
+#if (defined(__STDC__) && !defined(UNIXCPP)) || defined(ANSICPP)
+#define GetReqSingle(name, req) \
+ WORD64ALIGN\
+ if ((dpy->bufptr + SIZEOF(x##name##Req)) > dpy->bufmax)\
+ _XFlush(dpy);\
+ req = (x##name##Req *)(dpy->last_req = dpy->bufptr);\
+ req->length = (SIZEOF(x##name##Req))>>2;\
+ dpy->bufptr += SIZEOF(x##name##Req);\
+ dpy->request++
+
+#else /* non-ANSI C uses empty comment instead of "##" for token concatenation */
+#define GetReqSingle(name, req) \
+ WORD64ALIGN\
+ if ((dpy->bufptr + SIZEOF(x/**/name/**/Req)) > dpy->bufmax)\
+ _XFlush(dpy);\
+ req = (x/**/name/**/Req *)(dpy->last_req = dpy->bufptr);\
+ req->length = (SIZEOF(x/**/name/**/Req))>>2;\
+ dpy->bufptr += SIZEOF(x/**/name/**/Req);\
+ dpy->request++
+#endif
+
+#define X_GLXSingle 0 /* needed by GetReqExtra */
+
+extern Display *GetBackEndDisplay( __GLXclientState *cl, int s );
+extern int GetCurrentBackEndTag(__GLXclientState *cl, GLXContextTag tag, int s);
+
+static int swap_vec_element_size = 0;
+
+static void SendSwappedReply( ClientPtr client,
+ xGLXSingleReply *reply,
+ char *buf,
+ int buf_size )
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->retval);
+ __GLX_SWAP_INT(&reply->size);
+
+ if ( (buf_size == 0) && (swap_vec_element_size > 0) ) {
+ /*
+ * the reply has single component - need to swap pad3
+ */
+ if (swap_vec_element_size == 2) {
+ __GLX_SWAP_SHORT(&reply->pad3);
+ }
+ else if (swap_vec_element_size == 4) {
+ __GLX_SWAP_INT(&reply->pad3);
+ __GLX_SWAP_INT(&reply->pad4); /* some requests use also pad4
+ * i.e GetConvolutionFilter
+ */
+ }
+ else if (swap_vec_element_size == 8) {
+ __GLX_SWAP_DOUBLE(&reply->pad3);
+ }
+ }
+ else if ( (buf_size > 0) && (swap_vec_element_size > 0) ) {
+ /*
+ * the reply has vector of elements which needs to be swapped
+ */
+ int vsize = buf_size / swap_vec_element_size;
+ char *p = buf;
+ int i;
+
+ for (i=0; i<vsize; i++) {
+ if (swap_vec_element_size == 2) {
+ __GLX_SWAP_SHORT(p);
+ }
+ else if (swap_vec_element_size == 4) {
+ __GLX_SWAP_INT(p);
+ }
+ else if (swap_vec_element_size == 8) {
+ __GLX_SWAP_DOUBLE(p);
+ }
+
+ p += swap_vec_element_size;
+ }
+
+ /*
+ * swap pad words as well - for case that some single reply uses
+ * them as well
+ */
+ __GLX_SWAP_INT(&reply->pad3);
+ __GLX_SWAP_INT(&reply->pad4);
+ __GLX_SWAP_INT(&reply->pad5);
+ __GLX_SWAP_INT(&reply->pad6);
+
+ }
+
+ WriteToClient(client, sizeof(xGLXSingleReply),(char *)reply);
+ if (buf_size > 0)
+ WriteToClient(client, buf_size, (char *)buf);
+
+}
+
+int __glXForwardSingleReq( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ xGLXSingleReq *be_req;
+ __GLXcontext *glxc;
+ int from_screen = 0;
+ int to_screen = 0;
+ int buf_size;
+ int s;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXSingleReq;
+ buf_size = (req->length << 2) - sz_xGLXSingleReq;
+
+ /*
+ * just forward the request to back-end server(s)
+ */
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReqSingle(GLXSingle,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = req->glxCode;
+ be_req->length = req->length;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ if (buf_size > 0)
+ _XSend(dpy, (const char *)pc, buf_size);
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ if (req->glxCode == X_GLsop_Flush) {
+ XFlush(dpy);
+ }
+
+ }
+
+ return Success;
+}
+
+int __glXForwardPipe0WithReply( __GLXclientState *cl, GLbyte *pc )
+{
+ ClientPtr client = cl->client;
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ xGLXSingleReq *be_req;
+ xGLXSingleReply reply;
+ xGLXSingleReply be_reply;
+ __GLXcontext *glxc;
+ int buf_size;
+ char *be_buf = NULL;
+ int be_buf_size;
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return __glXBadContext;
+ }
+
+ pc += sz_xGLXSingleReq;
+ buf_size = (req->length << 2) - sz_xGLXSingleReq;
+
+ dmxScreen = &dmxScreens[glxc->pScreen->myNum];
+ dpy = GetBackEndDisplay(cl, glxc->pScreen->myNum);
+
+ /*
+ * send the request to the first back-end server
+ */
+ LockDisplay(dpy);
+ GetReqSingle(GLXSingle,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = req->glxCode;
+ be_req->length = req->length;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,glxc->pScreen->myNum);
+ if (buf_size > 0)
+ _XSend(dpy, (const char *)pc, buf_size);
+
+ /*
+ * get the reply from the back-end server
+ */
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+ be_buf_size = be_reply.length << 2;
+ if (be_buf_size > 0) {
+ be_buf = (char *)malloc( be_buf_size );
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatData(dpy, be_buf_size);
+ return BadAlloc;
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ /*
+ * send the reply to the client
+ */
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.length = be_reply.length;
+ reply.retval = be_reply.retval;
+ reply.size = be_reply.size;
+ reply.pad3 = be_reply.pad3;
+ reply.pad4 = be_reply.pad4;
+
+ if (client->swapped) {
+ SendSwappedReply( client, &reply, be_buf, be_buf_size );
+ }
+ else {
+ WriteToClient(client, sizeof(xGLXSingleReply),(char *)&reply);
+ if (be_buf_size > 0)
+ WriteToClient(client, be_buf_size, (char *)be_buf);
+ }
+
+ if (be_buf_size > 0) free(be_buf);
+
+ return Success;
+}
+
+int __glXForwardAllWithReply( __GLXclientState *cl, GLbyte *pc )
+{
+ ClientPtr client = cl->client;
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ xGLXSingleReq *be_req;
+ xGLXSingleReply reply;
+ xGLXSingleReply be_reply;
+ __GLXcontext *glxc;
+ int buf_size;
+ char *be_buf = NULL;
+ int be_buf_size = 0;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXSingleReq;
+ buf_size = (req->length << 2) - sz_xGLXSingleReq;
+
+ /*
+ * send the request to the first back-end server(s)
+ */
+ for (s=to_screen; s>=from_screen; s--) {
+ dmxScreen = &dmxScreens[s];
+ dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReqSingle(GLXSingle,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = req->glxCode;
+ be_req->length = req->length;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ if (buf_size > 0)
+ _XSend(dpy, (const char *)pc, buf_size);
+
+ /*
+ * get the reply from the back-end server
+ */
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+ be_buf_size = be_reply.length << 2;
+ if (be_buf_size > 0) {
+ be_buf = (char *)malloc( be_buf_size );
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatData(dpy, be_buf_size);
+ return BadAlloc;
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ if (s > from_screen && be_buf_size > 0) {
+ free(be_buf);
+ }
+ }
+
+ /*
+ * send the reply to the client
+ */
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.length = be_reply.length;
+ reply.retval = be_reply.retval;
+ reply.size = be_reply.size;
+ reply.pad3 = be_reply.pad3;
+ reply.pad4 = be_reply.pad4;
+
+ if (client->swapped) {
+ SendSwappedReply( client, &reply, be_buf, be_buf_size );
+ }
+ else {
+ WriteToClient(client, sizeof(xGLXSingleReply),(char *)&reply);
+ if (be_buf_size > 0)
+ WriteToClient(client, be_buf_size, (char *)be_buf);
+ }
+
+ if (be_buf_size > 0) free(be_buf);
+
+ return Success;
+}
+
+int __glXForwardSingleReqSwap( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 0;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXForwardSingleReq( cl, pc ) );
+}
+
+int __glXForwardPipe0WithReplySwap( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 0;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXForwardPipe0WithReplySwapsv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 2;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXForwardPipe0WithReplySwapiv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 4;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXForwardPipe0WithReplySwapdv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 8;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXForwardAllWithReplySwap( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 0;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardAllWithReply( cl, pc ) );
+}
+
+int __glXForwardAllWithReplySwapsv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 2;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardAllWithReply( cl, pc ) );
+}
+
+int __glXForwardAllWithReplySwapiv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 4;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardAllWithReply( cl, pc ) );
+}
+
+int __glXForwardAllWithReplySwapdv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 8;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXSingleReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXSingleReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+
+ return( __glXForwardAllWithReply( cl, pc ) );
+}
+
+static GLint __glReadPixels_size(GLenum format, GLenum type, GLint w, GLint h,
+ int *elementbits_return, int *rowbytes_return )
+{
+ GLint elements, esize;
+ GLint rowsize, padding;
+
+ if (w < 0 || h < 0) {
+ return -1;
+ }
+ switch (format) {
+ case GL_COLOR_INDEX:
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_COMPONENT:
+ elements = 1;
+ break;
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ elements = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ elements = 2;
+ break;
+ case GL_RGB:
+ case GL_BGR:
+ elements = 3;
+ break;
+ case GL_RGBA:
+ case GL_BGRA:
+ case GL_ABGR_EXT:
+ elements = 4;
+ break;
+ default:
+ return -1;
+ }
+ /*
+ ** According to the GLX protocol, each row must be padded to a multiple of
+ ** 4 bytes. 4 bytes also happens to be the default alignment in the pixel
+ ** store modes of the GL.
+ */
+ switch (type) {
+ case GL_BITMAP:
+ if (format == GL_COLOR_INDEX || format == GL_STENCIL_INDEX) {
+ rowsize = ((w * elements)+7)/8;
+ padding = rowsize % 4;
+ if (padding) {
+ rowsize += 4 - padding;
+ }
+ if (elementbits_return) *elementbits_return = elements;
+ if (rowbytes_return) *rowbytes_return = rowsize;
+ return rowsize * h;
+ } else {
+ return -1;
+ }
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ esize = 1;
+ break;
+ case GL_UNSIGNED_BYTE_3_3_2:
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
+ esize = 1;
+ elements = 1;
+ break;
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ esize = 2;
+ break;
+ case GL_UNSIGNED_SHORT_5_6_5:
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
+ case GL_UNSIGNED_SHORT_4_4_4_4:
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
+ case GL_UNSIGNED_SHORT_5_5_5_1:
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
+ esize = 2;
+ elements = 1;
+ break;
+ case GL_INT:
+ case GL_UNSIGNED_INT:
+ case GL_FLOAT:
+ esize = 4;
+ break;
+ case GL_UNSIGNED_INT_8_8_8_8:
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
+ case GL_UNSIGNED_INT_10_10_10_2:
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
+ esize = 4;
+ elements = 1;
+ break;
+ default:
+ return -1;
+ }
+ rowsize = w * elements * esize;
+ padding = rowsize % 4;
+ if (padding) {
+ rowsize += 4 - padding;
+ }
+
+ if (elementbits_return) *elementbits_return = esize*elements*8;
+ if (rowbytes_return) *rowbytes_return = rowsize;
+
+ return rowsize * h;
+}
+
+static int intersectRect( int x1, int x2, int y1, int y2,
+ int X1, int X2, int Y1, int Y2,
+ int *ix1, int *ix2, int *iy1, int *iy2 )
+{
+ int right = (x2 < X2 ? x2 : X2);
+ int bottom = (y2 < Y2 ? y2 : Y2);
+ int left = (x1 > X1 ? x1 : X1);
+ int top = (y1 > Y1 ? y1 : Y1);
+ int width = right - left + 1;
+ int height = bottom - top + 1;
+
+ if ( (width <= 0) || (height <= 0) ) {
+ *ix1 = *ix2 = *iy1 = *iy2 = 0;
+ return 0;
+ }
+ else {
+ *ix1 = left;
+ *ix2 = right;
+ *iy1 = top;
+ *iy2 = bottom;
+ return width * height;
+ }
+
+}
+
+int __glXDisp_ReadPixels(__GLXclientState *cl, GLbyte *pc)
+{
+ xGLXSingleReq *req = (xGLXSingleReq *)pc;
+ xGLXSingleReq *be_req;
+ xGLXReadPixelsReply reply;
+ xGLXReadPixelsReply be_reply;
+ GLbyte *be_pc;
+ GLint x,y;
+ GLsizei width, height;
+ GLenum format, type;
+ GLboolean swapBytes, lsbFirst;
+ ClientPtr client = cl->client;
+ DrawablePtr pDraw;
+ __GLXcontext *glxc;
+ int from_screen = 0;
+ int to_screen = 0;
+ char *buf;
+ int buf_size;
+ int s;
+ int win_x1, win_x2;
+ int win_y1, win_y2;
+ int ebits, rowsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ if (client->swapped) {
+ __GLX_SWAP_INT(&req->contextTag);
+ }
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXSingleReq;
+ x = *(GLint *)(pc + 0);
+ y = *(GLint *)(pc + 4);
+ width = *(GLsizei *)(pc + 8);
+ height = *(GLsizei *)(pc + 12);
+ format = *(GLenum *)(pc + 16);
+ type = *(GLenum *)(pc + 20);
+ swapBytes = *(GLboolean *)(pc + 24);
+ lsbFirst = *(GLboolean *)(pc + 25);
+
+ if (client->swapped) {
+ __GLX_SWAP_INT(&x);
+ __GLX_SWAP_INT(&y);
+ __GLX_SWAP_INT(&width);
+ __GLX_SWAP_INT(&height);
+ __GLX_SWAP_INT(&format);
+ __GLX_SWAP_INT(&type);
+ swapBytes = !swapBytes;
+ }
+
+ buf_size = __glReadPixels_size(format,type,width,height, &ebits, &rowsize);
+ if (buf_size > 0) {
+ buf = (char *) malloc( buf_size );
+ if ( !buf ) {
+ return BadAlloc;
+ }
+ }
+ else {
+ buf_size = 0;
+ buf = NULL;
+ }
+
+ if (buf_size > 0) {
+ /*
+ * Get the current drawable this context is bound to
+ */
+ pDraw = __glXLookupDrawableByTag( cl, req->contextTag );
+ win_x1 = pDraw->x + x;
+ win_x2 = win_x1 + width - 1;
+ win_y1 = (dmxGlobalHeight - pDraw->y - pDraw->height) + y;
+ win_y2 = win_y1 + height - 1;
+ if (pDraw->type != DRAWABLE_WINDOW) {
+ from_screen = to_screen = 0;
+ }
+
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+ int scr_x1 = dmxScreen->rootXOrigin;
+ int scr_x2 = dmxScreen->rootXOrigin + dmxScreen->scrnWidth - 1;
+ int scr_y1 = dmxScreen->rootYOrigin;
+ int scr_y2 = dmxScreen->rootYOrigin + dmxScreen->scrnHeight - 1;
+ int wx1, wx2, wy1, wy2;
+ int sx, sy, sw, sh;
+ int npixels;
+
+ /*
+ * find the window portion that is on the current screen
+ */
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ npixels = intersectRect( scr_x1, scr_x2, scr_y1, scr_y2,
+ win_x1, win_x2, win_y1, win_y2,
+ &wx1, &wx2, &wy1, &wy2 );
+ }
+ else {
+ wx1 = win_x1;
+ wx2 = win_x2;
+ wy1 = win_y1;
+ wy2 = win_y2;
+ npixels = (wx2-wx1+1) * (wy2-wy1+1);
+ }
+
+ if (npixels > 0) {
+
+ /* send the request to the back-end server */
+ LockDisplay(dpy);
+ GetReqExtra(GLXSingle,__GLX_PAD(26),be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = X_GLsop_ReadPixels;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ be_pc = ((GLbyte *)(be_req) + sz_xGLXSingleReq);
+
+ sx = wx1 - pDraw->x;
+ sy = wy1 - (dmxGlobalHeight - pDraw->y - pDraw->height);
+ sw = (wx2-wx1+1);
+ sh = (wy2-wy1+1);
+
+ *(GLint *)(be_pc + 0) = sx; /* x */
+ *(GLint *)(be_pc + 4) = sy; /* y */
+ *(GLsizei *)(be_pc + 8) = sw; /* width */
+ *(GLsizei *)(be_pc + 12) = sh; /* height */
+ *(GLenum *)(be_pc + 16) = format;
+ *(GLenum *)(be_pc + 20) = type;
+ *(GLboolean *)(be_pc + 24) = swapBytes;
+ *(GLboolean *)(be_pc + 25) = lsbFirst;
+
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+
+ if (be_reply.length > 0) {
+ char *be_buf;
+ int be_buf_size = be_reply.length << 2;
+
+ be_buf = (char *) malloc( be_buf_size );
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+
+ /* copy pixels data to the right location of the */
+ /* reply buffer */
+ if ( type != GL_BITMAP ) {
+ int pbytes = ebits / 8;
+ char *dst = buf + (sy-y)*rowsize + (sx-x)*pbytes;
+ char *src = be_buf;
+ int pad = (pbytes * sw) % 4;
+ int r;
+
+ for (r=0; r<sh; r++) {
+ memcpy( dst, src, pbytes*sw );
+ dst += rowsize;
+ src += (pbytes*sw + (pad ? 4-pad : 0) );
+ }
+ }
+ else {
+ /* this is a GL_BITMAP pixel type, should copy bits */
+ int r;
+ int src_rowsize = bits_to_bytes(sw * ebits);
+ int src_pad = src_rowsize % 4;
+ if ( src_pad ) {
+ src_rowsize += (4 - src_pad);
+ }
+
+ for (r=0; r<sh; r++) {
+ unsigned char dst_mask = 0x80 >> (sx % 8);
+ unsigned char src_mask = 0x80;
+ char *dst = buf + (sy-y+r)*rowsize + (sx-x)/8;
+ char *src = be_buf + r*src_rowsize;
+ int b;
+
+ for (b=0; b<sw*ebits; b++) {
+ if ( *src & src_mask ) {
+ *dst |= dst_mask;
+ }
+ else {
+ *dst &= ~dst_mask;
+ }
+
+ if (dst_mask > 1) dst_mask >>= 1;
+ else {
+ dst_mask = 0x80;
+ dst++;
+ }
+
+ if (src_mask > 1) src_mask >>= 1;
+ else {
+ src_mask = 0x80;
+ src++;
+ }
+ }
+ }
+
+ }
+
+ free( be_buf );
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatData(dpy, be_buf_size);
+ free( buf );
+ return BadAlloc;
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ } /* of npixels > 0 */
+
+ } /* of for loop */
+
+ } /* of if buf_size > 0 */
+
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+ reply.length = buf_size >> 2;
+
+ if (client->swapped) {
+ __GLX_SWAP_SHORT(&reply.sequenceNumber);
+ __GLX_SWAP_INT(&reply.length);
+ }
+
+ WriteToClient(client, sizeof(xGLXReadPixelsReply),(char *)&reply);
+ if (buf_size > 0) {
+ WriteToClient(client, buf_size, (char *)buf);
+ free( buf );
+ }
+
+ return Success;
+}
+
+int __glXDispSwap_GetTexImage(__GLXclientState *cl, GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ GLbyte *lpc = pc;
+
+ lpc += sz_xGLXSingleReq;
+ __GLX_SWAP_INT(lpc+0);
+ __GLX_SWAP_INT(lpc+4);
+ __GLX_SWAP_INT(lpc+8);
+ __GLX_SWAP_INT(lpc+12);
+
+ /* reverse swapBytes */
+ *(GLboolean *)(lpc + 16) = ! *(GLboolean *)(lpc + 16);
+
+ return( __glXForwardPipe0WithReplySwap( cl, pc ) );
+}
+
+int __glXDispSwap_GetColorTable(__GLXclientState *cl, GLbyte *pc)
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ GLbyte *lpc = pc;
+
+ lpc += sz_xGLXSingleReq;
+ __GLX_SWAP_INT(lpc+0);
+ __GLX_SWAP_INT(lpc+4);
+ __GLX_SWAP_INT(lpc+8);
+
+ /* reverse swapBytes */
+ *(GLboolean *)(lpc + 12) = ! *(GLboolean *)(lpc + 12);
+
+ return( __glXForwardPipe0WithReplySwap( cl, pc ) );
+}
+
+
diff --git a/hw/dmx/glxProxy/glxsingle.h b/hw/dmx/glxProxy/glxsingle.h
new file mode 100644
index 0000000..7c23537
--- /dev/null
+++ b/hw/dmx/glxProxy/glxsingle.h
@@ -0,0 +1,54 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifndef __GLXSINGLE_H
+#define __GLXSINGLE_H
+
+extern int __glXForwardSingleReq( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardPipe0WithReply( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardAllWithReply( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXForwardSingleReqSwap( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXForwardPipe0WithReplySwap( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardPipe0WithReplySwapsv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardPipe0WithReplySwapiv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardPipe0WithReplySwapdv( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXForwardAllWithReplySwap( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardAllWithReplySwapsv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardAllWithReplySwapiv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXForwardAllWithReplySwapdv( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXDisp_ReadPixels(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDispSwap_GetTexImage(__GLXclientState *cl, GLbyte *pc);
+extern int __glXDispSwap_GetColorTable(__GLXclientState *cl, GLbyte *pc);
+
+#endif
diff --git a/hw/dmx/glxProxy/glxswap.c b/hw/dmx/glxProxy/glxswap.c
new file mode 100644
index 0000000..6d9b4fc
--- /dev/null
+++ b/hw/dmx/glxProxy/glxswap.c
@@ -0,0 +1,538 @@
+/*
+ * Copyright 2003 Red Hat Inc., Raleigh, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxwindow.h"
+#include "glxserver.h"
+#include "glxswap.h"
+
+extern int __glXDoSwapBuffers(__GLXclientState *cl, XID drawId,
+ GLXContextTag tag);
+
+typedef struct _SwapGroup *SwapGroupPtr;
+
+static Bool SwapBarrierIsReadyToSwap(GLuint barrier);
+static void SwapSwapBarrier(GLuint barrier);
+static void UpdateSwapBarrierList(GLuint barrier,
+ SwapGroupPtr pOldSwap,
+ SwapGroupPtr pNewSwap);
+
+
+/************************************************************************
+ *
+ * Swap Groups
+ *
+ ************************************************************************/
+
+typedef struct _SwapGroup {
+ WindowPtr pWin;
+ SwapGroupPtr pNext;
+
+ Bool swapping;
+ Bool sleeping;
+ GLuint barrier;
+
+ XID drawable;
+ GLXContextTag tag;
+ __GLXclientState *clState;
+} SwapGroupRec;
+
+
+static void SwapSwapGroup(SwapGroupPtr pSwap)
+{
+ SwapGroupPtr pCur;
+
+ /* All drawables in swap group are ready to swap, so just swap all
+ * drawables buffers and then wake up those clients that were
+ * previously sleeping */
+
+ for (pCur = pSwap; pCur; pCur = pCur->pNext) {
+ if (pCur->swapping) {
+ /* Swap pCur's buffers */
+ __glXDoSwapBuffers(pCur->clState, pCur->drawable, pCur->tag);
+ pCur->swapping = FALSE;
+ }
+
+ /* Wakeup client */
+ if (pCur->sleeping) {
+ ClientWakeup(pCur->clState->client);
+ pCur->sleeping = FALSE;
+ }
+ }
+}
+
+static Bool SwapGroupIsReadyToSwap(SwapGroupPtr pSwap)
+{
+ Bool isReady = TRUE;
+
+ /* The swap group is ready to swap when all drawables are ready to
+ * swap. NOTE: A drawable is also ready to swap if it is not
+ * currently mapped */
+ for (; pSwap; pSwap = pSwap->pNext) {
+ isReady &= (pSwap->swapping || !pSwap->pWin->mapped);
+ /* FIXME: Should we use pSwap->pWin->mapped or ...->realized ??? */
+ }
+
+ return isReady;
+}
+
+static Bool SGSwapCleanup(ClientPtr client, pointer closure)
+{
+ /* SwapGroupPtr pSwap = (SwapGroupPtr)closure; */
+
+ /* This should not be called unless the client has died in which
+ * case we should remove the buffer from the swap list */
+
+ return TRUE;
+}
+
+int SGSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag,
+ DrawablePtr pDraw)
+{
+ WindowPtr pWin = (WindowPtr)pDraw;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWin);
+ SwapGroupPtr pSwap = pWinPriv->swapGroup;
+ SwapGroupPtr pCur;
+
+ for (pCur = pSwap; pCur && pCur->pWin != pWin; pCur = pCur->pNext);
+ if (!pCur)
+ return BadDrawable;
+
+ pCur->clState = cl;
+ pCur->drawable = drawId;
+ pCur->tag = tag;
+
+ /* We are now in the process of swapping */
+ pCur->swapping = TRUE;
+
+ if (pSwap->barrier && SwapBarrierIsReadyToSwap(pSwap->barrier)) {
+ /* The swap group is bound to a barrier and the barrier is ready
+ * to swap, so swap all the swap groups that are bound to this
+ * group's swap barrier */
+ SwapSwapBarrier(pSwap->barrier);
+ } else if (!pSwap->barrier && SwapGroupIsReadyToSwap(pSwap)) {
+ /* Do the swap if the entire swap group is ready to swap and the
+ * group is not bound to a swap barrier */
+ SwapSwapGroup(pSwap);
+ } else {
+ /* The swap group/barrier is not yet ready to swap, so put
+ * client to sleep until the rest are ready to swap */
+ ClientSleep(cl->client, SGSwapCleanup, (pointer)pWin);
+ pCur->sleeping = TRUE;
+ }
+
+ return Success;
+}
+
+static void SGWindowUnmapped(WindowPtr pWin)
+{
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWin);
+ SwapGroupPtr pSwap = pWinPriv->swapGroup;
+
+ /* Now that one of the windows in the swap group has been unmapped,
+ * see if the entire swap group/barrier is ready to swap */
+
+ if (pSwap->barrier && SwapBarrierIsReadyToSwap(pSwap->barrier)) {
+ SwapSwapBarrier(pSwap->barrier);
+ } else if (!pSwap->barrier && SwapGroupIsReadyToSwap(pSwap)) {
+ SwapSwapGroup(pSwap);
+ }
+}
+
+static void SGWindowDestroyed(WindowPtr pWin)
+{
+ JoinSwapGroupSGIX((DrawablePtr)pWin, NULL);
+}
+
+static SwapGroupPtr CreateSwapEntry(WindowPtr pWin)
+{
+ SwapGroupPtr pEntry;
+
+ /* Allocate new swap group */
+ pEntry = malloc(sizeof(*pEntry));
+ if (!pEntry) return NULL;
+
+ /* Initialize swap group */
+ pEntry->pWin = pWin;
+ pEntry->pNext = NULL;
+ pEntry->swapping = FALSE;
+ pEntry->sleeping = FALSE;
+ pEntry->barrier = 0;
+ /* The following are not initialized until SwapBuffers is called:
+ * pEntry->drawable
+ * pEntry->tag
+ * pEntry->clState
+ */
+
+ return pEntry;
+}
+
+static void FreeSwapEntry(SwapGroupPtr pEntry)
+{
+ /* Since we have removed the drawable from its previous swap group
+ * and it won't be added to another swap group, the only thing that
+ * we need to do is to make sure that the drawable's client is not
+ * sleeping. This could happen if one thread is sleeping, while
+ * another thread called glxJoinSwapGroup(). Note that all sleeping
+ * threads should also be swapping, but there is a small window in
+ * the SGSwapBuffer() logic, above, where swapping can be set but
+ * sleeping is not. We check both independently here just to be
+ * pedantic. */
+
+ /* Handle swap buffer request */
+ if (pEntry->swapping)
+ __glXDoSwapBuffers(pEntry->clState, pEntry->drawable, pEntry->tag);
+
+ /* Wake up client */
+ if (pEntry->sleeping)
+ ClientWakeup(pEntry->clState->client);
+
+ /* We can free the pEntry entry since it has already been removed
+ * from the swap group list and it won't be needed any longer */
+ free(pEntry);
+}
+
+int JoinSwapGroupSGIX(DrawablePtr pDraw, DrawablePtr pMember)
+{
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ WindowPtr pWin = (WindowPtr)pDraw;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWin);
+ SwapGroupPtr pOldSwap = NULL;
+ SwapGroupPtr pEntry;
+
+ /* If pDraw and pMember are already members of the same swap
+ * group, just return Success since there is nothing to do */
+ for (pEntry = pWinPriv->swapGroup; pEntry; pEntry = pEntry->pNext)
+ if (pEntry->pWin == (WindowPtr)pMember)
+ return Success;
+
+ /* Remove pDraw from its current swap group */
+ if (pWinPriv->swapGroup) {
+ SwapGroupPtr pSwapGroup = pWinPriv->swapGroup;
+ SwapGroupPtr pPrev;
+
+ /* Find old swap entry in swap group and save in pOldSwap
+ * for later use */
+ for (pOldSwap = pWinPriv->swapGroup, pPrev = NULL;
+ pOldSwap && pOldSwap->pWin != pWin;
+ pPrev = pOldSwap, pOldSwap = pOldSwap->pNext);
+ if (!pOldSwap)
+ return BadDrawable;
+
+ /* Remove pDraw's swap group entry from swap group list */
+ if (pPrev) {
+ pPrev->pNext = pOldSwap->pNext;
+ } else {
+ /* pWin is at the head of the swap group list, so we
+ * need to update all other members of this swap
+ * group */
+ for (pEntry = pOldSwap->pNext; pEntry; pEntry = pEntry->pNext)
+ DMX_GET_WINDOW_PRIV(pEntry->pWin)->swapGroup
+ = pOldSwap->pNext;
+
+ /* Update the barrier list as well */
+ if (pOldSwap->barrier)
+ UpdateSwapBarrierList(pOldSwap->barrier,
+ pOldSwap, pOldSwap->pNext);
+
+ /* Set pSwapGroup to point to the swap group without
+ * pOldSwap */
+ pSwapGroup = pOldSwap->pNext;
+ }
+
+ /* Check to see if current swap group can now swap since we
+ * know at this point that pDraw and pMember are guaranteed
+ * to previously be in different swap groups */
+ if (pSwapGroup && SwapGroupIsReadyToSwap(pSwapGroup)) {
+ SwapSwapGroup(pSwapGroup);
+ }
+
+ /* Make the old swap entry a standalone group */
+ pOldSwap->pNext = NULL;
+ pOldSwap->barrier = 0;
+
+ /* Reset pWin's swap group */
+ pWinPriv->swapGroup = NULL;
+ pWinPriv->windowDestroyed = NULL;
+ pWinPriv->windowUnmapped = NULL;
+ }
+
+ if (!pMember || pMember->type != DRAWABLE_WINDOW) {
+ /* Free old swap group since it is no longer needed */
+ if (pOldSwap) FreeSwapEntry(pOldSwap);
+ } else if (pDraw == pMember && pOldSwap) {
+ /* Special case where pDraw was previously created and we
+ * are now just putting it to its own swap group */
+ pWinPriv->swapGroup = pOldSwap;
+ pWinPriv->windowDestroyed = SGWindowDestroyed;
+ pWinPriv->windowUnmapped = SGWindowUnmapped;
+
+ /* Check to see if pDraw is ready to swap */
+ if (SwapGroupIsReadyToSwap(pOldSwap))
+ SwapSwapGroup(pOldSwap);
+ } else if (pMember->type == DRAWABLE_WINDOW) {
+ WindowPtr pMemberWin = (WindowPtr)pMember;
+ dmxWinPrivPtr pMemberPriv = DMX_GET_WINDOW_PRIV(pMemberWin);
+ SwapGroupPtr pMemberSwapGroup = pMemberPriv->swapGroup;
+
+ /* Finally, how we can add pDraw to pMember's swap group */
+
+ /* If pMember is not currently in a swap group, then create
+ * one for it since we are just about to add pDraw to it. */
+ if (!pMemberSwapGroup) {
+ /* Create new swap group */
+ pMemberSwapGroup = CreateSwapEntry(pMemberWin);
+ if (!pMemberSwapGroup) {
+ if (pOldSwap) FreeSwapEntry(pOldSwap);
+ return BadAlloc;
+ }
+
+ /* Set pMember's swap group */
+ pMemberPriv->swapGroup = pMemberSwapGroup;
+ pMemberPriv->windowDestroyed = SGWindowDestroyed;
+ pMemberPriv->windowUnmapped = SGWindowUnmapped;
+ }
+
+ /* If pDraw == pMember, that means pDraw was not a member of
+ * a group previously (or it would have been handled by the
+ * special case above), so no additional work is required
+ * since we just created a new swap group for pMember (i.e.,
+ * pDraw). */
+
+ if (pDraw != pMember) {
+ /* If pDraw was not previously in a swap group, then create
+ * an entry for it */
+ if (!pOldSwap) {
+ /* Create new swap group */
+ pOldSwap = CreateSwapEntry(pWin);
+ if (!pOldSwap) {
+ /* If we just created a swap group for pMember, we
+ * need to free it here */
+ if (pMemberSwapGroup->pNext == NULL) {
+ FreeSwapEntry(pMemberSwapGroup);
+ pMemberPriv->swapGroup = NULL;
+ }
+ return BadAlloc;
+ }
+ }
+
+ /* Find last entry in pMember's swap group */
+ for (pEntry = pMemberSwapGroup;
+ pEntry->pNext;
+ pEntry = pEntry->pNext);
+
+ /* Add pDraw's swap group entry to pMember's swap group list */
+ pEntry->pNext = pOldSwap;
+
+ /* Add pDraw to pMember's swap barrier */
+ pOldSwap->barrier = pEntry->barrier;
+
+ /* Set pDraw's swap group */
+ pWinPriv->swapGroup = pMemberSwapGroup;
+ pWinPriv->windowDestroyed = SGWindowDestroyed;
+ pWinPriv->windowUnmapped = SGWindowUnmapped;
+ }
+ }
+ }
+
+ return Success;
+}
+
+
+/************************************************************************
+ *
+ * Swap Barriers
+ *
+ ************************************************************************/
+
+#define GLX_MAX_SWAP_BARRIERS 10
+
+typedef struct _SwapBarrier *SwapBarrierPtr;
+typedef struct _SwapBarrier {
+ SwapGroupPtr pSwap;
+ SwapBarrierPtr pNext;
+} SwapBarrierRec;
+
+static SwapBarrierPtr SwapBarrierList[GLX_MAX_SWAP_BARRIERS+1];
+
+void SwapBarrierInit(void)
+{
+ int i;
+
+ for (i = 0; i <= GLX_MAX_SWAP_BARRIERS; i++)
+ SwapBarrierList[i] = NULL;
+}
+
+void SwapBarrierReset(void)
+{
+ int i;
+
+ for (i = 0; i <= GLX_MAX_SWAP_BARRIERS; i++) {
+ SwapBarrierPtr pBarrier, pNextBarrier;
+ for (pBarrier = SwapBarrierList[i];
+ pBarrier;
+ pBarrier = pNextBarrier) {
+ pNextBarrier = pBarrier->pNext;
+ free(pBarrier);
+ }
+ SwapBarrierList[i] = NULL;
+ }
+}
+
+int QueryMaxSwapBarriersSGIX(int screen)
+{
+ return GLX_MAX_SWAP_BARRIERS;
+}
+
+static Bool BindSwapGroupToBarrier(GLuint barrier, SwapGroupPtr pSwapGroup)
+{
+ SwapBarrierPtr pBarrier;
+
+ pBarrier = malloc(sizeof(*pBarrier));
+ if (!pBarrier) return FALSE;
+
+ /* Add the swap group to barrier's list */
+ pBarrier->pSwap = pSwapGroup;
+ pBarrier->pNext = SwapBarrierList[barrier];
+ SwapBarrierList[barrier] = pBarrier;
+
+ return TRUE;
+}
+
+static Bool UnbindSwapGroupFromBarrier(GLuint barrier, SwapGroupPtr pSwapGroup)
+{
+ SwapBarrierPtr pBarrier, pPrevBarrier;
+
+ /* Find the swap group in barrier's list */
+ for (pBarrier = SwapBarrierList[barrier], pPrevBarrier = NULL;
+ pBarrier && pBarrier->pSwap != pSwapGroup;
+ pPrevBarrier = pBarrier, pBarrier = pBarrier->pNext);
+ if (!pBarrier) return FALSE;
+
+ /* Remove the swap group from barrier's list */
+ if (pPrevBarrier) pPrevBarrier->pNext = pBarrier->pNext;
+ else SwapBarrierList[barrier] = pBarrier->pNext;
+
+ /* Free memory */
+ free(pBarrier);
+
+ return TRUE;
+}
+
+static void UpdateSwapBarrierList(GLuint barrier,
+ SwapGroupPtr pOldSwap,
+ SwapGroupPtr pNewSwap)
+{
+ SwapBarrierPtr pBarrier;
+
+ /* If the old swap group is being destroyed, then we need to remove
+ * the swap group from the list entirely */
+ if (!pNewSwap) {
+ UnbindSwapGroupFromBarrier(barrier, pOldSwap);
+ return;
+ }
+
+ /* Otherwise, find the old swap group in the barrier list and change
+ * it to the new swap group */
+ for (pBarrier = SwapBarrierList[barrier];
+ pBarrier;
+ pBarrier = pBarrier->pNext) {
+ if (pBarrier->pSwap == pOldSwap) {
+ pBarrier->pSwap = pNewSwap;
+ return;
+ }
+ }
+}
+
+static Bool SwapBarrierIsReadyToSwap(GLuint barrier)
+{
+ SwapBarrierPtr pBarrier;
+ Bool isReady = TRUE;
+
+ /* The swap barier is ready to swap when swap groups that are bound
+ * to barrier are ready to swap */
+ for (pBarrier = SwapBarrierList[barrier];
+ pBarrier;
+ pBarrier = pBarrier->pNext)
+ isReady &= SwapGroupIsReadyToSwap(pBarrier->pSwap);
+
+ return isReady;
+}
+
+static void SwapSwapBarrier(GLuint barrier)
+{
+ SwapBarrierPtr pBarrier;
+
+ /* Swap each group that is a member of this barrier */
+ for (pBarrier = SwapBarrierList[barrier];
+ pBarrier;
+ pBarrier = pBarrier->pNext)
+ SwapSwapGroup(pBarrier->pSwap);
+}
+
+int BindSwapBarrierSGIX(DrawablePtr pDraw, int barrier)
+{
+ /* FIXME: Check for errors when pDraw->type != DRAWABLE_WINDOW */
+
+ if (barrier < 0 || barrier > GLX_MAX_SWAP_BARRIERS)
+ return BadValue;
+
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ WindowPtr pWin = (WindowPtr)pDraw;
+ dmxWinPrivPtr pWinPriv = DMX_GET_WINDOW_PRIV(pWin);
+ SwapGroupPtr pSwapGroup = pWinPriv->swapGroup;
+ SwapGroupPtr pCur;
+
+ if (!pSwapGroup) return BadDrawable;
+ if (barrier && pSwapGroup->barrier) return BadValue;
+
+ /* Update the swap barrier list */
+ if (barrier) {
+ if (!BindSwapGroupToBarrier(barrier, pSwapGroup))
+ return BadAlloc;
+ } else {
+ if (!UnbindSwapGroupFromBarrier(pSwapGroup->barrier, pSwapGroup))
+ return BadDrawable;
+ }
+
+ /* Set the barrier for each member of this swap group */
+ for (pCur = pSwapGroup; pCur; pCur = pCur->pNext)
+ pCur->barrier = barrier;
+ }
+
+ return Success;
+}
diff --git a/hw/dmx/glxProxy/glxswap.h b/hw/dmx/glxProxy/glxswap.h
new file mode 100644
index 0000000..08e38df
--- /dev/null
+++ b/hw/dmx/glxProxy/glxswap.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2003 Red Hat Inc., Raleigh, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Kevin E. Martin <kem@redhat.com>
+ *
+ */
+
+#ifndef __GLX_swap_h__
+#define __GLX_swap_h__
+
+extern int JoinSwapGroupSGIX(DrawablePtr pDraw, DrawablePtr pMember);
+extern int SGSwapBuffers(__GLXclientState *cl, XID drawId, GLXContextTag tag,
+ DrawablePtr pDraw);
+
+extern void SwapBarrierInit(void);
+extern void SwapBarrierReset(void);
+extern int QueryMaxSwapBarriersSGIX(int screen);
+extern int BindSwapBarrierSGIX(DrawablePtr pDraw, int barrier);
+
+#endif /* !__GLX_swap_h__ */
diff --git a/hw/dmx/glxProxy/glxutil.c b/hw/dmx/glxProxy/glxutil.c
new file mode 100644
index 0000000..c519d14
--- /dev/null
+++ b/hw/dmx/glxProxy/glxutil.c
@@ -0,0 +1,34 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+#include "glxutil.h"
+
+void __glXNop(void) {}
diff --git a/hw/dmx/glxProxy/glxutil.h b/hw/dmx/glxProxy/glxutil.h
new file mode 100644
index 0000000..5458212
--- /dev/null
+++ b/hw/dmx/glxProxy/glxutil.h
@@ -0,0 +1,42 @@
+#ifndef _glxcmds_h_
+#define _glxcmds_h_
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+extern void __glXNop(void);
+
+/* context helper routines */
+extern __GLXcontext *__glXLookupContextByTag(__GLXclientState*, GLXContextTag);
+extern DrawablePtr __glXLookupDrawableByTag(__GLXclientState *cl, GLXContextTag tag);
+
+
+#endif /* _glxcmds_h_ */
+
diff --git a/hw/dmx/glxProxy/glxvendor.c b/hw/dmx/glxProxy/glxvendor.c
new file mode 100644
index 0000000..0b6ba41
--- /dev/null
+++ b/hw/dmx/glxProxy/glxvendor.c
@@ -0,0 +1,585 @@
+/* DO NOT EDIT - THIS FILE IS AUTOMATICALLY GENERATED */
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxwindow.h"
+#include "dmxpixmap.h"
+#include "dmxfont.h"
+
+#include "glxserver.h"
+#include "glxext.h"
+#include "g_disptab.h"
+/* #include "g_disptab_EXT.h" */
+#include "unpack.h"
+#include "glxutil.h"
+
+#include "GL/glxproto.h"
+
+#ifdef PANORAMIX
+#include "panoramiXsrv.h"
+#endif
+
+/*
+ * GetReqVendorPrivate - this is the equivalent of GetReq macro
+ * from Xlibint.h but it does not set the reqType field (the opcode).
+ * this is because the GL single opcodes has different naming convension
+ * the other X opcodes (ie. X_GLsop_GetFloatv).
+ */
+#if (defined(__STDC__) && !defined(UNIXCPP)) || defined(ANSICPP)
+#define GetReqVendorPrivate(name, req) \
+ WORD64ALIGN\
+ if ((dpy->bufptr + SIZEOF(x##name##Req)) > dpy->bufmax)\
+ _XFlush(dpy);\
+ req = (x##name##Req *)(dpy->last_req = dpy->bufptr);\
+ req->length = (SIZEOF(x##name##Req))>>2;\
+ dpy->bufptr += SIZEOF(x##name##Req);\
+ dpy->request++
+
+#else /* non-ANSI C uses empty comment instead of "##" for token concatenation */
+#define GetReqVendorPrivate(name, req) \
+ WORD64ALIGN\
+ if ((dpy->bufptr + SIZEOF(x/**/name/**/Req)) > dpy->bufmax)\
+ _XFlush(dpy);\
+ req = (x/**/name/**/Req *)(dpy->last_req = dpy->bufptr);\
+ req->length = (SIZEOF(x/**/name/**/Req))>>2;\
+ dpy->bufptr += SIZEOF(x/**/name/**/Req);\
+ dpy->request++
+#endif
+
+extern Display *GetBackEndDisplay( __GLXclientState *cl, int s );
+extern int GetCurrentBackEndTag(__GLXclientState *cl, GLXContextTag tag, int s);
+
+static int swap_vec_element_size = 0;
+
+static void SendSwappedReply( ClientPtr client,
+ xGLXVendorPrivReply *reply,
+ char *buf,
+ int buf_size )
+{
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_SWAP_SHORT(&reply->sequenceNumber);
+ __GLX_SWAP_INT(&reply->length);
+ __GLX_SWAP_INT(&reply->retval);
+ __GLX_SWAP_INT(&reply->size);
+
+ if ( (buf_size == 0) && (swap_vec_element_size > 0) ) {
+ /*
+ * the reply has single component - need to swap pad3
+ */
+ if (swap_vec_element_size == 2) {
+ __GLX_SWAP_SHORT(&reply->pad3);
+ }
+ else if (swap_vec_element_size == 4) {
+ __GLX_SWAP_INT(&reply->pad3);
+ __GLX_SWAP_INT(&reply->pad4);
+ }
+ else if (swap_vec_element_size == 8) {
+ __GLX_SWAP_DOUBLE(&reply->pad3);
+ }
+ }
+ else if ( (buf_size > 0) && (swap_vec_element_size > 0) ) {
+ /*
+ * the reply has vector of elements which needs to be swapped
+ */
+ int vsize = buf_size / swap_vec_element_size;
+ char *p = buf;
+ int i;
+
+ for (i=0; i<vsize; i++) {
+ if (swap_vec_element_size == 2) {
+ __GLX_SWAP_SHORT(p);
+ }
+ else if (swap_vec_element_size == 4) {
+ __GLX_SWAP_INT(p);
+ }
+ else if (swap_vec_element_size == 8) {
+ __GLX_SWAP_DOUBLE(p);
+ }
+
+ p += swap_vec_element_size;
+ }
+
+ __GLX_SWAP_INT(&reply->pad3);
+ __GLX_SWAP_INT(&reply->pad4);
+ __GLX_SWAP_INT(&reply->pad5);
+ __GLX_SWAP_INT(&reply->pad6);
+
+ }
+
+ WriteToClient(client, sizeof(xGLXVendorPrivReply),(char *)reply);
+ if (buf_size > 0)
+ WriteToClient(client, buf_size, (char *)buf);
+
+}
+
+int __glXVForwardSingleReq( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ xGLXVendorPrivateReq *be_req;
+ __GLXcontext *glxc;
+ int from_screen = 0;
+ int to_screen = 0;
+ int buf_size;
+ int s;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXVendorPrivateReq;
+ buf_size = (req->length << 2) - sz_xGLXVendorPrivateReq;
+
+ /*
+ * just forward the request to back-end server(s)
+ */
+ for (s=from_screen; s<=to_screen; s++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[s];
+ Display *dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReqVendorPrivate(GLXVendorPrivate,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = req->glxCode;
+ be_req->length = req->length;
+ be_req->vendorCode = req->vendorCode;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ if (buf_size > 0)
+ _XSend(dpy, (const char *)pc, buf_size);
+ UnlockDisplay(dpy);
+ SyncHandle();
+ }
+
+ return Success;
+}
+
+int __glXVForwardPipe0WithReply( __GLXclientState *cl, GLbyte *pc )
+{
+ ClientPtr client = cl->client;
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ xGLXVendorPrivateReq *be_req;
+ xGLXVendorPrivReply reply;
+ xGLXVendorPrivReply be_reply;
+ __GLXcontext *glxc;
+ int buf_size;
+ char *be_buf = NULL;
+ int be_buf_size;
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return __glXBadContext;
+ }
+
+ pc += sz_xGLXVendorPrivateReq;
+ buf_size = (req->length << 2) - sz_xGLXVendorPrivateReq;
+
+ dmxScreen = &dmxScreens[glxc->pScreen->myNum];
+ dpy = GetBackEndDisplay(cl, glxc->pScreen->myNum);
+
+ /*
+ * send the request to the first back-end server
+ */
+ LockDisplay(dpy);
+ GetReqVendorPrivate(GLXVendorPrivate,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = req->glxCode;
+ be_req->length = req->length;
+ be_req->vendorCode = req->vendorCode;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag, glxc->pScreen->myNum);
+ if (buf_size > 0)
+ _XSend(dpy, (const char *)pc, buf_size);
+
+ /*
+ * get the reply from the back-end server
+ */
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+ be_buf_size = be_reply.length << 2;
+ if (be_buf_size > 0) {
+ be_buf = (char *)malloc( be_buf_size );
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatData(dpy, be_buf_size);
+ return BadAlloc;
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ /*
+ * send the reply to the client
+ */
+ memcpy( &reply, &be_reply, sz_xGLXVendorPrivReply );
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ if (client->swapped) {
+ SendSwappedReply( client, &reply, be_buf, be_buf_size );
+ }
+ else {
+ WriteToClient(client, sizeof(xGLXVendorPrivReply),(char *)&reply);
+ if (be_buf_size > 0)
+ WriteToClient(client, be_buf_size, (char *)be_buf);
+ }
+
+ if (be_buf_size > 0) free(be_buf);
+
+ return Success;
+}
+
+int __glXVForwardAllWithReply( __GLXclientState *cl, GLbyte *pc )
+{
+ ClientPtr client = cl->client;
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ xGLXVendorPrivateReq *be_req;
+ xGLXVendorPrivReply reply;
+ xGLXVendorPrivReply be_reply;
+ __GLXcontext *glxc;
+ int buf_size;
+ char *be_buf = NULL;
+ int be_buf_size = 0;
+ int from_screen = 0;
+ int to_screen = 0;
+ int s;
+
+ DMXScreenInfo *dmxScreen;
+ Display *dpy;
+
+ glxc = __glXLookupContextByTag(cl, req->contextTag);
+ if (!glxc) {
+ return 0;
+ }
+ from_screen = to_screen = glxc->pScreen->myNum;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) {
+ from_screen = 0;
+ to_screen = screenInfo.numScreens - 1;
+ }
+#endif
+
+ pc += sz_xGLXVendorPrivateReq;
+ buf_size = (req->length << 2) - sz_xGLXVendorPrivateReq;
+
+ /*
+ * send the request to the first back-end server(s)
+ */
+ for (s=to_screen; s>=from_screen; s--) {
+ dmxScreen = &dmxScreens[s];
+ dpy = GetBackEndDisplay(cl,s);
+
+ LockDisplay(dpy);
+ GetReqVendorPrivate(GLXVendorPrivate,be_req);
+ be_req->reqType = dmxScreen->glxMajorOpcode;
+ be_req->glxCode = req->glxCode;
+ be_req->length = req->length;
+ be_req->vendorCode = req->vendorCode;
+ be_req->contextTag = GetCurrentBackEndTag(cl,req->contextTag,s);
+ if (buf_size > 0)
+ _XSend(dpy, (const char *)pc, buf_size);
+
+ /*
+ * get the reply from the back-end server
+ */
+ _XReply(dpy, (xReply*) &be_reply, 0, False);
+ be_buf_size = be_reply.length << 2;
+ if (be_buf_size > 0) {
+ be_buf = (char *)malloc( be_buf_size );
+ if (be_buf) {
+ _XRead(dpy, be_buf, be_buf_size);
+ }
+ else {
+ /* Throw data on the floor */
+ _XEatData(dpy, be_buf_size);
+ return BadAlloc;
+ }
+ }
+
+ UnlockDisplay(dpy);
+ SyncHandle();
+
+ if (s > from_screen && be_buf_size > 0) {
+ free(be_buf);
+ }
+ }
+
+ /*
+ * send the reply to the client
+ */
+ memcpy( &reply, &be_reply, sz_xGLXVendorPrivReply );
+ reply.type = X_Reply;
+ reply.sequenceNumber = client->sequence;
+
+ if (client->swapped) {
+ SendSwappedReply( client, &reply, be_buf, be_buf_size );
+ }
+ else {
+ WriteToClient(client, sizeof(xGLXVendorPrivReply),(char *)&reply);
+ if (be_buf_size > 0)
+ WriteToClient(client, be_buf_size, (char *)be_buf);
+ }
+
+ if (be_buf_size > 0) free(be_buf);
+
+ return Success;
+}
+
+int __glXVForwardSingleReqSwap( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 0;
+
+ return( __glXVForwardSingleReq( cl, pc ) );
+}
+
+int __glXVForwardPipe0WithReplySwap( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 0;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXVForwardPipe0WithReplySwapsv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 2;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXVForwardPipe0WithReplySwapiv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 4;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXVForwardPipe0WithReplySwapdv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 8;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardPipe0WithReply( cl, pc ) );
+}
+
+int __glXVForwardAllWithReplySwap( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 0;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardAllWithReply( cl, pc ) );
+}
+
+int __glXVForwardAllWithReplySwapsv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 2;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardAllWithReply( cl, pc ) );
+}
+
+int __glXVForwardAllWithReplySwapiv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 4;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardAllWithReply( cl, pc ) );
+}
+
+int __glXVForwardAllWithReplySwapdv( __GLXclientState *cl, GLbyte *pc )
+{
+ xGLXVendorPrivateReq *req = (xGLXVendorPrivateReq *)pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_SHORT(&req->length);
+ __GLX_SWAP_INT(&req->vendorCode);
+ __GLX_SWAP_INT(&req->contextTag);
+
+ swap_vec_element_size = 8;
+
+ /*
+ * swap extra data in request - assuming all data
+ * (if available) are arrays of 4 bytes components !
+ */
+ if (req->length > sz_xGLXVendorPrivateReq/4) {
+ int *data = (int *)(req+1);
+ int count = req->length - sz_xGLXVendorPrivateReq/4;
+ __GLX_SWAP_INT_ARRAY(data, count );
+ }
+
+ return( __glXVForwardAllWithReply( cl, pc ) );
+}
+
diff --git a/hw/dmx/glxProxy/glxvendor.h b/hw/dmx/glxProxy/glxvendor.h
new file mode 100644
index 0000000..fbc901c
--- /dev/null
+++ b/hw/dmx/glxProxy/glxvendor.h
@@ -0,0 +1,50 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifndef __GLXVENDOR_H
+#define __GLXVENDOR_H
+
+extern int __glXVForwardSingleReq( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardPipe0WithReply( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardAllWithReply( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXVForwardSingleReqSwap( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXVForwardPipe0WithReplySwap( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardPipe0WithReplySwapsv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardPipe0WithReplySwapiv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardPipe0WithReplySwapdv( __GLXclientState *cl, GLbyte *pc );
+
+extern int __glXVForwardAllWithReplySwap( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardAllWithReplySwapsv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardAllWithReplySwapiv( __GLXclientState *cl, GLbyte *pc );
+extern int __glXVForwardAllWithReplySwapdv( __GLXclientState *cl, GLbyte *pc );
+
+#endif
diff --git a/hw/dmx/glxProxy/glxvisuals.c b/hw/dmx/glxProxy/glxvisuals.c
new file mode 100644
index 0000000..8a2e557
--- /dev/null
+++ b/hw/dmx/glxProxy/glxvisuals.c
@@ -0,0 +1,152 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "glxserver.h"
+#include "glxvisuals.h"
+
+int glxVisualsMatch( __GLXvisualConfig *v1, __GLXvisualConfig *v2 )
+{
+ if ( (v1->class == v2->class) &&
+ (v1->rgba == v2->rgba) &&
+ (v1->redSize == v2->redSize) &&
+ (v1->greenSize == v2->greenSize) &&
+ (v1->blueSize == v2->blueSize) &&
+ (v1->alphaSize == v2->alphaSize) &&
+ (v1->redMask == v2->redMask) &&
+ (v1->greenMask == v2->greenMask) &&
+ (v1->blueMask == v2->blueMask) &&
+ (v1->alphaMask == v2->alphaMask) &&
+ (v1->accumRedSize == v2->accumRedSize) &&
+ (v1->accumGreenSize == v2->accumGreenSize) &&
+ (v1->accumBlueSize == v2->accumBlueSize) &&
+ (v1->accumAlphaSize == v2->accumAlphaSize) &&
+ (v1->doubleBuffer == v2->doubleBuffer) &&
+ (v1->stereo == v2->stereo) &&
+ (v1->bufferSize == v2->bufferSize) &&
+ (v1->depthSize == v2->depthSize) &&
+ (v1->stencilSize == v2->stencilSize) &&
+ (v1->auxBuffers == v2->auxBuffers) &&
+ (v1->level == v2->level) &&
+ (v1->visualRating == v2->visualRating) &&
+ (v1->transparentPixel == v2->transparentPixel) &&
+ (v1->transparentRed == v2->transparentRed) &&
+ (v1->transparentGreen == v2->transparentGreen) &&
+ (v1->transparentBlue == v2->transparentBlue) &&
+ (v1->transparentAlpha == v2->transparentAlpha) &&
+ (v1->transparentIndex == v2->transparentIndex) &&
+ (v1->multiSampleSize == v2->multiSampleSize) &&
+ (v1->nMultiSampleBuffers == v2->nMultiSampleBuffers) &&
+ (v1->visualSelectGroup == v2->visualSelectGroup) ) {
+
+ return 1;
+
+ }
+
+ return 0;
+
+}
+
+VisualID glxMatchGLXVisualInConfigList( __GLXvisualConfig *pGlxVisual, __GLXvisualConfig *configs, int nconfigs )
+{
+ int i;
+
+ for (i=0; i<nconfigs; i++) {
+
+ if (glxVisualsMatch( pGlxVisual, &configs[i] )) {
+
+ return configs[i].vid;
+
+ }
+ }
+
+ return 0;
+}
+
+VisualID glxMatchVisualInConfigList( ScreenPtr pScreen, VisualPtr pVisual, __GLXvisualConfig *configs, int nconfigs )
+{
+ __GLXscreenInfo *pGlxScreen;
+ __GLXvisualConfig *pGlxVisual;
+ int i;
+
+ /* check that the glx extension has been initialized */
+ if ( !__glXActiveScreens )
+ return 0;
+
+ pGlxScreen = &__glXActiveScreens[pScreen->myNum];
+ pGlxVisual = pGlxScreen->pGlxVisual;
+
+ /* find the glx visual info for pVisual */
+ for (i = 0; i < pGlxScreen->numVisuals; i++, pGlxVisual++) {
+ if (pGlxVisual->vid == pVisual->vid) {
+ break;
+ }
+ }
+ if (i == pGlxScreen->numVisuals) {
+ /*
+ * the visual is not supported by glx
+ */
+ return 0;
+ }
+
+ return( glxMatchGLXVisualInConfigList(pGlxVisual, configs, nconfigs) );
+}
+
+VisualPtr glxMatchVisual( ScreenPtr pScreen, VisualPtr pVisual, ScreenPtr pMatchScreen )
+{
+ __GLXscreenInfo *pGlxScreen2;
+ int j;
+ VisualID vid;
+
+ /* check that the glx extension has been initialized */
+ if ( !__glXActiveScreens )
+ return NULL;
+
+ pGlxScreen2 = &__glXActiveScreens[pMatchScreen->myNum];
+
+ vid = glxMatchVisualInConfigList( pScreen, pVisual,
+ pGlxScreen2->pGlxVisual,
+ pGlxScreen2->numVisuals );
+ if (vid) {
+ /*
+ * find the X visual of the matching glx visual
+ */
+ for (j=0; j<pMatchScreen->numVisuals; j++) {
+ if (vid == pMatchScreen->visuals[j].vid) {
+ return &pMatchScreen->visuals[j];
+ }
+ }
+ }
+
+ return 0;
+}
diff --git a/hw/dmx/glxProxy/glxvisuals.h b/hw/dmx/glxProxy/glxvisuals.h
new file mode 100644
index 0000000..0529d94
--- /dev/null
+++ b/hw/dmx/glxProxy/glxvisuals.h
@@ -0,0 +1,42 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#ifndef _GLX_VISUALS_H
+#define _GLX_VISUALS_H
+
+int glxVisualsMatch( __GLXvisualConfig *v1, __GLXvisualConfig *v2 );
+
+VisualID glxMatchGLXVisualInConfigList( __GLXvisualConfig *pGlxVisual, __GLXvisualConfig *configs, int nconfigs );
+
+VisualID glxMatchVisualInConfigList( ScreenPtr pScreen, VisualPtr pVisual, __GLXvisualConfig *configs, int nconfigs );
+
+VisualPtr glxMatchVisual( ScreenPtr pScreen, VisualPtr pVisual, ScreenPtr pMatchScreen );
+
+#endif
diff --git a/hw/dmx/glxProxy/render2swap.c b/hw/dmx/glxProxy/render2swap.c
new file mode 100644
index 0000000..81bb501
--- /dev/null
+++ b/hw/dmx/glxProxy/render2swap.c
@@ -0,0 +1,286 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+#include "unpack.h"
+#include "g_disptab.h"
+
+GLint __glEvalComputeK(GLenum target)
+{
+ switch (target) {
+ case GL_MAP1_VERTEX_4:
+ case GL_MAP1_COLOR_4:
+ case GL_MAP1_TEXTURE_COORD_4:
+ case GL_MAP2_VERTEX_4:
+ case GL_MAP2_COLOR_4:
+ case GL_MAP2_TEXTURE_COORD_4:
+ return 4;
+ case GL_MAP1_VERTEX_3:
+ case GL_MAP1_TEXTURE_COORD_3:
+ case GL_MAP1_NORMAL:
+ case GL_MAP2_VERTEX_3:
+ case GL_MAP2_TEXTURE_COORD_3:
+ case GL_MAP2_NORMAL:
+ return 3;
+ case GL_MAP1_TEXTURE_COORD_2:
+ case GL_MAP2_TEXTURE_COORD_2:
+ return 2;
+ case GL_MAP1_TEXTURE_COORD_1:
+ case GL_MAP2_TEXTURE_COORD_1:
+ case GL_MAP1_INDEX:
+ case GL_MAP2_INDEX:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+void __glXDispSwap_Map1f(GLbyte *pc)
+{
+ GLint order, k;
+ GLfloat u1, u2, *points;
+ GLenum target;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+
+ target = *(GLenum *)(pc + 0);
+ order = *(GLint *)(pc + 12);
+ u1 = *(GLfloat *)(pc + 4);
+ u2 = *(GLfloat *)(pc + 8);
+ points = (GLfloat *)(pc + 16);
+ k = __glEvalComputeK(target);
+
+ if (order <= 0 || k < 0) {
+ /* Erroneous command. */
+ compsize = 0;
+ } else {
+ compsize = order * k;
+ }
+ __GLX_SWAP_FLOAT_ARRAY(points, compsize);
+
+}
+
+void __glXDispSwap_Map2f(GLbyte *pc)
+{
+ GLint uorder, vorder, ustride, vstride, k;
+ GLfloat u1, u2, v1, v2, *points;
+ GLenum target;
+ GLint compsize;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 0);
+ __GLX_SWAP_INT(pc + 12);
+ __GLX_SWAP_INT(pc + 24);
+ __GLX_SWAP_FLOAT(pc + 4);
+ __GLX_SWAP_FLOAT(pc + 8);
+ __GLX_SWAP_FLOAT(pc + 16);
+ __GLX_SWAP_FLOAT(pc + 20);
+
+ target = *(GLenum *)(pc + 0);
+ uorder = *(GLint *)(pc + 12);
+ vorder = *(GLint *)(pc + 24);
+ u1 = *(GLfloat *)(pc + 4);
+ u2 = *(GLfloat *)(pc + 8);
+ v1 = *(GLfloat *)(pc + 16);
+ v2 = *(GLfloat *)(pc + 20);
+ points = (GLfloat *)(pc + 28);
+
+ k = __glEvalComputeK(target);
+ ustride = vorder * k;
+ vstride = k;
+
+ if (vorder <= 0 || uorder <= 0 || k < 0) {
+ /* Erroneous command. */
+ compsize = 0;
+ } else {
+ compsize = uorder * vorder * k;
+ }
+ __GLX_SWAP_FLOAT_ARRAY(points, compsize);
+
+}
+
+void __glXDispSwap_Map1d(GLbyte *pc)
+{
+ GLint order, k, compsize;
+ GLenum target;
+ GLdouble u1, u2, *points;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_INT(pc + 16);
+ __GLX_SWAP_INT(pc + 20);
+
+ target = *(GLenum*) (pc + 16);
+ order = *(GLint*) (pc + 20);
+ k = __glEvalComputeK(target);
+ if (order <= 0 || k < 0) {
+ /* Erroneous command. */
+ compsize = 0;
+ } else {
+ compsize = order * k;
+ }
+ __GLX_GET_DOUBLE(u1,pc);
+ __GLX_GET_DOUBLE(u2,pc+8);
+ __GLX_SWAP_DOUBLE_ARRAY(pc+24, compsize);
+ pc += 24;
+
+#ifdef __GLX_ALIGN64
+ if (((unsigned long)pc) & 7) {
+ /*
+ ** Copy the doubles up 4 bytes, trashing the command but aligning
+ ** the data in the process
+ */
+ __GLX_MEM_COPY(pc-4, pc, compsize*8);
+ points = (GLdouble*) (pc - 4);
+ } else {
+ points = (GLdouble*) pc;
+ }
+#else
+ points = (GLdouble*) pc;
+#endif
+}
+
+void __glXDispSwap_Map2d(GLbyte *pc)
+{
+ GLdouble u1, u2, v1, v2, *points;
+ GLint uorder, vorder, ustride, vstride, k, compsize;
+ GLenum target;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_DOUBLE(pc + 0);
+ __GLX_SWAP_DOUBLE(pc + 8);
+ __GLX_SWAP_DOUBLE(pc + 16);
+ __GLX_SWAP_DOUBLE(pc + 24);
+ __GLX_SWAP_INT(pc + 32);
+ __GLX_SWAP_INT(pc + 36);
+ __GLX_SWAP_INT(pc + 40);
+
+ target = *(GLenum *)(pc + 32);
+ uorder = *(GLint *)(pc + 36);
+ vorder = *(GLint *)(pc + 40);
+ k = __glEvalComputeK(target);
+ if (vorder <= 0 || uorder <= 0 || k < 0) {
+ /* Erroneous command. */
+ compsize = 0;
+ } else {
+ compsize = uorder * vorder * k;
+ }
+ __GLX_GET_DOUBLE(u1,pc);
+ __GLX_GET_DOUBLE(u2,pc+8);
+ __GLX_GET_DOUBLE(v1,pc+16);
+ __GLX_GET_DOUBLE(v2,pc+24);
+ __GLX_SWAP_DOUBLE_ARRAY(pc+44, compsize);
+ pc += 44;
+ ustride = vorder * k;
+ vstride = k;
+
+#ifdef __GLX_ALIGN64
+ if (((unsigned long)pc) & 7) {
+ /*
+ ** Copy the doubles up 4 bytes, trashing the command but aligning
+ ** the data in the process
+ */
+ __GLX_MEM_COPY(pc-4, pc, compsize*8);
+ points = (GLdouble*) (pc - 4);
+ } else {
+ points = (GLdouble*) pc;
+ }
+#else
+ points = (GLdouble*) pc;
+#endif
+}
+
+void __glXDispSwap_CallLists(GLbyte *pc)
+{
+ GLenum type;
+ GLsizei n;
+ __GLX_DECLARE_SWAP_VARIABLES;
+ __GLX_DECLARE_SWAP_ARRAY_VARIABLES;
+
+ __GLX_SWAP_INT(pc + 4);
+ __GLX_SWAP_INT(pc + 0);
+ type = *(GLenum *)(pc + 4);
+ n = *(GLsizei *)(pc + 0);
+
+ switch (type) {
+ case GL_BYTE:
+ case GL_UNSIGNED_BYTE:
+ case GL_2_BYTES:
+ case GL_3_BYTES:
+ case GL_4_BYTES:
+ break;
+ case GL_SHORT:
+ case GL_UNSIGNED_SHORT:
+ __GLX_SWAP_SHORT_ARRAY(pc+8, n);
+ break;
+ case GL_INT:
+ case GL_UNSIGNED_INT:
+ __GLX_SWAP_INT_ARRAY(pc+8, n);
+ break;
+ case GL_FLOAT:
+ __GLX_SWAP_FLOAT_ARRAY(pc+8, n);
+ break;
+ }
+
+}
+
+void __glXDispSwap_DrawArrays(GLbyte *pc)
+{
+ __GLXdispatchDrawArraysHeader *hdr = (__GLXdispatchDrawArraysHeader *)pc;
+ __GLXdispatchDrawArraysComponentHeader *compHeader;
+ int i;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT(&hdr->numVertexes);
+ __GLX_SWAP_INT(&hdr->numComponents);
+ __GLX_SWAP_INT(&hdr->primType);
+
+ pc += sizeof(__GLXdispatchDrawArraysHeader);
+ compHeader = (__GLXdispatchDrawArraysComponentHeader *) pc;
+
+ /* compute stride (same for all component arrays) */
+ for (i=0; i<hdr->numComponents; i++) {
+ __GLX_SWAP_INT(&compHeader[i].datatype);
+ __GLX_SWAP_INT(&compHeader[i].numVals);
+ __GLX_SWAP_INT(&compHeader[i].component);
+
+ }
+
+}
diff --git a/hw/dmx/glxProxy/renderpixswap.c b/hw/dmx/glxProxy/renderpixswap.c
new file mode 100644
index 0000000..9deb30d
--- /dev/null
+++ b/hw/dmx/glxProxy/renderpixswap.c
@@ -0,0 +1,383 @@
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#include "glxserver.h"
+#include "unpack.h"
+#include "g_disptab.h"
+
+void __glXDispSwap_PolygonStipple(GLbyte *pc)
+{
+ __GLXpixelHeader *hdr = (__GLXpixelHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_Bitmap(GLbyte *pc)
+{
+ __GLXdispatchBitmapHeader *hdr = (__GLXdispatchBitmapHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_FLOAT((GLbyte *)&hdr->xorig);
+ __GLX_SWAP_FLOAT((GLbyte *)&hdr->yorig);
+ __GLX_SWAP_FLOAT((GLbyte *)&hdr->xmove);
+ __GLX_SWAP_FLOAT((GLbyte *)&hdr->ymove);
+
+ hdr->swapBytes = !hdr->swapBytes;
+
+}
+
+void __glXDispSwap_TexImage1D(GLbyte *pc)
+{
+ __GLXdispatchTexImageHeader *hdr = (__GLXdispatchTexImageHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->level);
+ __GLX_SWAP_INT((GLbyte *)&hdr->components);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->border);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_TexImage2D(GLbyte *pc)
+{
+ __GLXdispatchTexImageHeader *hdr = (__GLXdispatchTexImageHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->level);
+ __GLX_SWAP_INT((GLbyte *)&hdr->components);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->border);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_TexImage3D(GLbyte *pc)
+{
+ __GLXdispatchTexImage3DHeader *hdr = (__GLXdispatchTexImage3DHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->imageHeight);
+ __GLX_SWAP_INT((GLbyte *)&hdr->imageDepth);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipImages);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipVolumes);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->level);
+ __GLX_SWAP_INT((GLbyte *)&hdr->internalformat);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->depth);
+ __GLX_SWAP_INT((GLbyte *)&hdr->size4d);
+ __GLX_SWAP_INT((GLbyte *)&hdr->border);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_DrawPixels(GLbyte *pc)
+{
+ __GLXdispatchDrawPixelsHeader *hdr = (__GLXdispatchDrawPixelsHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_TexSubImage1D(GLbyte *pc)
+{
+ __GLXdispatchTexSubImageHeader *hdr = (__GLXdispatchTexSubImageHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->level);
+ __GLX_SWAP_INT((GLbyte *)&hdr->xoffset);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_TexSubImage2D(GLbyte *pc)
+{
+ __GLXdispatchTexSubImageHeader *hdr = (__GLXdispatchTexSubImageHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->level);
+ __GLX_SWAP_INT((GLbyte *)&hdr->xoffset);
+ __GLX_SWAP_INT((GLbyte *)&hdr->yoffset);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_TexSubImage3D(GLbyte *pc)
+{
+ __GLXdispatchTexSubImage3DHeader *hdr =
+ (__GLXdispatchTexSubImage3DHeader *) pc;
+
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->imageHeight);
+ __GLX_SWAP_INT((GLbyte *)&hdr->imageDepth);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipImages);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipVolumes);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->level);
+ __GLX_SWAP_INT((GLbyte *)&hdr->xoffset);
+ __GLX_SWAP_INT((GLbyte *)&hdr->yoffset);
+ __GLX_SWAP_INT((GLbyte *)&hdr->zoffset);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->depth);
+ __GLX_SWAP_INT((GLbyte *)&hdr->size4d);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_ColorTable(GLbyte *pc)
+{
+ __GLXdispatchColorTableHeader *hdr =
+ (__GLXdispatchColorTableHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->internalformat);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_ColorSubTable(GLbyte *pc)
+{
+ __GLXdispatchColorSubTableHeader *hdr =
+ (__GLXdispatchColorSubTableHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->start);
+ __GLX_SWAP_INT((GLbyte *)&hdr->count);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_ConvolutionFilter1D(GLbyte *pc)
+{
+ __GLXdispatchConvolutionFilterHeader *hdr =
+ (__GLXdispatchConvolutionFilterHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->internalformat);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_ConvolutionFilter2D(GLbyte *pc)
+{
+ __GLXdispatchConvolutionFilterHeader *hdr =
+ (__GLXdispatchConvolutionFilterHeader *) pc;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->internalformat);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
+
+void __glXDispSwap_SeparableFilter2D(GLbyte *pc)
+{
+ __GLXdispatchConvolutionFilterHeader *hdr =
+ (__GLXdispatchConvolutionFilterHeader *) pc;
+ GLint hdrlen;
+ __GLX_DECLARE_SWAP_VARIABLES;
+
+ hdrlen = __GLX_PAD(__GLX_CONV_FILT_CMD_HDR_SIZE);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->rowLength);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipRows);
+ __GLX_SWAP_INT((GLbyte *)&hdr->skipPixels);
+ __GLX_SWAP_INT((GLbyte *)&hdr->alignment);
+
+ __GLX_SWAP_INT((GLbyte *)&hdr->target);
+ __GLX_SWAP_INT((GLbyte *)&hdr->internalformat);
+ __GLX_SWAP_INT((GLbyte *)&hdr->width);
+ __GLX_SWAP_INT((GLbyte *)&hdr->height);
+ __GLX_SWAP_INT((GLbyte *)&hdr->format);
+ __GLX_SWAP_INT((GLbyte *)&hdr->type);
+
+ /*
+ ** Just invert swapBytes flag; the GL will figure out if it needs to swap
+ ** the pixel data.
+ */
+ hdr->swapBytes = !hdr->swapBytes;
+}
diff --git a/hw/dmx/glxProxy/unpack.h b/hw/dmx/glxProxy/unpack.h
new file mode 100644
index 0000000..f4a9572
--- /dev/null
+++ b/hw/dmx/glxProxy/unpack.h
@@ -0,0 +1,230 @@
+#ifndef __GLX_unpack_h__
+#define __GLX_unpack_h__
+
+/*
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
+
+#define __GLX_PAD(s) (((s)+3) & (GLuint)~3)
+
+/*
+** Fetch the context-id out of a SingleReq request pointed to by pc.
+*/
+#define __GLX_GET_SINGLE_CONTEXT_TAG(pc) (((xGLXSingleReq*)pc)->contextTag)
+#define __GLX_GET_VENDPRIV_CONTEXT_TAG(pc) (((xGLXVendorPrivateReq*)pc)->contextTag)
+
+/*
+** Fetch a double from potentially unaligned memory.
+*/
+#ifdef __GLX_ALIGN64
+#define __GLX_MEM_COPY(dst,src,n) memmove(dst,src,n)
+#define __GLX_GET_DOUBLE(dst,src) __GLX_MEM_COPY(&dst,src,8)
+#else
+#define __GLX_GET_DOUBLE(dst,src) (dst) = *((GLdouble*)(src))
+#endif
+
+extern void __glXMemInit(void);
+
+extern xGLXSingleReply __glXReply;
+
+#define __GLX_BEGIN_REPLY(size) \
+ __glXReply.length = __GLX_PAD(size) >> 2; \
+ __glXReply.type = X_Reply; \
+ __glXReply.sequenceNumber = client->sequence;
+
+#define __GLX_SEND_HEADER() \
+ WriteToClient( client, sz_xGLXSingleReply, (char *)&__glXReply);
+
+#define __GLX_PUT_RETVAL(a) \
+ __glXReply.retval = (a);
+
+#define __GLX_PUT_SIZE(a) \
+ __glXReply.size = (a);
+
+#define __GLX_PUT_RENDERMODE(m) \
+ __glXReply.pad3 = (m)
+
+/*
+** Get a buffer to hold returned data, with the given alignment. If we have
+** to realloc, allocate size+align, in case the pointer has to be bumped for
+** alignment. The answerBuffer should already be aligned.
+**
+** NOTE: the cast (long)res below assumes a long is large enough to hold a
+** pointer.
+*/
+#define __GLX_GET_ANSWER_BUFFER(res,cl,size,align) \
+ if ((size) > sizeof(answerBuffer)) { \
+ int bump; \
+ if ((cl)->returnBufSize < (size)+(align)) { \
+ (cl)->returnBuf = (GLbyte*)realloc((cl)->returnBuf, \
+ (size)+(align)); \
+ if (!(cl)->returnBuf) { \
+ return BadAlloc; \
+ } \
+ (cl)->returnBufSize = (size)+(align); \
+ } \
+ res = (char*)cl->returnBuf; \
+ bump = (long)(res) % (align); \
+ if (bump) res += (align) - (bump); \
+ } else { \
+ res = (char *)answerBuffer; \
+ }
+
+#define __GLX_PUT_BYTE() \
+ *(GLbyte *)&__glXReply.pad3 = *(GLbyte *)answer
+
+#define __GLX_PUT_SHORT() \
+ *(GLshort *)&__glXReply.pad3 = *(GLshort *)answer
+
+#define __GLX_PUT_INT() \
+ *(GLint *)&__glXReply.pad3 = *(GLint *)answer
+
+#define __GLX_PUT_FLOAT() \
+ *(GLfloat *)&__glXReply.pad3 = *(GLfloat *)answer
+
+#define __GLX_PUT_DOUBLE() \
+ *(GLdouble *)&__glXReply.pad3 = *(GLdouble *)answer
+
+#define __GLX_SEND_BYTE_ARRAY(len) \
+ WriteToClient(client, __GLX_PAD((len)*__GLX_SIZE_INT8), (char *)answer)
+
+#define __GLX_SEND_SHORT_ARRAY(len) \
+ WriteToClient(client, __GLX_PAD((len)*__GLX_SIZE_INT16), (char *)answer)
+
+#define __GLX_SEND_INT_ARRAY(len) \
+ WriteToClient(client, (len)*__GLX_SIZE_INT32, (char *)answer)
+
+#define __GLX_SEND_FLOAT_ARRAY(len) \
+ WriteToClient(client, (len)*__GLX_SIZE_FLOAT32, (char *)answer)
+
+#define __GLX_SEND_DOUBLE_ARRAY(len) \
+ WriteToClient(client, (len)*__GLX_SIZE_FLOAT64, (char *)answer)
+
+
+#define __GLX_SEND_VOID_ARRAY(len) __GLX_SEND_BYTE_ARRAY(len)
+#define __GLX_SEND_UBYTE_ARRAY(len) __GLX_SEND_BYTE_ARRAY(len)
+#define __GLX_SEND_USHORT_ARRAY(len) __GLX_SEND_SHORT_ARRAY(len)
+#define __GLX_SEND_UINT_ARRAY(len) __GLX_SEND_INT_ARRAY(len)
+
+/*
+** PERFORMANCE NOTE:
+** Machine dependent optimizations abound here; these swapping macros can
+** conceivably be replaced with routines that do the job faster.
+*/
+#define __GLX_DECLARE_SWAP_VARIABLES \
+ GLbyte sw
+
+#define __GLX_DECLARE_SWAP_ARRAY_VARIABLES \
+ GLbyte *swapPC; \
+ GLbyte *swapEnd
+
+
+#define __GLX_SWAP_INT(pc) \
+ sw = ((GLbyte *)(pc))[0]; \
+ ((GLbyte *)(pc))[0] = ((GLbyte *)(pc))[3]; \
+ ((GLbyte *)(pc))[3] = sw; \
+ sw = ((GLbyte *)(pc))[1]; \
+ ((GLbyte *)(pc))[1] = ((GLbyte *)(pc))[2]; \
+ ((GLbyte *)(pc))[2] = sw;
+
+#define __GLX_SWAP_SHORT(pc) \
+ sw = ((GLbyte *)(pc))[0]; \
+ ((GLbyte *)(pc))[0] = ((GLbyte *)(pc))[1]; \
+ ((GLbyte *)(pc))[1] = sw;
+
+#define __GLX_SWAP_DOUBLE(pc) \
+ sw = ((GLbyte *)(pc))[0]; \
+ ((GLbyte *)(pc))[0] = ((GLbyte *)(pc))[7]; \
+ ((GLbyte *)(pc))[7] = sw; \
+ sw = ((GLbyte *)(pc))[1]; \
+ ((GLbyte *)(pc))[1] = ((GLbyte *)(pc))[6]; \
+ ((GLbyte *)(pc))[6] = sw; \
+ sw = ((GLbyte *)(pc))[2]; \
+ ((GLbyte *)(pc))[2] = ((GLbyte *)(pc))[5]; \
+ ((GLbyte *)(pc))[5] = sw; \
+ sw = ((GLbyte *)(pc))[3]; \
+ ((GLbyte *)(pc))[3] = ((GLbyte *)(pc))[4]; \
+ ((GLbyte *)(pc))[4] = sw;
+
+#define __GLX_SWAP_FLOAT(pc) \
+ sw = ((GLbyte *)(pc))[0]; \
+ ((GLbyte *)(pc))[0] = ((GLbyte *)(pc))[3]; \
+ ((GLbyte *)(pc))[3] = sw; \
+ sw = ((GLbyte *)(pc))[1]; \
+ ((GLbyte *)(pc))[1] = ((GLbyte *)(pc))[2]; \
+ ((GLbyte *)(pc))[2] = sw;
+
+#define __GLX_SWAP_INT_ARRAY(pc, count) \
+ swapPC = ((GLbyte *)(pc)); \
+ swapEnd = ((GLbyte *)(pc)) + (count)*__GLX_SIZE_INT32;\
+ while (swapPC < swapEnd) { \
+ __GLX_SWAP_INT(swapPC); \
+ swapPC += __GLX_SIZE_INT32; \
+ }
+
+#define __GLX_SWAP_SHORT_ARRAY(pc, count) \
+ swapPC = ((GLbyte *)(pc)); \
+ swapEnd = ((GLbyte *)(pc)) + (count)*__GLX_SIZE_INT16;\
+ while (swapPC < swapEnd) { \
+ __GLX_SWAP_SHORT(swapPC); \
+ swapPC += __GLX_SIZE_INT16; \
+ }
+
+#define __GLX_SWAP_DOUBLE_ARRAY(pc, count) \
+ swapPC = ((GLbyte *)(pc)); \
+ swapEnd = ((GLbyte *)(pc)) + (count)*__GLX_SIZE_FLOAT64;\
+ while (swapPC < swapEnd) { \
+ __GLX_SWAP_DOUBLE(swapPC); \
+ swapPC += __GLX_SIZE_FLOAT64; \
+ }
+
+#define __GLX_SWAP_FLOAT_ARRAY(pc, count) \
+ swapPC = ((GLbyte *)(pc)); \
+ swapEnd = ((GLbyte *)(pc)) + (count)*__GLX_SIZE_FLOAT32;\
+ while (swapPC < swapEnd) { \
+ __GLX_SWAP_FLOAT(swapPC); \
+ swapPC += __GLX_SIZE_FLOAT32; \
+ }
+
+#define __GLX_SWAP_REPLY_HEADER() \
+ __GLX_SWAP_SHORT(&__glXReply.sequenceNumber); \
+ __GLX_SWAP_INT(&__glXReply.length);
+
+#define __GLX_SWAP_REPLY_RETVAL() \
+ __GLX_SWAP_INT(&__glXReply.retval)
+
+#define __GLX_SWAP_REPLY_SIZE() \
+ __GLX_SWAP_INT(&__glXReply.size)
+
+#endif /* !__GLX_unpack_h__ */
+
+
+
+
+
diff --git a/hw/dmx/input/ChkNotMaskEv.c b/hw/dmx/input/ChkNotMaskEv.c
new file mode 100644
index 0000000..635332e
--- /dev/null
+++ b/hw/dmx/input/ChkNotMaskEv.c
@@ -0,0 +1,106 @@
+/*
+ * Copyright 1985, 1987, 1998 The Open Group
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation.
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of The Open Group shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from The Open Group.
+ */
+/* $XFree86 */
+
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/** \file
+ * This file provides a #XCheckNotMaskEvent function that is derived
+ * from the standard Xlib XCheckMaskEvent function. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "ChkNotMaskEv.h"
+
+extern long const _Xevent_to_mask[];
+
+/** Check existing events in queue to find if any match. If so, return.
+ * If not, flush buffer and see if any more events are readable. If one
+ * matches, return. If all else fails, tell the user no events found.
+ */
+Bool XCheckNotMaskEvent (Display *dpy, long mask, XEvent *event)
+{
+ register _XQEvent *prev, *qelt;
+ unsigned long qe_serial = 0;
+ int n; /* time through count */
+
+ LockDisplay(dpy);
+ prev = NULL;
+ for (n = 3; --n >= 0;) {
+ for (qelt = prev ? prev->next : dpy->head;
+ qelt;
+ prev = qelt, qelt = qelt->next) {
+ if (qelt->event.type >= LASTEvent
+ || !(_Xevent_to_mask[qelt->event.type] & mask)) {
+ *event = qelt->event;
+ _XDeq(dpy, prev, qelt);
+ UnlockDisplay(dpy);
+ return True;
+ }
+ }
+ if (prev)
+ qe_serial = prev->qserial_num;
+ switch (n) {
+ case 2:
+ _XEventsQueued(dpy, QueuedAfterReading);
+ break;
+ case 1:
+ _XFlush(dpy);
+ break;
+ }
+ if (prev && prev->qserial_num != qe_serial)
+ /* another thread has snatched this event */
+ prev = NULL;
+ }
+ UnlockDisplay(dpy);
+ return False;
+}
diff --git a/hw/dmx/input/ChkNotMaskEv.h b/hw/dmx/input/ChkNotMaskEv.h
new file mode 100644
index 0000000..f79075e
--- /dev/null
+++ b/hw/dmx/input/ChkNotMaskEv.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for #XCheckNotMaskEvent function. \see ChkNotMaskEv.c */
+
+#ifndef _CHKNOTMASKEV_H_
+#define _CHKNOTMASKEV_H_
+extern Bool XCheckNotMaskEvent (Display *dpy, long mask, XEvent *event);
+#endif
diff --git a/hw/dmx/input/Makefile.am b/hw/dmx/input/Makefile.am
new file mode 100644
index 0000000..185aaf8
--- /dev/null
+++ b/hw/dmx/input/Makefile.am
@@ -0,0 +1,67 @@
+noinst_LIBRARIES = libdmxinput.a
+
+if DMX_BUILD_LNX
+RAWSRCS = lnx-keyboard.c \
+ lnx-keyboard.h \
+ lnx-ms.c \
+ lnx-ms.h \
+ lnx-ps2.c \
+ lnx-ps2.h
+endif
+
+if DMX_BUILD_USB
+USBSRCS = usb-keyboard.c \
+ usb-keyboard.h \
+ usb-mouse.c \
+ usb-mouse.h \
+ usb-other.c \
+ usb-other.h \
+ usb-common.c \
+ usb-common.h \
+ usb-private.h
+endif
+
+DRVSRCS = dmxdummy.c \
+ dmxdummy.h \
+ dmxbackend.c \
+ dmxbackend.h \
+ dmxconsole.c \
+ dmxconsole.h \
+ dmxcommon.c \
+ dmxcommon.h
+
+DMXSRCS = dmxinputinit.c \
+ dmxinputinit.h \
+ dmxarg.c \
+ dmxarg.h \
+ dmxsigio.c \
+ dmxsigio.h \
+ dmxevents.c \
+ dmxevents.h \
+ dmxxinput.c \
+ dmxmotion.c \
+ dmxmotion.h \
+ dmxmap.c \
+ dmxmap.h
+
+
+libdmxinput_a_SOURCES = ChkNotMaskEv.c \
+ ChkNotMaskEv.h \
+ atKeynames.h \
+ $(RAWSRCS) \
+ $(USBSRCS) \
+ $(DRVSRCS) \
+ $(DMXSRCS) \
+ $(LIBSRCS)
+
+if GLX
+GLX_DEFS = @GL_CFLAGS@
+endif
+
+AM_CFLAGS = $(DIX_CFLAGS) \
+ -I$(top_srcdir)/hw/dmx \
+ -DHAVE_DMX_CONFIG_H \
+ $(GLX_DEFS) \
+ @DMXMODULES_CFLAGS@
+
+EXTRA_DIST = dmxdetach.c
diff --git a/hw/dmx/input/Makefile.in b/hw/dmx/input/Makefile.in
new file mode 100644
index 0000000..29595c9
--- /dev/null
+++ b/hw/dmx/input/Makefile.in
@@ -0,0 +1,792 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = hw/dmx/input
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_$(V))
+am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY))
+am__v_AR_0 = @echo " AR " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+libdmxinput_a_AR = $(AR) $(ARFLAGS)
+libdmxinput_a_LIBADD =
+am__libdmxinput_a_SOURCES_DIST = ChkNotMaskEv.c ChkNotMaskEv.h \
+ atKeynames.h lnx-keyboard.c lnx-keyboard.h lnx-ms.c lnx-ms.h \
+ lnx-ps2.c lnx-ps2.h usb-keyboard.c usb-keyboard.h usb-mouse.c \
+ usb-mouse.h usb-other.c usb-other.h usb-common.c usb-common.h \
+ usb-private.h dmxdummy.c dmxdummy.h dmxbackend.c dmxbackend.h \
+ dmxconsole.c dmxconsole.h dmxcommon.c dmxcommon.h \
+ dmxinputinit.c dmxinputinit.h dmxarg.c dmxarg.h dmxsigio.c \
+ dmxsigio.h dmxevents.c dmxevents.h dmxxinput.c dmxmotion.c \
+ dmxmotion.h dmxmap.c dmxmap.h
+@DMX_BUILD_LNX_TRUE@am__objects_1 = lnx-keyboard.$(OBJEXT) \
+@DMX_BUILD_LNX_TRUE@ lnx-ms.$(OBJEXT) lnx-ps2.$(OBJEXT)
+@DMX_BUILD_USB_TRUE@am__objects_2 = usb-keyboard.$(OBJEXT) \
+@DMX_BUILD_USB_TRUE@ usb-mouse.$(OBJEXT) usb-other.$(OBJEXT) \
+@DMX_BUILD_USB_TRUE@ usb-common.$(OBJEXT)
+am__objects_3 = dmxdummy.$(OBJEXT) dmxbackend.$(OBJEXT) \
+ dmxconsole.$(OBJEXT) dmxcommon.$(OBJEXT)
+am__objects_4 = dmxinputinit.$(OBJEXT) dmxarg.$(OBJEXT) \
+ dmxsigio.$(OBJEXT) dmxevents.$(OBJEXT) dmxxinput.$(OBJEXT) \
+ dmxmotion.$(OBJEXT) dmxmap.$(OBJEXT)
+am_libdmxinput_a_OBJECTS = ChkNotMaskEv.$(OBJEXT) $(am__objects_1) \
+ $(am__objects_2) $(am__objects_3) $(am__objects_4)
+libdmxinput_a_OBJECTS = $(am_libdmxinput_a_OBJECTS)
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libdmxinput_a_SOURCES)
+DIST_SOURCES = $(am__libdmxinput_a_SOURCES_DIST)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MAN_SUBSTS = @MAN_SUBSTS@
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_LIBRARIES = libdmxinput.a
+@DMX_BUILD_LNX_TRUE@RAWSRCS = lnx-keyboard.c \
+@DMX_BUILD_LNX_TRUE@ lnx-keyboard.h \
+@DMX_BUILD_LNX_TRUE@ lnx-ms.c \
+@DMX_BUILD_LNX_TRUE@ lnx-ms.h \
+@DMX_BUILD_LNX_TRUE@ lnx-ps2.c \
+@DMX_BUILD_LNX_TRUE@ lnx-ps2.h
+
+@DMX_BUILD_USB_TRUE@USBSRCS = usb-keyboard.c \
+@DMX_BUILD_USB_TRUE@ usb-keyboard.h \
+@DMX_BUILD_USB_TRUE@ usb-mouse.c \
+@DMX_BUILD_USB_TRUE@ usb-mouse.h \
+@DMX_BUILD_USB_TRUE@ usb-other.c \
+@DMX_BUILD_USB_TRUE@ usb-other.h \
+@DMX_BUILD_USB_TRUE@ usb-common.c \
+@DMX_BUILD_USB_TRUE@ usb-common.h \
+@DMX_BUILD_USB_TRUE@ usb-private.h
+
+DRVSRCS = dmxdummy.c \
+ dmxdummy.h \
+ dmxbackend.c \
+ dmxbackend.h \
+ dmxconsole.c \
+ dmxconsole.h \
+ dmxcommon.c \
+ dmxcommon.h
+
+DMXSRCS = dmxinputinit.c \
+ dmxinputinit.h \
+ dmxarg.c \
+ dmxarg.h \
+ dmxsigio.c \
+ dmxsigio.h \
+ dmxevents.c \
+ dmxevents.h \
+ dmxxinput.c \
+ dmxmotion.c \
+ dmxmotion.h \
+ dmxmap.c \
+ dmxmap.h
+
+libdmxinput_a_SOURCES = ChkNotMaskEv.c \
+ ChkNotMaskEv.h \
+ atKeynames.h \
+ $(RAWSRCS) \
+ $(USBSRCS) \
+ $(DRVSRCS) \
+ $(DMXSRCS) \
+ $(LIBSRCS)
+
+@GLX_TRUE@GLX_DEFS = @GL_CFLAGS@
+AM_CFLAGS = $(DIX_CFLAGS) \
+ -I$(top_srcdir)/hw/dmx \
+ -DHAVE_DMX_CONFIG_H \
+ $(GLX_DEFS) \
+ @DMXMODULES_CFLAGS@
+
+EXTRA_DIST = dmxdetach.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/input/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/input/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+libdmxinput.a: $(libdmxinput_a_OBJECTS) $(libdmxinput_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libdmxinput.a
+ $(AM_V_AR)$(libdmxinput_a_AR) libdmxinput.a $(libdmxinput_a_OBJECTS) $(libdmxinput_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libdmxinput.a
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChkNotMaskEv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxarg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxbackend.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxcommon.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxconsole.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxdummy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxevents.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxinputinit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxmap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxmotion.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxsigio.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmxxinput.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx-keyboard.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx-ms.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lnx-ps2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usb-common.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usb-keyboard.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usb-mouse.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usb-other.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/input/atKeynames.h b/hw/dmx/input/atKeynames.h
new file mode 100644
index 0000000..6aea1ed
--- /dev/null
+++ b/hw/dmx/input/atKeynames.h
@@ -0,0 +1,292 @@
+/*
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the 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 Thomas Roell not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Thomas Roell makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THOMAS ROELL 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.
+ *
+ */
+/*
+ * Copyright (c) 1994-2003 by The XFree86 Project, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
+#ifndef _ATKEYNAMES_H
+#define _ATKEYNAMES_H
+
+#define XK_TECHNICAL
+#define XK_KATAKANA
+#include <X11/keysym.h>
+#include <X11/XF86keysym.h>
+
+#define GLYPHS_PER_KEY 4
+#define NUM_KEYCODES 248
+#define MIN_KEYCODE 8
+#define MAX_KEYCODE (NUM_KEYCODES + MIN_KEYCODE - 1)
+
+#define AltMask Mod1Mask
+#define NumLockMask Mod2Mask
+#define AltLangMask Mod3Mask
+#define KanaMask Mod4Mask
+#define ScrollLockMask Mod5Mask
+
+/*
+ * NOTE: The AT/MF keyboards can generate (via the 8042) two (MF: three)
+ * sets of scancodes. Set3 can only be generated by a MF keyboard.
+ * Set2 sends a makecode for keypress, and the same code prefixed by a
+ * F0 for keyrelease. This is a little bit ugly to handle. Thus we use
+ * here for X386 the PC/XT compatible Set1. This set uses 8bit scancodes.
+ * Bit 7 ist set if the key is released. The code E0 switches to a
+ * different meaning to add the new MF cursorkeys, while not breaking old
+ * applications. E1 is another special prefix. Since I assume that there
+ * will be further versions of PC/XT scancode compatible keyboards, we
+ * may be in trouble one day.
+ *
+ * IDEA: 1) Use Set2 on AT84 keyboards and translate it to MF Set3.
+ * 2) Use the keyboards native set and translate it to common keysyms.
+ */
+
+/*
+ * definition of the AT84/MF101/MF102 Keyboard:
+ * ============================================================
+ * Defined Key Cap Glyphs Pressed value
+ * Key Name Main Also (hex) (dec)
+ * ---------------- ---------- ------- ------ ------
+ */
+
+#define KEY_Escape /* Escape 0x01 */ 1
+#define KEY_1 /* 1 ! 0x02 */ 2
+#define KEY_2 /* 2 @ 0x03 */ 3
+#define KEY_3 /* 3 # 0x04 */ 4
+#define KEY_4 /* 4 $ 0x05 */ 5
+#define KEY_5 /* 5 % 0x06 */ 6
+#define KEY_6 /* 6 ^ 0x07 */ 7
+#define KEY_7 /* 7 & 0x08 */ 8
+#define KEY_8 /* 8 * 0x09 */ 9
+#define KEY_9 /* 9 ( 0x0a */ 10
+#define KEY_0 /* 0 ) 0x0b */ 11
+#define KEY_Minus /* - (Minus) _ (Under) 0x0c */ 12
+#define KEY_Equal /* = (Equal) + 0x0d */ 13
+#define KEY_BackSpace /* Back Space 0x0e */ 14
+#define KEY_Tab /* Tab 0x0f */ 15
+#define KEY_Q /* Q 0x10 */ 16
+#define KEY_W /* W 0x11 */ 17
+#define KEY_E /* E 0x12 */ 18
+#define KEY_R /* R 0x13 */ 19
+#define KEY_T /* T 0x14 */ 20
+#define KEY_Y /* Y 0x15 */ 21
+#define KEY_U /* U 0x16 */ 22
+#define KEY_I /* I 0x17 */ 23
+#define KEY_O /* O 0x18 */ 24
+#define KEY_P /* P 0x19 */ 25
+#define KEY_LBrace /* [ { 0x1a */ 26
+#define KEY_RBrace /* ] } 0x1b */ 27
+#define KEY_Enter /* Enter 0x1c */ 28
+#define KEY_LCtrl /* Ctrl(left) 0x1d */ 29
+#define KEY_A /* A 0x1e */ 30
+#define KEY_S /* S 0x1f */ 31
+#define KEY_D /* D 0x20 */ 32
+#define KEY_F /* F 0x21 */ 33
+#define KEY_G /* G 0x22 */ 34
+#define KEY_H /* H 0x23 */ 35
+#define KEY_J /* J 0x24 */ 36
+#define KEY_K /* K 0x25 */ 37
+#define KEY_L /* L 0x26 */ 38
+#define KEY_SemiColon /* ;(SemiColon) :(Colon) 0x27 */ 39
+#define KEY_Quote /* ' (Apostr) " (Quote) 0x28 */ 40
+#define KEY_Tilde /* ` (Accent) ~ (Tilde) 0x29 */ 41
+#define KEY_ShiftL /* Shift(left) 0x2a */ 42
+#define KEY_BSlash /* \(BckSlash) |(VertBar)0x2b */ 43
+#define KEY_Z /* Z 0x2c */ 44
+#define KEY_X /* X 0x2d */ 45
+#define KEY_C /* C 0x2e */ 46
+#define KEY_V /* V 0x2f */ 47
+#define KEY_B /* B 0x30 */ 48
+#define KEY_N /* N 0x31 */ 49
+#define KEY_M /* M 0x32 */ 50
+#define KEY_Comma /* , (Comma) < (Less) 0x33 */ 51
+#define KEY_Period /* . (Period) >(Greater)0x34 */ 52
+#define KEY_Slash /* / (Slash) ? 0x35 */ 53
+#define KEY_ShiftR /* Shift(right) 0x36 */ 54
+#define KEY_KP_Multiply /* * 0x37 */ 55
+#define KEY_Alt /* Alt(left) 0x38 */ 56
+#define KEY_Space /* (SpaceBar) 0x39 */ 57
+#define KEY_CapsLock /* CapsLock 0x3a */ 58
+#define KEY_F1 /* F1 0x3b */ 59
+#define KEY_F2 /* F2 0x3c */ 60
+#define KEY_F3 /* F3 0x3d */ 61
+#define KEY_F4 /* F4 0x3e */ 62
+#define KEY_F5 /* F5 0x3f */ 63
+#define KEY_F6 /* F6 0x40 */ 64
+#define KEY_F7 /* F7 0x41 */ 65
+#define KEY_F8 /* F8 0x42 */ 66
+#define KEY_F9 /* F9 0x43 */ 67
+#define KEY_F10 /* F10 0x44 */ 68
+#define KEY_NumLock /* NumLock 0x45 */ 69
+#define KEY_ScrollLock /* ScrollLock 0x46 */ 70
+#define KEY_KP_7 /* 7 Home 0x47 */ 71
+#define KEY_KP_8 /* 8 Up 0x48 */ 72
+#define KEY_KP_9 /* 9 PgUp 0x49 */ 73
+#define KEY_KP_Minus /* - (Minus) 0x4a */ 74
+#define KEY_KP_4 /* 4 Left 0x4b */ 75
+#define KEY_KP_5 /* 5 0x4c */ 76
+#define KEY_KP_6 /* 6 Right 0x4d */ 77
+#define KEY_KP_Plus /* + (Plus) 0x4e */ 78
+#define KEY_KP_1 /* 1 End 0x4f */ 79
+#define KEY_KP_2 /* 2 Down 0x50 */ 80
+#define KEY_KP_3 /* 3 PgDown 0x51 */ 81
+#define KEY_KP_0 /* 0 Insert 0x52 */ 82
+#define KEY_KP_Decimal /* . (Decimal) Delete 0x53 */ 83
+#define KEY_SysReqest /* SysReqest 0x54 */ 84
+ /* NOTUSED 0x55 */
+#define KEY_Less /* < (Less) >(Greater) 0x56 */ 86
+#define KEY_F11 /* F11 0x57 */ 87
+#define KEY_F12 /* F12 0x58 */ 88
+
+#define KEY_Prefix0 /* special 0x60 */ 96
+#define KEY_Prefix1 /* specail 0x61 */ 97
+
+/*
+ * The 'scancodes' below are generated by the server, because the MF101/102
+ * keyboard sends them as sequence of other scancodes
+ */
+#define KEY_Home /* Home 0x59 */ 89
+#define KEY_Up /* Up 0x5a */ 90
+#define KEY_PgUp /* PgUp 0x5b */ 91
+#define KEY_Left /* Left 0x5c */ 92
+#define KEY_Begin /* Begin 0x5d */ 93
+#define KEY_Right /* Right 0x5e */ 94
+#define KEY_End /* End 0x5f */ 95
+#define KEY_Down /* Down 0x60 */ 96
+#define KEY_PgDown /* PgDown 0x61 */ 97
+#define KEY_Insert /* Insert 0x62 */ 98
+#define KEY_Delete /* Delete 0x63 */ 99
+#define KEY_KP_Enter /* Enter 0x64 */ 100
+#define KEY_RCtrl /* Ctrl(right) 0x65 */ 101
+#define KEY_Pause /* Pause 0x66 */ 102
+#define KEY_Print /* Print 0x67 */ 103
+#define KEY_KP_Divide /* Divide 0x68 */ 104
+#define KEY_AltLang /* AtlLang(right) 0x69 */ 105
+#define KEY_Break /* Break 0x6a */ 106
+#define KEY_LMeta /* Left Meta 0x6b */ 107
+#define KEY_RMeta /* Right Meta 0x6c */ 108
+#define KEY_Menu /* Menu 0x6d */ 109
+#define KEY_F13 /* F13 0x6e */ 110
+#define KEY_F14 /* F14 0x6f */ 111
+#define KEY_F15 /* F15 0x70 */ 112
+#define KEY_HKTG /* Hirugana/Katakana tog 0x70 */ 112
+#define KEY_F16 /* F16 0x71 */ 113
+#define KEY_F17 /* F17 0x72 */ 114
+#define KEY_KP_DEC /* KP_DEC 0x73 */ 115
+#define KEY_BSlash2 /* \ _ 0x73 */ 115
+#define KEY_KP_Equal /* Equal (Keypad) 0x76 */ 118
+#define KEY_XFER /* Kanji Transfer 0x79 */ 121
+#define KEY_NFER /* No Kanji Transfer 0x7b */ 123
+#define KEY_Yen /* Yen 0x7d */ 125
+
+#define KEY_Power /* Power Key 0x84 */ 132
+#define KEY_Mute /* Audio Mute 0x85 */ 133
+#define KEY_AudioLower /* Audio Lower 0x86 */ 134
+#define KEY_AudioRaise /* Audio Raise 0x87 */ 135
+#define KEY_Help /* Help 0x88 */ 136
+#define KEY_L1 /* Stop 0x89 */ 137
+#define KEY_L2 /* Again 0x8a */ 138
+#define KEY_L3 /* Props 0x8b */ 139
+#define KEY_L4 /* Undo 0x8c */ 140
+#define KEY_L5 /* Front 0x8d */ 141
+#define KEY_L6 /* Copy 0x8e */ 142
+#define KEY_L7 /* Open 0x8f */ 143
+#define KEY_L8 /* Paste 0x90 */ 144
+#define KEY_L9 /* Find 0x91 */ 145
+#define KEY_L10 /* Cut 0x92 */ 146
+
+/*
+ * Fake 'scancodes' in the following ranges are generated for 2-byte
+ * codes not handled elsewhere. These correspond to most extended keys
+ * on so-called "Internet" keyboards:
+ *
+ * 0x79-0x93
+ * 0x96-0xa1
+ * 0xa3-0xac
+ * 0xb1-0xb4
+ * 0xba-0xbd
+ * 0xc2
+ * 0xcc-0xd2
+ * 0xd6-0xf7
+ */
+
+/*
+ * Remapped 'scancodes' are generated for single-byte codes in the range
+ * 0x59-0x5f,0x62-0x76. These are used for some extra keys on some keyboards.
+ */
+
+#define KEY_0x59 0x95
+#define KEY_0x5A 0xA2
+#define KEY_0x5B 0xAD
+#define KEY_0x5C KEY_KP_EQUAL
+#define KEY_0x5D 0xAE
+#define KEY_0x5E 0xAF
+#define KEY_0x5F 0xB0
+#define KEY_0x62 0xB5
+#define KEY_0x63 0xB6
+#define KEY_0x64 0xB7
+#define KEY_0x65 0xB8
+#define KEY_0x66 0xB9
+#define KEY_0x67 0xBE
+#define KEY_0x68 0xBF
+#define KEY_0x69 0xC0
+#define KEY_0x6A 0xC1
+#define KEY_0x6B 0xC3
+#define KEY_0x6C 0xC4
+#define KEY_0x6D 0xC5
+#define KEY_0x6E 0xC6
+#define KEY_0x6F 0xC7
+#define KEY_0x70 0xC8
+#define KEY_0x71 0xC9
+#define KEY_0x72 0xCA
+#define KEY_0x73 0xCB
+#define KEY_0x74 0xD3
+#define KEY_0x75 0xD4
+#define KEY_0x76 0xD5
+
+/* These are for "notused" and "unknown" entries in translation maps. */
+#define KEY_NOTUSED 0
+#define KEY_UNKNOWN 255
+
+#endif /* _ATKEYNAMES_H */
diff --git a/hw/dmx/input/dmxarg.c b/hw/dmx/input/dmxarg.c
new file mode 100644
index 0000000..49a1da9
--- /dev/null
+++ b/hw/dmx/input/dmxarg.c
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Generic comma-delimited argument processing. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_ARG_TEST 0
+
+#include "dmx.h"
+#include "dmxarg.h"
+#include <stdio.h>
+#include <string.h>
+
+#if DMX_ARG_TEST
+#include <stdlib.h>
+#endif
+
+/** Stores the parsed argument list. */
+struct _dmxArg {
+ int argc; /**< Number of arguments in argv */
+ int argm; /**< Maximum number of arguments store-able in argv */
+ const char **argv; /**< Arguments */
+};
+
+/** Create an (externally opaque) \a dmxArg object. */
+dmxArg dmxArgCreate(void)
+{
+ dmxArg a = malloc(sizeof(*a));
+ a->argc = 0;
+ a->argm = 2;
+ a->argv = malloc(a->argm * sizeof(*a->argv));
+ a->argv[0] = NULL;
+ return a;
+}
+
+/** Free the specified \a dmxArg object. */
+void dmxArgFree(dmxArg a)
+{
+ int i;
+
+ for (i = 0; i < a->argc; i++) free((char *)a->argv[i]);
+ free(a->argv);
+ free(a);
+}
+
+/** Add the \a string as the next argument in the \a dmxArg object. */
+void dmxArgAdd(dmxArg a, const char *string)
+{
+ if (a->argm <= a->argc + 2)
+ a->argv = realloc(a->argv, sizeof(*a->argv) * (a->argm *= 2));
+ a->argv[a->argc++] = strdup(string);
+ a->argv[a->argc] = NULL;
+}
+
+/** Return the argument number \a item in the \a dmxArg object.
+ * Arguments are 0 based. NULL will be returned for values less than 0
+ * or equal to or greater than the number of arguments in the object. */
+const char *dmxArgV(dmxArg a, int item)
+{
+ if (item < 0 || item >= a->argc) return NULL;
+ return a->argv[item];
+}
+
+/** Return the number of arguments in the \a dmxArg object. */
+int dmxArgC(dmxArg a)
+{
+ return a->argc;
+}
+
+/** Parse a string into arguments delimited by commas. Return a new \a
+ * dmxArg object containing the arguments. */
+dmxArg dmxArgParse(const char *string)
+{
+ char *tmp;
+ char *start, *pt;
+ dmxArg a = dmxArgCreate();
+ int done;
+ int len;
+
+ if (!string) return a;
+
+ len = strlen(string) + 2;
+ tmp = malloc(len);
+ strncpy(tmp, string, len);
+
+ for (start = pt = tmp, done = 0; !done && *pt; start = ++pt) {
+ for (;*pt && *pt != ','; pt++);
+ if (!*pt) done = 1;
+ *pt = '\0';
+ dmxArgAdd(a, start);
+ }
+ if (!done) dmxArgAdd(a, ""); /* Final comma */
+
+ free(tmp);
+ return a;
+}
+
+#if DMX_ARG_TEST
+static void dmxArgPrint(dmxArg a)
+{
+ int i;
+
+ printf(" argc = %d\n", dmxArgC(a));
+ for (i = 0; i < dmxArgC(a); i++)
+ printf(" argv[%d] = \"%s\"\n", i, dmxArgV(a, i));
+}
+
+static void dmxArgTest(const char *string)
+{
+ dmxArg a;
+
+ if (!string)
+ printf("Testing NULL\n");
+ else if (!strlen(string))
+ printf("Testing (empty)\n");
+ else
+ printf("Testing \"%s\"\n", string);
+
+ a = dmxArgParse(string);
+ dmxArgPrint(a);
+ dmxArgFree(a);
+}
+
+int main(void)
+{
+ dmxArgTest(NULL);
+ dmxArgTest("");
+ dmxArgTest(",");
+
+ dmxArgTest("a");
+ dmxArgTest("a,");
+ dmxArgTest(",a");
+
+ dmxArgTest("a,b");
+ dmxArgTest("a,b,");
+ dmxArgTest("a,b,,");
+ dmxArgTest("a,b,,c");
+
+ return 0;
+}
+#endif
diff --git a/hw/dmx/input/dmxarg.h b/hw/dmx/input/dmxarg.h
new file mode 100644
index 0000000..ca76f92
--- /dev/null
+++ b/hw/dmx/input/dmxarg.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to argument handling functions. \see dmxarg.c */
+
+#ifndef _DMXARG_H_
+#define _DMXARG_H_
+
+typedef struct _dmxArg *dmxArg;
+
+extern dmxArg dmxArgCreate(void);
+extern void dmxArgFree(dmxArg a);
+extern void dmxArgAdd(dmxArg a, const char *string);
+extern const char *dmxArgV(dmxArg a, int item);
+extern int dmxArgC(dmxArg a);
+extern dmxArg dmxArgParse(const char *string);
+
+#endif
diff --git a/hw/dmx/input/dmxbackend.c b/hw/dmx/input/dmxbackend.c
new file mode 100644
index 0000000..e917a5c
--- /dev/null
+++ b/hw/dmx/input/dmxbackend.c
@@ -0,0 +1,616 @@
+/*
+ * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ */
+
+/** \file
+ * These routines support taking input from devices on the backend
+ * (output) displays. \see dmxcommon.c. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_BACKEND_DEBUG 0
+
+#include "dmxinputinit.h"
+#include "dmxbackend.h"
+#include "dmxcommon.h"
+#include "dmxconsole.h"
+#include "dmxcursor.h"
+#include "dmxprop.h"
+#include "dmxsync.h"
+#include "dmxcb.h" /* For dmxGlobalWidth and dmxGlobalHeight */
+#include "dmxevents.h" /* For dmxGetGlobalPosition */
+#include "ChkNotMaskEv.h"
+
+#include "inputstr.h"
+#include "input.h"
+#include <X11/keysym.h>
+#include "mipointer.h"
+#include "scrnintstr.h"
+#include "windowstr.h"
+
+/* Private area for backend devices. */
+typedef struct _myPrivate {
+ DMX_COMMON_PRIVATE;
+ int myScreen;
+ DMXScreenInfo *grabbedScreen;
+
+ int lastX, lastY;
+ int centerX, centerY;
+ int relative;
+ int newscreen;
+ int initialized;
+ DevicePtr mou, kbd;
+ int entered;
+ int offX, offY;
+} myPrivate;
+
+#if DMX_BACKEND_DEBUG
+#define DMXDBG0(f) dmxLog(dmxDebug,f)
+#define DMXDBG1(f,a) dmxLog(dmxDebug,f,a)
+#define DMXDBG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define DMXDBG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define DMXDBG4(f,a,b,c,d) dmxLog(dmxDebug,f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e) dmxLog(dmxDebug,f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g) dmxLog(dmxDebug,f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h) dmxLog(dmxDebug,f,a,b,c,d,e,g,h)
+#define DMXDBG8(f,a,b,c,d,e,g,h,i) dmxLog(dmxDebug,f,a,b,c,d,e,g,h,i)
+#define DMXDBG9(f,a,b,c,d,e,g,h,i,j) dmxLog(dmxDebug,f,a,b,c,d,e,g,h,i,j)
+#else
+#define DMXDBG0(f)
+#define DMXDBG1(f,a)
+#define DMXDBG2(f,a,b)
+#define DMXDBG3(f,a,b,c)
+#define DMXDBG4(f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h)
+#define DMXDBG8(f,a,b,c,d,e,g,h,i)
+#define DMXDBG9(f,a,b,c,d,e,g,h,i,j)
+#endif
+
+/** Create and return a private data structure. */
+pointer dmxBackendCreatePrivate(DeviceIntPtr pDevice)
+{
+ GETDMXLOCALFROMPDEVICE;
+ myPrivate *priv = calloc(1, sizeof(*priv));
+ priv->dmxLocal = dmxLocal;
+ return priv;
+}
+
+/** Destroy the private data structure. No checking is performed to
+ * verify that the structure was actually created by
+ * #dmxBackendCreatePrivate. */
+void dmxBackendDestroyPrivate(pointer private)
+{
+ free(private);
+}
+
+static void *dmxBackendTestScreen(DMXScreenInfo *dmxScreen, void *closure)
+{
+ long target = (long)closure;
+
+ if (dmxScreen->index == target) return dmxScreen;
+ return NULL;
+}
+
+/* Return non-zero if screen and priv->myScreen are on the same physical
+ * backend display (1 if they are the same screen, 2 if they are
+ * different screens). Since this is a common operation, the results
+ * are cached. The cache is invalidated if \a priv is NULL (this should
+ * be done with each server generation and reconfiguration). */
+static int dmxBackendSameDisplay(myPrivate *priv, long screen)
+{
+ static myPrivate *oldpriv = NULL;
+ static int oldscreen = -1;
+ static int retcode = 0;
+
+ if (priv == oldpriv && screen == oldscreen) return retcode;
+ if (!priv) { /* Invalidate cache */
+ oldpriv = NULL;
+ oldscreen = -1;
+ retcode = 0;
+ return 0;
+ }
+
+ if (screen == priv->myScreen) retcode = 1;
+ else if (screen < 0 || screen >= dmxNumScreens) retcode = 0;
+ else if (dmxPropertyIterate(priv->be,
+ dmxBackendTestScreen,
+ (void *)screen)) retcode = 2;
+ else retcode = 0;
+
+ oldpriv = priv;
+ oldscreen = screen;
+ return retcode;
+}
+
+static void *dmxBackendTestEvents(DMXScreenInfo *dmxScreen, void *closure)
+{
+ XEvent *X = (XEvent *)closure;
+
+ if (XCheckNotMaskEvent(dmxScreen->beDisplay, ExposureMask, X))
+ return dmxScreen;
+ return NULL;
+}
+
+static void *dmxBackendTestMotionEvent(DMXScreenInfo *dmxScreen, void *closure)
+{
+ XEvent *X = (XEvent *)closure;
+
+ if (XCheckTypedEvent(dmxScreen->beDisplay, MotionNotify, X))
+ return dmxScreen;
+ return NULL;
+}
+
+static DMXScreenInfo *dmxBackendGetEvent(myPrivate *priv, XEvent *X)
+{
+ DMXScreenInfo *dmxScreen;
+
+ if ((dmxScreen = dmxPropertyIterate(priv->be, dmxBackendTestEvents, X)))
+ return dmxScreen;
+ return NULL;
+}
+
+static DMXScreenInfo *dmxBackendPendingMotionEvent(myPrivate *priv, int save)
+{
+ DMXScreenInfo *dmxScreen;
+ XEvent N;
+
+ if ((dmxScreen = dmxPropertyIterate(priv->be,
+ dmxBackendTestMotionEvent, &N))) {
+ if (save) XPutBackEvent(dmxScreen->beDisplay, &N);
+ return dmxScreen;
+ }
+ return NULL;
+}
+
+static void *dmxBackendTestWindow(DMXScreenInfo *dmxScreen, void *closure)
+{
+ Window win = (Window)(long)closure;
+ if (dmxScreen->scrnWin == win) return dmxScreen;
+ return NULL;
+}
+
+static DMXScreenInfo *dmxBackendFindWindow(myPrivate *priv, Window win)
+{
+ return dmxPropertyIterate(priv->be, dmxBackendTestWindow,
+ (void *)(long)win);
+}
+
+/* If the cursor is over a set of overlapping screens and one of those
+ * screens takes backend input, then we want that particular screen to
+ * be current, not one of the other ones. */
+static int dmxBackendFindOverlapping(myPrivate *priv, int screen, int x, int y)
+{
+ DMXScreenInfo *start = &dmxScreens[screen];
+ DMXScreenInfo *pt;
+
+ if (!start->over) return screen;
+
+ for (pt = start->over; /* condition at end of loop */; pt = pt->over) {
+ if (pt->index == priv->myScreen
+ && dmxOnScreen(x, y, &dmxScreens[pt->index])) return pt->index;
+ if (pt == start) break;
+ }
+ return screen;
+}
+
+/* Return non-zero if \a x and \a y are off \a screen. */
+static int dmxBackendOffscreen(int screen, int x, int y)
+{
+ DMXScreenInfo *dmxScreen = &dmxScreens[screen];
+
+ return (!dmxOnScreen(x, y, dmxScreen));
+}
+
+/** This routine is called from #dmxCoreMotion for each motion
+ * event. \a x and \a y are global coordinants. */
+void dmxBackendUpdatePosition(pointer private, int x, int y)
+{
+ GETPRIVFROMPRIVATE;
+ int screen = miPointerGetScreen(inputInfo.pointer)->myNum;
+ DMXScreenInfo *dmxScreen = &dmxScreens[priv->myScreen];
+ int oldRelative = priv->relative;
+ int topscreen = dmxBackendFindOverlapping(priv, screen, x, y);
+ int same = dmxBackendSameDisplay(priv, topscreen);
+ int offscreen = dmxBackendOffscreen(priv->myScreen, x, y);
+ int offthis = dmxBackendOffscreen(screen, x, y);
+
+ DMXDBG9("dmxBackendUpdatePosition(%d,%d) my=%d mi=%d rel=%d"
+ " topscreen=%d same=%d offscreen=%d offthis=%d\n",
+ x, y, priv->myScreen, screen, priv->relative,
+ topscreen, same, offscreen, offthis);
+
+ if (offscreen) {
+ /* If the cursor is off the input screen, it should be moving
+ * relative unless it is visible on a screen of the same display
+ * (i.e., one that shares the mouse). */
+ if (same == 2 && !offthis) {
+ if (priv->relative) {
+ DMXDBG0(" Off screen, but not absolute\n");
+ priv->relative = 0;
+ }
+ } else {
+ if (!priv->relative) {
+ DMXDBG0(" Off screen, but not relative\n");
+ priv->relative = 1;
+ }
+ }
+ } else {
+ if (topscreen != screen) {
+ DMXDBG2(" Using screen %d instead of %d (from mi)\n",
+ topscreen, screen);
+ }
+ if (same) {
+ if (priv->relative) {
+ DMXDBG0(" On screen, but not absolute\n");
+ priv->relative = 0;
+ }
+ } else {
+ if (!priv->relative) {
+ DMXDBG0(" Not on screen, but not relative\n");
+ priv->relative = 1;
+ }
+ }
+ }
+
+ if (oldRelative != priv->relative) {
+ DMXDBG2(" Do switch, relative=%d same=%d\n",
+ priv->relative, same);
+ /* Discard all pre-switch events */
+ dmxSync(dmxScreen, TRUE);
+ while (dmxBackendPendingMotionEvent(priv, FALSE));
+
+ if (dmxInput->console && offscreen) {
+ /* Our special case is a console window and a backend window
+ * share a display. In this case, the cursor is either on
+ * the backend window (taking absolute input), or not (in
+ * which case the cursor needs to be in the console
+ * window). */
+ if (priv->grabbedScreen) {
+ DMXDBG2(" *** force ungrab on %s, display=%p\n",
+ priv->grabbedScreen->name,
+ priv->grabbedScreen->beDisplay);
+ XUngrabPointer(priv->grabbedScreen->beDisplay, CurrentTime);
+ dmxSync(priv->grabbedScreen, TRUE);
+ priv->grabbedScreen = NULL;
+ }
+ DMXDBG0(" Capturing console\n");
+ dmxConsoleCapture(dmxInput);
+ } else {
+ priv->newscreen = 1;
+ if (priv->relative && !dmxInput->console) {
+ DMXDBG5(" Hide cursor; warp from %d,%d to %d,%d on %d\n",
+ priv->lastX, priv->lastY, priv->centerX, priv->centerY,
+ priv->myScreen);
+ dmxConsoleUncapture(dmxInput);
+ dmxHideCursor(dmxScreen);
+ priv->lastX = priv->centerX;
+ priv->lastY = priv->centerY;
+ XWarpPointer(priv->display, None, priv->window,
+ 0, 0, 0, 0, priv->lastX, priv->lastY);
+ dmxSync(dmxScreen, TRUE);
+ } else {
+ DMXDBG0(" Check cursor\n");
+ dmxCheckCursor();
+ }
+ }
+ }
+}
+
+/** Get events from the X queue on the backend servers and put the
+ * events into the DMX event queue. */
+void dmxBackendCollectEvents(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+ XEvent X;
+ DMXScreenInfo *dmxScreen;
+ int left = 0;
+ int entered = priv->entered;
+ int ignoreLeave = 0;
+ int v[2];
+ int retcode;
+
+ while ((dmxScreen = dmxBackendGetEvent(priv, &X))) {
+ switch (X.type) {
+ case EnterNotify:
+ dmxCommonSaveState(priv);
+ if (entered++)
+ continue;
+ priv->entered = 1;
+ ignoreLeave = 1;
+ DMXDBG5("dmxBackendCollectEvents: Enter %lu %d,%d; GRAB %s %p\n",
+ X.xcrossing.root, X.xcrossing.x, X.xcrossing.y,
+ dmxScreen->name, dmxScreen->beDisplay);
+ XRaiseWindow(dmxScreen->beDisplay, dmxScreen->scrnWin);
+ priv->grabbedScreen = dmxScreen;
+ if ((retcode = XGrabPointer(dmxScreen->beDisplay,
+ dmxScreen->scrnWin,
+ True, 0, GrabModeAsync,
+ GrabModeAsync, None, None,
+ CurrentTime))) {
+ dmxLog(dmxError,
+ "XGrabPointer failed during backend enter (%d)\n",
+ retcode);
+ }
+ break;
+ case LeaveNotify:
+ if (ignoreLeave) {
+ ignoreLeave = 0;
+ continue;
+ }
+ dmxCommonRestoreState(priv);
+ if (left++)
+ continue;
+ DMXDBG7("dmxBackendCollectEvents: Leave %lu %d,%d %d %d %s %s\n",
+ X.xcrossing.root, X.xcrossing.x, X.xcrossing.y,
+ X.xcrossing.detail, X.xcrossing.focus,
+ priv->grabbedScreen ? "UNGRAB" : "",
+ dmxScreen->name);
+ if (priv->grabbedScreen) {
+ XUngrabPointer(priv->grabbedScreen->beDisplay, CurrentTime);
+ dmxSync(priv->grabbedScreen, TRUE);
+ priv->grabbedScreen = NULL;
+ }
+ break;
+ case MotionNotify:
+ DMXDBG9("dmxBackendCollectEvents: MotionNotify %d/%d (mi %d)"
+ " newscreen=%d: %d %d (e=%d; last=%d,%d)\n",
+ dmxScreen->index, priv->myScreen,
+ miPointerCurrentScreen()->myNum,
+ priv->newscreen,
+ X.xmotion.x, X.xmotion.y,
+ entered, priv->lastX, priv->lastY);
+ if (dmxBackendPendingMotionEvent(priv, TRUE))
+ continue;
+ if (!(dmxScreen = dmxBackendFindWindow(priv, X.xmotion.window)))
+ dmxLog(dmxFatal,
+ " Event on non-existant window %lu\n",
+ X.xmotion.window);
+ if (!priv->relative || dmxInput->console) {
+ int newX = X.xmotion.x - dmxScreen->rootX;
+ int newY = X.xmotion.y - dmxScreen->rootY;
+
+ if (!priv->newscreen) {
+ int width = dmxScreen->rootWidth;
+ int height = dmxScreen->rootHeight;
+ if (!newX) newX = -1;
+ if (newX == width - 1) newX = width;
+ if (!newY) newY = -1;
+ if (newY == height - 1) newY = height;
+ }
+ priv->newscreen = 0;
+ v[0] = dmxScreen->rootXOrigin + newX;
+ v[1] = dmxScreen->rootYOrigin + newY;
+ DMXDBG8(" Absolute move: %d,%d (r=%dx%d+%d+%d s=%dx%d)\n",
+ v[0], v[1],
+ priv->be->rootWidth, priv->be->rootHeight,
+ priv->be->rootX, priv->be->rootY,
+ priv->be->scrnWidth, priv->be->scrnHeight);
+ motion(priv->mou, v, 0, 2, DMX_ABSOLUTE, block);
+ priv->entered = 0;
+ } else {
+ int newX = priv->lastX - X.xmotion.x;
+ int newY = priv->lastY - X.xmotion.y;
+ priv->lastX = X.xmotion.x;
+ priv->lastY = X.xmotion.y;
+ v[0] = newX;
+ v[1] = newY;
+ DMXDBG2(" Relative move: %d, %d\n", v[0], v[1]);
+ motion(priv->mou, v, 0, 2, DMX_RELATIVE, block);
+ }
+ if (entered && priv->relative) {
+ DMXDBG4(" **** Relative %d %d instead of absolute %d %d\n",
+ v[0], v[1],
+ (dmxScreen->rootXOrigin + X.xmotion.x
+ - dmxScreen->rootX),
+ (dmxScreen->rootYOrigin + X.xmotion.y
+ - dmxScreen->rootY));
+ }
+ break;
+
+ case KeyPress:
+ case KeyRelease:
+ enqueue(priv->kbd, X.type, X.xkey.keycode, 0, NULL, block);
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ /* fall-through */
+ default:
+ /* Pass the whole event here, because
+ * this may be an extension event. */
+ enqueue(priv->mou, X.type, X.xbutton.button, 0, &X, block);
+ break;
+ }
+ }
+}
+
+/** Called after input events are processed from the DMX queue. No
+ * event processing actually takes place here, but this is a convenient
+ * place to update the pointer. */
+void dmxBackendProcessInput(pointer private)
+{
+ GETPRIVFROMPRIVATE;
+
+ DMXDBG6("dmxBackendProcessInput: myScreen=%d relative=%d"
+ " last=%d,%d center=%d,%d\n",
+ priv->myScreen, priv->relative,
+ priv->lastX, priv->lastY,
+ priv->centerX, priv->centerY);
+
+ if (priv->relative
+ && !dmxInput->console
+ && (priv->lastX != priv->centerX || priv->lastY != priv->centerY)) {
+ DMXDBG4(" warping pointer from last=%d,%d to center=%d,%d\n",
+ priv->lastX, priv->lastY, priv->centerX, priv->centerY);
+ priv->lastX = priv->centerX;
+ priv->lastY = priv->centerY;
+ XWarpPointer(priv->display, None, priv->window,
+ 0, 0, 0, 0, priv->lastX, priv->lastY);
+ dmxSync(&dmxScreens[priv->myScreen], TRUE);
+ }
+}
+
+static void dmxBackendComputeCenter(myPrivate *priv)
+{
+ int centerX;
+ int centerY;
+
+ centerX = priv->be->rootWidth / 2 + priv->be->rootX;
+ centerY = priv->be->rootHeight / 2 + priv->be->rootY;
+
+ if (centerX > priv->be->rootWidth) centerX = priv->be->rootWidth - 1;
+ if (centerY > priv->be->rootHeight) centerY = priv->be->rootHeight - 1;
+ if (centerX < 1) centerX = 1;
+ if (centerY < 1) centerY = 1;
+
+ priv->centerX = centerX;
+ priv->centerY = centerY;
+}
+
+static DMXScreenInfo *dmxBackendInitPrivate(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
+ DMXScreenInfo *dmxScreen;
+ int i;
+
+ /* Fill in myPrivate */
+ for (i = 0,dmxScreen = &dmxScreens[0]; i<dmxNumScreens; i++,dmxScreen++) {
+ if (dmxPropertySameDisplay(dmxScreen, dmxInput->name)) {
+ priv->display = dmxScreen->beDisplay;
+ priv->window = dmxScreen->scrnWin;
+ priv->be = dmxScreen;
+ break;
+ }
+ }
+
+ if (i >= dmxNumScreens)
+ dmxLog(dmxFatal,
+ "%s is not an existing backend display - cannot initialize\n",
+ dmxInput->name);
+
+ return dmxScreen;
+}
+
+/** Re-initialized the backend device described by \a pDev (after a
+ * reconfig). */
+void dmxBackendLateReInit(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ int x, y;
+
+ DMXDBG1("dmxBackendLateReInit miPointerCurrentScreen() = %p\n",
+ miPointerCurrentScreen());
+
+ dmxBackendSameDisplay(NULL, 0); /* Invalidate cache */
+ dmxBackendInitPrivate(pDev);
+ dmxBackendComputeCenter(priv);
+ dmxGetGlobalPosition(&x, &y);
+ dmxInvalidateGlobalPosition(); /* To force event processing */
+ dmxBackendUpdatePosition(priv, x, y);
+}
+
+/** Initialized the backend device described by \a pDev. */
+void dmxBackendInit(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ DMXScreenInfo *dmxScreen;
+
+ dmxBackendSameDisplay(NULL, 0); /* Invalidate cache */
+
+ if (dmxLocal->type == DMX_LOCAL_MOUSE) priv->mou = pDev;
+ if (dmxLocal->type == DMX_LOCAL_KEYBOARD) priv->kbd = pDev;
+ if (priv->initialized++) return; /* Only do once for mouse/keyboard pair */
+
+ dmxScreen = dmxBackendInitPrivate(pDev);
+
+ /* Finish initialization using computed values or constants. */
+ dmxBackendComputeCenter(priv);
+ priv->eventMask = (EnterWindowMask|LeaveWindowMask);
+ priv->myScreen = dmxScreen->index;
+ priv->lastX = priv->centerX;
+ priv->lastY = priv->centerY;
+ priv->relative = 0;
+ priv->newscreen = 0;
+}
+
+/** Get information about the backend pointer (for initialization). */
+void dmxBackendMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ const DMXScreenInfo *dmxScreen = dmxBackendInitPrivate(pDev);
+
+ info->buttonClass = 1;
+ dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
+ info->valuatorClass = 1;
+ info->numRelAxes = 2;
+ info->minval[0] = 0;
+ info->minval[1] = 0;
+ info->maxval[0] = dmxScreen->beWidth;
+ info->maxval[1] = dmxScreen->beHeight;
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ info->ptrFeedbackClass = 1;
+}
+
+/** Get information about the backend keyboard (for initialization). */
+void dmxBackendKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ dmxCommonKbdGetInfo(pDev, info);
+ info->keyboard = 1;
+ info->keyClass = 1;
+ dmxCommonKbdGetMap(pDev, &info->keySyms, info->modMap);
+ info->freemap = 1;
+ info->focusClass = 1;
+ info->kbdFeedbackClass = 1;
+}
+
+/** Process #DMXFunctionType functions. The only function handled here
+ * is to acknowledge a pending server shutdown. */
+int dmxBackendFunctions(pointer private, DMXFunctionType function)
+{
+ switch (function) {
+ case DMX_FUNCTION_TERMINATE:
+ return 1;
+ default:
+ return 0;
+ }
+}
diff --git a/hw/dmx/input/dmxbackend.h b/hw/dmx/input/dmxbackend.h
new file mode 100644
index 0000000..ee78f00
--- /dev/null
+++ b/hw/dmx/input/dmxbackend.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to backend input device support. \see dmxbackend.c \see
+ * dmxcommon.c */
+
+#ifndef _DMXBACKEND_H_
+#define _DMXBACKEND_H_
+
+extern pointer dmxBackendCreatePrivate(DeviceIntPtr pDevice);
+extern void dmxBackendDestroyPrivate(pointer private);
+extern void dmxBackendInit(DevicePtr pDev);
+extern void dmxBackendLateReInit(DevicePtr pDev);
+extern void dmxBackendMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern void dmxBackendKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern void dmxBackendCollectEvents(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern void dmxBackendProcessInput(pointer private);
+extern int dmxBackendFunctions(pointer private, DMXFunctionType function);
+extern void dmxBackendUpdatePosition(pointer private, int x, int y);
+
+#endif
diff --git a/hw/dmx/input/dmxcommon.c b/hw/dmx/input/dmxcommon.c
new file mode 100644
index 0000000..c665dad
--- /dev/null
+++ b/hw/dmx/input/dmxcommon.c
@@ -0,0 +1,669 @@
+/*
+ * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ */
+
+/** \file
+ *
+ * This file implements common routines used by the backend and console
+ * input devices.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_STATE_DEBUG 0
+
+#include "dmxinputinit.h"
+#include "dmxcommon.h"
+#include "dmxconsole.h"
+#include "dmxprop.h"
+#include "dmxsync.h"
+#include "dmxmap.h"
+
+#include "inputstr.h"
+#include "input.h"
+#include <X11/keysym.h>
+#include "mipointer.h"
+#include "scrnintstr.h"
+
+#include <unistd.h> /* For usleep() */
+
+#if DMX_STATE_DEBUG
+#define DMXDBG0(f) dmxLog(dmxDebug,f)
+#else
+#define DMXDBG0(f)
+#endif
+
+/** Each device has a private area that is visible only from inside the
+ * driver code. */
+typedef struct _myPrivate {
+ DMX_COMMON_PRIVATE;
+} myPrivate;
+
+static void dmxCommonKbdSetAR(Display *display,
+ unsigned char *old, unsigned char *new)
+{
+ XKeyboardControl kc;
+ XKeyboardState ks;
+ unsigned long mask = KBKey | KBAutoRepeatMode;
+ int i, j;
+ int minKeycode, maxKeycode;
+
+ if (!old) {
+ XGetKeyboardControl(display, &ks);
+ old = (unsigned char *)ks.auto_repeats;
+ }
+
+ XDisplayKeycodes(display, &minKeycode, &maxKeycode);
+ for (i = 1; i < 32; i++) {
+ if (!old || old[i] != new[i]) {
+ for (j = 0; j < 8; j++) {
+ if ((new[i] & (1 << j)) != (old[i] & (1 << j))) {
+ kc.key = i * 8 + j;
+ kc.auto_repeat_mode = ((new[i] & (1 << j))
+ ? AutoRepeatModeOn
+ : AutoRepeatModeOff);
+ if (kc.key >= minKeycode && kc.key <= maxKeycode)
+ XChangeKeyboardControl(display, mask, &kc);
+ }
+ }
+ }
+ }
+}
+
+static void dmxCommonKbdSetLeds(Display *display, unsigned long new)
+{
+ int i;
+ XKeyboardControl kc;
+
+ for (i = 0; i < 32; i++) {
+ kc.led = i + 1;
+ kc.led_mode = (new & (1 << i)) ? LedModeOn : LedModeOff;
+ XChangeKeyboardControl(display, KBLed | KBLedMode, &kc);
+ }
+}
+
+static void dmxCommonKbdSetCtrl(Display *display,
+ KeybdCtrl *old, KeybdCtrl *new)
+{
+ XKeyboardControl kc;
+ unsigned long mask = KBKeyClickPercent | KBAutoRepeatMode;
+
+ if (!old
+ || old->click != new->click
+ || old->autoRepeat != new->autoRepeat) {
+
+ kc.key_click_percent = new->click;
+ kc.auto_repeat_mode = new->autoRepeat;
+
+ XChangeKeyboardControl(display, mask, &kc);
+ }
+
+ dmxCommonKbdSetLeds(display, new->leds);
+ dmxCommonKbdSetAR(display, old ? old->autoRepeats : NULL,
+ new->autoRepeats);
+}
+
+static void dmxCommonMouSetCtrl(Display *display, PtrCtrl *old, PtrCtrl *new)
+{
+ Bool do_accel, do_threshold;
+
+ if (!old
+ || old->num != new->num
+ || old->den != new->den
+ || old->threshold != new->threshold) {
+ do_accel = (new->num > 0 && new->den > 0);
+ do_threshold = (new->threshold > 0);
+ if (do_accel || do_threshold) {
+ XChangePointerControl(display, do_accel, do_threshold,
+ new->num, new->den, new->threshold);
+ }
+ }
+}
+
+/** Update the keyboard control. */
+void dmxCommonKbdCtrl(DevicePtr pDev, KeybdCtrl *ctrl)
+{
+ GETPRIVFROMPDEV;
+
+ if (!priv->stateSaved && priv->be) dmxCommonSaveState(priv);
+ if (!priv->display || !priv->stateSaved) return;
+ dmxCommonKbdSetCtrl(priv->display,
+ priv->kctrlset ? &priv->kctrl : NULL,
+ ctrl);
+ priv->kctrl = *ctrl;
+ priv->kctrlset = 1;
+}
+
+/** Update the mouse control. */
+void dmxCommonMouCtrl(DevicePtr pDev, PtrCtrl *ctrl)
+{
+ GETPRIVFROMPDEV;
+
+ /* Don't set the acceleration for the
+ * console, because that should be
+ * controlled by the X server that the
+ * console is running on. Otherwise,
+ * the acceleration for the console
+ * window would be unexpected for the
+ * scale of the window. */
+ if (priv->be) {
+ dmxCommonMouSetCtrl(priv->display,
+ priv->mctrlset ? &priv->mctrl : NULL,
+ ctrl);
+ priv->mctrl = *ctrl;
+ priv->mctrlset = 1;
+ }
+}
+
+/** Sound they keyboard bell. */
+void dmxCommonKbdBell(DevicePtr pDev, int percent,
+ int volume, int pitch, int duration)
+{
+ GETPRIVFROMPDEV;
+ XKeyboardControl kc;
+ XKeyboardState ks;
+ unsigned long mask = KBBellPercent | KBBellPitch | KBBellDuration;
+
+ if (!priv->be) XGetKeyboardControl(priv->display, &ks);
+ kc.bell_percent = volume;
+ kc.bell_pitch = pitch;
+ kc.bell_duration = duration;
+ XChangeKeyboardControl(priv->display, mask, &kc);
+ XBell(priv->display, percent);
+ if (!priv->be) {
+ kc.bell_percent = ks.bell_percent;
+ kc.bell_pitch = ks.bell_pitch;
+ kc.bell_duration = ks.bell_duration;
+ XChangeKeyboardControl(priv->display, mask, &kc);
+ }
+}
+
+/** Get the keyboard mapping. */
+void dmxCommonKbdGetMap(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)
+{
+ GETPRIVFROMPDEV;
+ int min_keycode;
+ int max_keycode;
+ int map_width;
+ KeySym *keyboard_mapping;
+ XModifierKeymap *modifier_mapping;
+ int i, j;
+
+ /* Compute pKeySyms. Cast
+ * XGetKeyboardMapping because of
+ * compiler warning on 64-bit machines.
+ * We assume pointers to 32-bit and
+ * 64-bit ints are the same. */
+ XDisplayKeycodes(priv->display, &min_keycode, &max_keycode);
+ keyboard_mapping = (KeySym *)XGetKeyboardMapping(priv->display,
+ min_keycode,
+ max_keycode
+ - min_keycode + 1,
+ &map_width);
+ pKeySyms->minKeyCode = min_keycode;
+ pKeySyms->maxKeyCode = max_keycode;
+ pKeySyms->mapWidth = map_width;
+ pKeySyms->map = keyboard_mapping;
+
+
+ /* Compute pModMap */
+ modifier_mapping = XGetModifierMapping(priv->display);
+ for (i = 0; i < MAP_LENGTH; i++)
+ pModMap[i] = 0;
+ for (j = 0; j < 8; j++) {
+ int max_keypermod = modifier_mapping->max_keypermod;
+
+ for (i = 0; i < max_keypermod; i++) {
+ CARD8 keycode = modifier_mapping->modifiermap[j*max_keypermod + i];
+ if (keycode)
+ pModMap[keycode] |= 1 << j;
+ }
+ }
+ XFreeModifiermap(modifier_mapping);
+}
+
+/** Fill in the XKEYBOARD parts of the \a info structure for the
+ * specified \a pDev. */
+void dmxCommonKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+ char *pt;
+
+ dmxCommonSaveState(priv);
+ if (priv->xkb) {
+#define NAME(x) \
+ priv->xkb->names->x ? XGetAtomName(priv->display,priv->xkb->names->x) : NULL
+ info->names.keycodes = NAME(keycodes);
+ info->names.types = NAME(types);
+ info->names.compat = NAME(compat);
+ info->names.symbols = NAME(symbols);
+ info->names.geometry = NAME(geometry);
+ info->freenames = 1;
+#undef NAME
+ dmxLogInput(dmxInput,
+ "XKEYBOARD: keycodes = %s\n", info->names.keycodes);
+ dmxLogInput(dmxInput,
+ "XKEYBOARD: symbols = %s\n", info->names.symbols);
+ dmxLogInput(dmxInput,
+ "XKEYBOARD: geometry = %s\n", info->names.geometry);
+ if ((pt = strchr(info->names.keycodes, '+'))) *pt = '\0';
+ }
+ dmxCommonRestoreState(priv);
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int dmxCommonKbdOn(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ if (priv->be) dmxCommonSaveState(priv);
+ priv->eventMask |= DMX_KEYBOARD_EVENT_MASK;
+ XSelectInput(priv->display, priv->window, priv->eventMask);
+ if (priv->be)
+ XSetInputFocus(priv->display, priv->window, RevertToPointerRoot,
+ CurrentTime);
+ return -1;
+}
+
+/** Turn \a pDev off. */
+void dmxCommonKbdOff(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ priv->eventMask &= ~DMX_KEYBOARD_EVENT_MASK;
+ XSelectInput(priv->display, priv->window, priv->eventMask);
+ dmxCommonRestoreState(priv);
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int dmxCommonOthOn(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+ XEventClass event_list[DMX_MAX_XINPUT_EVENT_TYPES];
+ int event_type[DMX_MAX_XINPUT_EVENT_TYPES];
+ int count = 0;
+
+#define ADD(type) \
+ if (count < DMX_MAX_XINPUT_EVENT_TYPES) { \
+ type(priv->xi, event_type[count], event_list[count]); \
+ if (event_type[count]) { \
+ dmxMapInsert(dmxLocal, event_type[count], XI_##type); \
+ ++count; \
+ } \
+ } else { \
+ dmxLog(dmxWarning, "More than %d event types for %s\n", \
+ DMX_MAX_XINPUT_EVENT_TYPES, dmxInput->name); \
+ }
+
+ if (!(priv->xi = XOpenDevice(priv->display, dmxLocal->deviceId))) {
+ dmxLog(dmxWarning, "Cannot open %s device (id=%d) on %s\n",
+ dmxLocal->deviceName ? dmxLocal->deviceName : "(unknown)",
+ dmxLocal->deviceId, dmxInput->name);
+ return -1;
+ }
+ ADD(DeviceKeyPress);
+ ADD(DeviceKeyRelease);
+ ADD(DeviceButtonPress);
+ ADD(DeviceButtonRelease);
+ ADD(DeviceMotionNotify);
+ ADD(DeviceFocusIn);
+ ADD(DeviceFocusOut);
+ ADD(ProximityIn);
+ ADD(ProximityOut);
+ ADD(DeviceStateNotify);
+ ADD(DeviceMappingNotify);
+ ADD(ChangeDeviceNotify);
+ XSelectExtensionEvent(priv->display, priv->window, event_list, count);
+
+ return -1;
+}
+
+/** Turn \a pDev off. */
+void dmxCommonOthOff(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+
+ if (priv->xi) XCloseDevice(priv->display, priv->xi);
+ priv->xi = NULL;
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void dmxCommonOthGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+ XExtensionVersion *ext;
+ XDeviceInfo *devices;
+ Display *display = priv->display;
+ int num;
+ int i, j, k;
+ XextErrorHandler handler;
+
+ if (!display && !(display = XOpenDisplay(dmxInput->name)))
+ return;
+
+ /* Print out information about the XInput Extension. */
+ handler = XSetExtensionErrorHandler(dmxInputExtensionErrorHandler);
+ ext = XGetExtensionVersion(display, INAME);
+ XSetExtensionErrorHandler(handler);
+
+ if (ext && ext != (XExtensionVersion *)NoSuchExtension) {
+ XFree(ext);
+ devices = XListInputDevices(display, &num);
+ for (i = 0; i < num; i++) {
+ if (devices[i].id == (XID)dmxLocal->deviceId) {
+ XAnyClassPtr any;
+ XKeyInfoPtr ki;
+ XButtonInfoPtr bi;
+ XValuatorInfoPtr vi;
+ for (j = 0, any = devices[i].inputclassinfo;
+ j < devices[i].num_classes;
+ any = (XAnyClassPtr)((char *)any + any->length), j++) {
+ switch (any->class) {
+ case KeyClass:
+ ki = (XKeyInfoPtr)any;
+ info->keyboard = 1;
+ info->keyClass = 1;
+ info->keySyms.minKeyCode = ki->min_keycode;
+ info->keySyms.maxKeyCode = ki->max_keycode;
+ info->kbdFeedbackClass = 1;
+ break;
+ case ButtonClass:
+ bi = (XButtonInfoPtr)any;
+ info->buttonClass = 1;
+ info->numButtons = bi->num_buttons;
+ info->ptrFeedbackClass = 1;
+ break;
+ case ValuatorClass:
+ /* This assume all axes are either
+ * Absolute or Relative. */
+ vi = (XValuatorInfoPtr)any;
+ info->valuatorClass = 1;
+ if (vi->mode == Absolute)
+ info->numAbsAxes = vi->num_axes;
+ else
+ info->numRelAxes = vi->num_axes;
+ for (k = 0; k < vi->num_axes; k++) {
+ info->res[k] = vi->axes[k].resolution;
+ info->minres[k] = vi->axes[k].resolution;
+ info->maxres[k] = vi->axes[k].resolution;
+ info->minval[k] = vi->axes[k].min_value;
+ info->maxval[k] = vi->axes[k].max_value;
+ }
+ break;
+ case FeedbackClass:
+ /* Only keyboard and pointer feedback
+ * are handled at this time. */
+ break;
+ case ProximityClass:
+ info->proximityClass = 1;
+ break;
+ case FocusClass:
+ info->focusClass = 1;
+ break;
+ case OtherClass:
+ break;
+ }
+ }
+ }
+ }
+ XFreeDeviceList(devices);
+ }
+ if (display != priv->display) XCloseDisplay(display);
+}
+
+/** Obtain the mouse button mapping. */
+void dmxCommonMouGetMap(DevicePtr pDev, unsigned char *map, int *nButtons)
+{
+ GETPRIVFROMPDEV;
+ int i;
+
+ *nButtons = XGetPointerMapping(priv->display, map, DMX_MAX_BUTTONS);
+ for (i = 0; i <= *nButtons; i++) map[i] = i;
+}
+
+static void *dmxCommonXSelect(DMXScreenInfo *dmxScreen, void *closure)
+{
+ myPrivate *priv = closure;
+ XSelectInput(dmxScreen->beDisplay, dmxScreen->scrnWin, priv->eventMask);
+ return NULL;
+}
+
+static void *dmxCommonAddEnabledDevice(DMXScreenInfo *dmxScreen, void *closure)
+{
+ AddEnabledDevice(XConnectionNumber(dmxScreen->beDisplay));
+ return NULL;
+}
+
+static void *dmxCommonRemoveEnabledDevice(DMXScreenInfo *dmxScreen,
+ void *closure)
+{
+ RemoveEnabledDevice(XConnectionNumber(dmxScreen->beDisplay));
+ return NULL;
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int dmxCommonMouOn(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+
+ priv->eventMask |= DMX_POINTER_EVENT_MASK;
+ if (dmxShadowFB) {
+ XWarpPointer(priv->display, priv->window, priv->window,
+ 0, 0, 0, 0,
+ priv->initPointerX,
+ priv->initPointerY);
+ dmxSync(&dmxScreens[dmxInput->scrnIdx], TRUE);
+ }
+ if (!priv->be) {
+ XSelectInput(priv->display, priv->window, priv->eventMask);
+ AddEnabledDevice(XConnectionNumber(priv->display));
+ } else {
+ dmxPropertyIterate(priv->be, dmxCommonXSelect, priv);
+ dmxPropertyIterate(priv->be, dmxCommonAddEnabledDevice, dmxInput);
+ }
+
+ return -1;
+}
+
+/** Turn \a pDev off. */
+void dmxCommonMouOff(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+
+ priv->eventMask &= ~DMX_POINTER_EVENT_MASK;
+ if (!priv->be) {
+ RemoveEnabledDevice(XConnectionNumber(priv->display));
+ XSelectInput(priv->display, priv->window, priv->eventMask);
+ } else {
+ dmxPropertyIterate(priv->be, dmxCommonRemoveEnabledDevice, dmxInput);
+ dmxPropertyIterate(priv->be, dmxCommonXSelect, priv);
+ }
+}
+
+/** Given the global coordinates \a x and \a y, determine the screen
+ * with the lowest number on which those coordinates lie. If they are
+ * not on any screen, return -1. The number returned is an index into
+ * \a dmxScreenInfo and is between -1 and \a dmxNumScreens - 1,
+ * inclusive. */
+int dmxFindPointerScreen(int x, int y)
+{
+ int i;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ ScreenPtr pScreen = screenInfo.screens[i];
+ if (x >= pScreen->x && x < pScreen->x + pScreen->width &&
+ y >= pScreen->y && y < pScreen->y + pScreen->height)
+ return i;
+ }
+ return -1;
+}
+
+/** Returns a pointer to the private area for the device that comes just
+ * prior to \a pDevice in the current \a dmxInput device list. This is
+ * used as the private area for the current device in some situations
+ * (e.g., when a keyboard and mouse form a pair that should share the
+ * same private area). If the requested private area cannot be located,
+ * then NULL is returned. */
+pointer dmxCommonCopyPrivate(DeviceIntPtr pDevice)
+{
+ GETDMXLOCALFROMPDEVICE;
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
+ int i;
+
+ for (i = 0; i < dmxInput->numDevs; i++)
+ if (dmxInput->devs[i] == dmxLocal && i)
+ return dmxInput->devs[i-1]->private;
+ return NULL;
+}
+
+/** This routine saves and resets some important state for the backend
+ * and console device drivers:
+ * - the modifier map is saved and set to 0 (so DMX controls the LEDs)
+ * - the key click, bell, led, and repeat masks are saved and set to the
+ * values that DMX claims to be using
+ *
+ * This routine and #dmxCommonRestoreState are used when the pointer
+ * enters and leaves the console window, or when the backend window is
+ * active or not active (for a full-screen window, this only happens at
+ * server startup and server shutdown).
+ */
+void dmxCommonSaveState(pointer private)
+{
+ GETPRIVFROMPRIVATE;
+ XKeyboardState ks;
+ unsigned long i;
+ XModifierKeymap *modmap;
+
+ if (dmxInput->console) priv = dmxInput->devs[0]->private;
+ if (!priv->display || priv->stateSaved) return;
+ DMXDBG0("dmxCommonSaveState\n");
+ if (dmxUseXKB && (priv->xkb = XkbAllocKeyboard())) {
+ if (XkbGetIndicatorMap(priv->display, XkbAllIndicatorsMask, priv->xkb)
+ || XkbGetNames(priv->display, XkbAllNamesMask, priv->xkb)) {
+ dmxLogInput(dmxInput, "Could not get XKB information\n");
+ XkbFreeKeyboard(priv->xkb, 0, True);
+ priv->xkb = NULL;
+ } else {
+ if (priv->xkb->indicators) {
+ priv->savedIndicators = *priv->xkb->indicators;
+ for (i = 0; i < XkbNumIndicators; i++)
+ if (priv->xkb->indicators->phys_indicators & (1 << i)) {
+ priv->xkb->indicators->maps[i].flags
+ = XkbIM_NoAutomatic;
+ }
+ XkbSetIndicatorMap(priv->display, ~0, priv->xkb);
+ }
+ }
+ }
+
+ XGetKeyboardControl(priv->display, &ks);
+ priv->savedKctrl.click = ks.key_click_percent;
+ priv->savedKctrl.bell = ks.bell_percent;
+ priv->savedKctrl.bell_pitch = ks.bell_pitch;
+ priv->savedKctrl.bell_duration = ks.bell_duration;
+ priv->savedKctrl.leds = ks.led_mask;
+ priv->savedKctrl.autoRepeat = ks.global_auto_repeat;
+ for (i = 0; i < 32; i++)
+ priv->savedKctrl.autoRepeats[i] = ks.auto_repeats[i];
+
+ dmxCommonKbdSetCtrl(priv->display, &priv->savedKctrl,
+ &priv->dmxLocal->kctrl);
+
+ priv->savedModMap = XGetModifierMapping(priv->display);
+
+ modmap = XNewModifiermap(0);
+ XSetModifierMapping(priv->display, modmap);
+ if (dmxInput->scrnIdx != -1)
+ dmxSync(&dmxScreens[dmxInput->scrnIdx], TRUE);
+ XFreeModifiermap(modmap);
+
+ priv->stateSaved = 1;
+}
+
+/** This routine restores all the information saved by #dmxCommonSaveState. */
+void dmxCommonRestoreState(pointer private)
+{
+ GETPRIVFROMPRIVATE;
+ int retcode = -1;
+ CARD32 start;
+
+ if (dmxInput->console)
+ priv = dmxInput->devs[0]->private;
+ if (!priv->stateSaved)
+ return;
+ priv->stateSaved = 0;
+
+ DMXDBG0("dmxCommonRestoreState\n");
+ if (priv->xkb) {
+ *priv->xkb->indicators = priv->savedIndicators;
+ XkbSetIndicatorMap(priv->display, ~0, priv->xkb);
+ XkbFreeKeyboard(priv->xkb, 0, True);
+ priv->xkb = 0;
+ }
+
+ for (start = GetTimeInMillis(); GetTimeInMillis() - start < 5000;) {
+ CARD32 tmp;
+
+ retcode = XSetModifierMapping(priv->display, priv->savedModMap);
+ if (retcode == MappingSuccess)
+ break;
+ if (retcode == MappingBusy)
+ dmxLogInput(dmxInput, "Keyboard busy, waiting\n");
+ else
+ dmxLogInput(dmxInput, "Keyboard error, waiting\n");
+
+ /* Don't generate X11 protocol for a bit */
+ for (tmp = GetTimeInMillis(); GetTimeInMillis() - tmp < 250;) {
+ usleep(250); /* This ends up sleeping only until
+ * the next key press generates an
+ * interruption. We make the delay
+ * relatively short in case the user
+ * pressed they keys quickly. */
+ }
+
+ }
+ if (retcode != MappingSuccess)
+ dmxLog(dmxWarning, "Unable to restore keyboard modifier state!\n");
+
+ XFreeModifiermap(priv->savedModMap);
+ priv->savedModMap = NULL;
+
+ dmxCommonKbdSetCtrl(priv->display, NULL, &priv->savedKctrl);
+ priv->kctrlset = 0; /* Invalidate copy */
+}
diff --git a/hw/dmx/input/dmxcommon.h b/hw/dmx/input/dmxcommon.h
new file mode 100644
index 0000000..68f2b52
--- /dev/null
+++ b/hw/dmx/input/dmxcommon.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright 2002,2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to functions used by backend and console input devices.
+ * \see dmxcommon.c \see dmxbackend.c \see dmxconsole.c */
+
+#ifndef _DMXCOMMON_H_
+#define _DMXCOMMON_H_
+
+#define DMX_COMMON_OTHER \
+ Display *display; \
+ Window window; \
+ DMXScreenInfo *be; \
+ DMXLocalInputInfoPtr dmxLocal; \
+ int initPointerX; \
+ int initPointerY; \
+ long eventMask; \
+ KeybdCtrl kctrl; \
+ PtrCtrl mctrl; \
+ int kctrlset; \
+ int mctrlset; \
+ KeybdCtrl savedKctrl; \
+ XModifierKeymap *savedModMap; \
+ int stateSaved
+
+#define DMX_COMMON_XKB \
+ DMX_COMMON_OTHER; \
+ XkbDescPtr xkb; \
+ XkbIndicatorRec savedIndicators
+
+#define DMX_COMMON_PRIVATE \
+ DMX_COMMON_XKB; \
+ XDevice *xi
+
+#define GETONLYPRIVFROMPRIVATE \
+ myPrivate *priv = private
+
+#define GETPRIVFROMPRIVATE \
+ GETONLYPRIVFROMPRIVATE; \
+ DMXInputInfo *dmxInput = &dmxInputs[priv->dmxLocal->inputIdx]
+
+#define GETDMXLOCALFROMPDEVICE \
+ DevicePtr pDev = &pDevice->public; \
+ DMXLocalInputInfoPtr dmxLocal = pDev->devicePrivate
+
+#define GETDMXINPUTFROMPRIV \
+ DMXInputInfo *dmxInput = &dmxInputs[priv->dmxLocal->inputIdx]
+
+#define GETDMXINPUTFROMPDEVICE \
+ GETDMXLOCALFROMPDEVICE; \
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx]
+
+#define GETDMXLOCALFROMPDEV \
+ DMXLocalInputInfoPtr dmxLocal = pDev->devicePrivate
+
+#define GETDMXINPUTFROMPDEV \
+ GETDMXLOCALFROMPDEV; \
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx]
+
+#define GETPRIVFROMPDEV \
+ GETDMXLOCALFROMPDEV; \
+ myPrivate *priv = dmxLocal->private
+
+#define DMX_KEYBOARD_EVENT_MASK \
+ (KeyPressMask | KeyReleaseMask | KeymapStateMask)
+
+#define DMX_POINTER_EVENT_MASK \
+ (ButtonPressMask | ButtonReleaseMask | PointerMotionMask)
+
+extern void dmxCommonKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern void dmxCommonKbdGetMap(DevicePtr pDev,
+ KeySymsPtr pKeySyms, CARD8 *pModMap);
+extern void dmxCommonKbdCtrl(DevicePtr pDev, KeybdCtrl *ctrl);
+extern void dmxCommonKbdBell(DevicePtr pDev, int percent,
+ int volume, int pitch, int duration);
+extern int dmxCommonKbdOn(DevicePtr pDev);
+extern void dmxCommonKbdOff(DevicePtr pDev);
+extern void dmxCommonMouGetMap(DevicePtr pDev,
+ unsigned char *map, int *nButtons);
+extern void dmxCommonMouCtrl(DevicePtr pDev, PtrCtrl *ctrl);
+extern int dmxCommonMouOn(DevicePtr pDev);
+extern void dmxCommonMouOff(DevicePtr pDev);
+extern int dmxFindPointerScreen(int x, int y);
+
+extern int dmxCommonOthOn(DevicePtr pDev);
+extern void dmxCommonOthOff(DevicePtr pDev);
+extern void dmxCommonOthGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+
+ /* helper functions */
+extern pointer dmxCommonCopyPrivate(DeviceIntPtr pDevice);
+extern void dmxCommonSaveState(pointer private);
+extern void dmxCommonRestoreState(pointer private);
+#endif
diff --git a/hw/dmx/input/dmxconsole.c b/hw/dmx/input/dmxconsole.c
new file mode 100644
index 0000000..7ec209d
--- /dev/null
+++ b/hw/dmx/input/dmxconsole.c
@@ -0,0 +1,1029 @@
+/*
+ * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * David H. Dawes <dawes@xfree86.org>
+ * Kevin E. Martin <kem@redhat.com>
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This file implements the console input devices.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_CONSOLE_DEBUG 0
+#define DMX_WINDOW_DEBUG 0
+
+#include "dmxinputinit.h"
+#include "dmxevents.h"
+#include "dmxconsole.h"
+#include "dmxcommon.h"
+#include "dmxscrinit.h"
+#include "dmxcb.h"
+#include "dmxsync.h"
+
+#include "inputstr.h"
+#include "input.h"
+#include "mipointer.h"
+#include "windowstr.h"
+
+#define CONSOLE_NUM 3
+#define CONSOLE_DEN 4
+#define DMX_CONSOLE_NAME "DMX Console"
+#define DMX_RES_NAME "Xdmx"
+#define DMX_RES_CLASS "XDmx"
+#define CONSOLE_BG_COLOR "gray75"
+#define CONSOLE_FG_COLOR "black"
+#define CONSOLE_SCREEN_BG_COLOR "white"
+#define CONSOLE_SCREEN_FG_COLOR "black"
+#define CONSOLE_SCREEN_DET_COLOR "gray75"
+#define CONSOLE_SCREEN_CUR_COLOR "red"
+
+#if DMX_CONSOLE_DEBUG
+#define DMXDBG0(f) dmxLog(dmxDebug,f)
+#define DMXDBG1(f,a) dmxLog(dmxDebug,f,a)
+#define DMXDBG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define DMXDBG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define DMXDBG4(f,a,b,c,d) dmxLog(dmxDebug,f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e) dmxLog(dmxDebug,f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g) dmxLog(dmxDebug,f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h) dmxLog(dmxDebug,f,a,b,c,d,e,g,h)
+#else
+#define DMXDBG0(f)
+#define DMXDBG1(f,a)
+#define DMXDBG2(f,a,b)
+#define DMXDBG3(f,a,b,c)
+#define DMXDBG4(f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h)
+#endif
+
+/* Private area for consoles. */
+typedef struct _myPrivate {
+ DMX_COMMON_PRIVATE;
+ int lastX;
+ int lastY;
+ int globalX;
+ int globalY;
+ int curX;
+ int curY;
+ int width;
+ int height;
+ int consWidth;
+ int consHeight;
+ double xScale;
+ double yScale;
+ XlibGC gc, gcDet, gcRev, gcCur;
+ int grabbed, fine, captured;
+ Cursor cursorNormal, cursorGrabbed, cursorEmpty;
+ Pixmap pixmap;
+
+ CloseScreenProcPtr CloseScreen;
+ struct _myPrivate *next; /* for closing multiple consoles */
+ int initialized;
+ DevicePtr mou, kbd;
+} myPrivate;
+
+static int scalex(myPrivate *priv, int x)
+{
+ return (int)((x * priv->xScale) + .5);
+}
+
+static int scaley(myPrivate *priv, int y)
+{
+ return (int)((y * priv->yScale) + .5);
+}
+
+static int unscalex(myPrivate *priv, int x)
+{
+ return (int)((x / priv->xScale) + .5);
+}
+
+static int unscaley(myPrivate *priv, int y)
+{
+ return (int)((y / priv->yScale) + .5);
+}
+
+/** Create the private area for \a pDevice. */
+pointer dmxConsoleCreatePrivate(DeviceIntPtr pDevice)
+{
+ GETDMXLOCALFROMPDEVICE;
+ myPrivate *priv = calloc(1, sizeof(*priv));
+ priv->dmxLocal = dmxLocal;
+ return priv;
+}
+
+/** If \a private is non-NULL, free its associated memory. */
+void dmxConsoleDestroyPrivate(pointer private)
+{
+ free(private);
+}
+
+static void dmxConsoleDrawFineCursor(myPrivate *priv, XRectangle *rect)
+{
+ int size = 6;
+ int x, y;
+
+ XDrawLine(priv->display, priv->pixmap, priv->gcCur,
+ x = scalex(priv, priv->globalX) - size,
+ scaley(priv, priv->globalY),
+ scalex(priv, priv->globalX) + size,
+ scaley(priv, priv->globalY));
+ XDrawLine(priv->display, priv->pixmap, priv->gcCur,
+ scalex(priv, priv->globalX),
+ y = scaley(priv, priv->globalY) - size,
+ scalex(priv, priv->globalX),
+ scaley(priv, priv->globalY) + size);
+ if (priv->grabbed) {
+ XDrawLine(priv->display, priv->pixmap, priv->gcCur,
+ scalex(priv, priv->globalX) - (int)(size / 1.4),
+ scaley(priv, priv->globalY) - (int)(size / 1.4),
+ scalex(priv, priv->globalX) + (int)(size / 1.4),
+ scaley(priv, priv->globalY) + (int)(size / 1.4));
+ XDrawLine(priv->display, priv->pixmap, priv->gcCur,
+ scalex(priv, priv->globalX) - (int)(size / 1.4),
+ scaley(priv, priv->globalY) + (int)(size / 1.4),
+ scalex(priv, priv->globalX) + (int)(size / 1.4),
+ scaley(priv, priv->globalY) - (int)(size / 1.4));
+ }
+ if (rect) {
+ rect->x = x;
+ rect->y = y;
+ rect->width = 2 * size;
+ rect->height = 2 * size;
+ }
+}
+
+static void dmxConsoleDrawWindows(pointer private)
+{
+ GETONLYPRIVFROMPRIVATE;
+ Display *dpy = priv->display;
+ int i;
+ Region whole, used, avail;
+ XRectangle rect;
+
+ whole = XCreateRegion();
+ used = XCreateRegion();
+ avail = XCreateRegion();
+ rect.x = 0;
+ rect.y = 0;
+ rect.width = priv->consWidth;
+ rect.height = priv->consHeight;
+ XUnionRectWithRegion(&rect, whole, whole);
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ ScreenPtr pScreen = screenInfo.screens[i];
+ WindowPtr pRoot = pScreen->root;
+ WindowPtr pChild;
+
+#if DMX_WINDOW_DEBUG
+ dmxLog(dmxDebug, "%lu %p %p %p 2\n",
+ pRoot->drawable.id,
+ pRoot->parent, pRoot->firstChild, pRoot->lastChild);
+#endif
+
+ for (pChild = pRoot->firstChild; pChild; pChild = pChild->nextSib) {
+ if (pChild->mapped
+ && pChild->realized) {
+#if DMX_WINDOW_DEBUG
+ dmxLog(dmxDebug, " %p %d,%d %dx%d %d %d %d RECTS\n",
+ pChild,
+ pChild->drawable.x,
+ pChild->drawable.y,
+ pChild->drawable.width,
+ pChild->drawable.height,
+ pChild->visibility,
+ pChild->overrideRedirect,
+ RegionNumRects(&pChild->clipList));
+#endif
+ rect.x = scalex(priv, pChild->drawable.x + pScreen->x);
+ rect.y = scaley(priv, pChild->drawable.y + pScreen->y);
+ rect.width = scalex(priv, pChild->drawable.width);
+ rect.height = scaley(priv, pChild->drawable.height);
+ XDrawRectangle(dpy, priv->pixmap, priv->gc,
+ rect.x, rect.y, rect.width, rect.height);
+ XUnionRectWithRegion(&rect, used, used);
+ XSubtractRegion(whole, used, avail);
+ XSetRegion(dpy, priv->gc, avail);
+ }
+ }
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension) break; /* Screen 0 valid with Xinerama */
+#endif
+ }
+ XDestroyRegion(avail);
+ XDestroyRegion(used);
+ XDestroyRegion(whole);
+ XSetClipMask(dpy, priv->gc, None);
+}
+
+static void dmxConsoleDraw(myPrivate *priv, int updateCursor, int update)
+{
+ GETDMXINPUTFROMPRIV;
+ Display *dpy = priv->display;
+ int i;
+
+ XFillRectangle(dpy, priv->pixmap, priv->gc, 0, 0,
+ priv->consWidth, priv->consHeight);
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ XFillRectangle(dpy, priv->pixmap,
+ dmxScreen->beDisplay ? priv->gcRev : priv->gcDet,
+ scalex(priv, screenInfo.screens[i]->x),
+ scaley(priv, screenInfo.screens[i]->y),
+ scalex(priv, screenInfo.screens[i]->width),
+ scaley(priv, screenInfo.screens[i]->height));
+ }
+ for (i = 0; i < dmxNumScreens; i++) {
+ XDrawRectangle(dpy, priv->pixmap, priv->gc,
+ scalex(priv, screenInfo.screens[i]->x),
+ scaley(priv, screenInfo.screens[i]->y),
+ scalex(priv, screenInfo.screens[i]->width),
+ scaley(priv, screenInfo.screens[i]->height));
+ }
+ if (dmxInput->windows) dmxConsoleDrawWindows(priv);
+ if (priv->fine && updateCursor) dmxConsoleDrawFineCursor(priv, 0);
+ if (update) {
+ XCopyArea(priv->display, priv->pixmap, priv->window, priv->gc,
+ 0, 0, priv->consWidth, priv->consHeight, 0, 0);
+ XSync(priv->display, False); /* Not a backend display */
+ }
+}
+
+static void dmxConsoleClearCursor(myPrivate *priv, int x, int y,
+ XRectangle *rect)
+{
+ int cw = 14, ch = 14; /* Clear width and height */
+
+ rect->x = scalex(priv, x) - cw/2;
+ rect->y = scaley(priv, y) - ch/2;
+ rect->width = cw;
+ rect->height = ch;
+ XSetClipRectangles(priv->display, priv->gc, 0, 0, rect, 1, Unsorted);
+ XSetClipRectangles(priv->display, priv->gcDet, 0, 0, rect, 1, Unsorted);
+ XSetClipRectangles(priv->display, priv->gcRev, 0, 0, rect, 1, Unsorted);
+ dmxConsoleDraw(priv, 0, 0);
+ XSetClipMask(priv->display, priv->gc, None);
+ XSetClipMask(priv->display, priv->gcDet, None);
+ XSetClipMask(priv->display, priv->gcRev, None);
+}
+
+
+static void dmxConsoleUpdateFineCursor(myPrivate *priv)
+{
+ int leave = 0;
+ XRectangle rects[2];
+
+ dmxConsoleClearCursor(priv, priv->globalX, priv->globalY, &rects[0]);
+ if (priv->dmxLocal->sendsCore) {
+ dmxGetGlobalPosition(&priv->globalX, &priv->globalY);
+ } else {
+ priv->globalX = priv->dmxLocal->lastX;
+ priv->globalY = priv->dmxLocal->lastY;
+ }
+
+ priv->lastX = scalex(priv, priv->width / 2);
+ priv->lastY = scaley(priv, priv->height / 2);
+
+ /* Compute new warp position, which may be
+ outside the window */
+ if (priv->globalX < 1 || priv->globalX >= priv->width) {
+ if (priv->globalX < 1) priv->lastX = 0;
+ else priv->lastX = scalex(priv, priv->width);
+ priv->lastY = scaley(priv, priv->globalY);
+ ++leave;
+ }
+ if (priv->globalY < 1 || priv->globalY >= priv->height) {
+ if (priv->globalY < 1) priv->lastY = 0;
+ else priv->lastY = scaley(priv, priv->height);
+ priv->lastX = scalex(priv, priv->globalX);
+ ++leave;
+ }
+
+ /* Draw pseudo cursor in window */
+ dmxConsoleDrawFineCursor(priv, &rects[1]);
+
+ XSetClipRectangles(priv->display, priv->gc, 0, 0, rects, 2, Unsorted);
+ XCopyArea(priv->display, priv->pixmap, priv->window, priv->gc,
+ 0, 0, priv->consWidth, priv->consHeight, 0, 0);
+ XSetClipMask(priv->display, priv->gc, None);
+
+ DMXDBG2("dmxConsoleUpdateFineCursor: WARP %d %d\n",
+ priv->lastX, priv->lastY);
+ XWarpPointer(priv->display, priv->window, priv->window,
+ 0, 0, 0, 0, priv->lastX, priv->lastY);
+ XSync(priv->display, False); /* Not a backend display */
+
+ if (leave) {
+ XEvent X;
+ while (XCheckMaskEvent(priv->display, PointerMotionMask, &X)) {
+ if (X.type == MotionNotify) {
+ if (X.xmotion.x != priv->lastX || X.xmotion.y != priv->lastY) {
+ DMXDBG4("Ignoring motion to %d %d after leave frm %d %d\n",
+ X.xmotion.x, X.xmotion.y,
+ priv->lastX, priv->lastY);
+ }
+ } else {
+ dmxLog(dmxInfo, "Ignoring event (%d): %s ****************\n",
+ X.type, dmxEventName(X.type));
+ }
+ }
+ }
+ DMXDBG6("dmxConsoleUpdateFineCursor: Warp %d %d on %d %d [%d %d]\n",
+ priv->lastX, priv->lastY,
+ scalex(priv, priv->width),
+ scaley(priv, priv->height),
+ priv->globalX, priv->globalY);
+}
+
+/** Whenever the window layout (size, position, stacking order) might be
+ * changed, this routine is called with the \a pWindow that changed and
+ * the \a type of change. This routine is called in a conservative
+ * fashion: the actual layout of the windows of the screen might not
+ * have had any human-visible changes. */
+void dmxConsoleUpdateInfo(pointer private, DMXUpdateType type,
+ WindowPtr pWindow)
+{
+ GETONLYPRIVFROMPRIVATE;
+ dmxConsoleDraw(priv, 1, 1);
+}
+
+static void dmxConsoleMoveAbsolute(myPrivate *priv, int x, int y,
+ DevicePtr pDev, dmxMotionProcPtr motion,
+ DMXBlockType block)
+{
+ int tmpX, tmpY, v[2];
+
+ tmpX = unscalex(priv, x);
+ tmpY = unscalex(priv, y);
+ DMXDBG6("dmxConsoleMoveAbsolute(,%d,%d) %d %d =? %d %d\n",
+ x, y, tmpX, tmpY, priv->curX, priv->curY);
+ if (tmpX == priv->curX && tmpY == priv->curY) return;
+ v[0] = unscalex(priv, x);
+ v[1] = unscaley(priv, y);
+ motion(pDev, v, 0, 2, DMX_ABSOLUTE_CONFINED, block);
+ /* dmxConsoleUpdatePosition gets called here by dmxCoreMotion */
+}
+
+static void dmxConsoleMoveRelative(myPrivate *priv, int x, int y,
+ DevicePtr pDev, dmxMotionProcPtr motion,
+ DMXBlockType block)
+{
+ int v[2];
+ /* Ignore the event generated from * warping back to middle */
+ if (x == priv->lastX && y == priv->lastY) return;
+ v[0] = priv->lastX - x;
+ v[1] = priv->lastY - y;
+ motion(pDev, v, 0, 2, DMX_RELATIVE, block);
+ /* dmxConsoleUpdatePosition gets called here by dmxCoreMotion */
+}
+
+/** This routine gets called from #dmxCoreMotion for each motion. This
+ * allows the console's notion of the cursor postion to change when
+ * another input device actually caused the change. */
+void dmxConsoleUpdatePosition(pointer private, int x, int y)
+{
+ GETONLYPRIVFROMPRIVATE;
+ int tmpX, tmpY;
+ Display *dpy = priv->display;
+ static unsigned long dmxGeneration = 0;
+
+
+ tmpX = scalex(priv, x);
+ tmpY = scaley(priv, y);
+ DMXDBG6("dmxConsoleUpdatePosition(,%d,%d) new=%d,%d dims=%d,%d\n",
+ x, y, tmpX, tmpY, priv->consWidth, priv->consHeight);
+
+ if (priv->fine) dmxConsoleUpdateFineCursor(priv);
+ if (tmpX != priv->curX || tmpY != priv->curY) {
+ if (tmpX < 0) tmpX = 0;
+ if (tmpY < 0) tmpY = 0;
+ if (tmpX >= priv->consWidth) tmpX = priv->consWidth - 1;
+ if (tmpY >= priv->consHeight) tmpY = priv->consHeight - 1;
+ priv->curX = tmpX;
+ priv->curY = tmpY;
+ if (!priv->fine) {
+ DMXDBG2(" WARP B %d %d\n", priv->curX, priv->curY);
+ XWarpPointer(dpy, priv->window,
+ priv->window, 0, 0, 0, 0, tmpX, tmpY);
+ XSync(dpy, False); /* Not a backend display */
+ }
+ }
+
+ if (dmxGeneration != serverGeneration) {
+ dmxGeneration = serverGeneration;
+ dmxConsoleDraw(priv, 1, 1);
+ }
+}
+
+/** Collect all pending events from the console's display. Plase these
+ * events on the server event queue using the \a motion and \a enqueue
+ * routines. The \a checkspecial routine is used to check for special
+ * keys that need handling. \a block tells if signals should be blocked
+ * when updating the event queue. */
+void dmxConsoleCollectEvents(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block)
+{
+ GETPRIVFROMPDEV;
+ GETDMXINPUTFROMPRIV;
+ Display *dpy = priv->display;
+ Window win = priv->window;
+ int width = priv->width;
+ int height = priv->height;
+ XEvent X, N;
+ XSetWindowAttributes attribs;
+ static int rInitialized = 0;
+ static Region r;
+ XRectangle rect;
+ static int raising = 0, raiseX, raiseY; /* FIXME */
+
+ while (XPending(dpy)) {
+ XNextEvent(dpy, &X);
+ switch(X.type) {
+ case VisibilityNotify:
+ break;
+ case Expose:
+ DMXDBG5("dmxConsoleCollectEvents: Expose #%d %d %d %d %d\n",
+ X.xexpose.count,
+ X.xexpose.x, X.xexpose.y,
+ X.xexpose.width, X.xexpose.height);
+ if (!rInitialized++) r = XCreateRegion();
+ rect.x = X.xexpose.x;
+ rect.y = X.xexpose.y;
+ rect.width = X.xexpose.width;
+ rect.height = X.xexpose.height;
+ XUnionRectWithRegion(&rect, r, r);
+ if (X.xexpose.count == 0) {
+ XSetRegion(dpy, priv->gc, r);
+ XSetRegion(dpy, priv->gcDet, r);
+ XSetRegion(dpy, priv->gcRev, r);
+ dmxConsoleDraw(priv, 1, 1);
+ XSetClipMask(dpy, priv->gc, None);
+ XSetClipMask(dpy, priv->gcDet, None);
+ XSetClipMask(dpy, priv->gcRev, None);
+ XDestroyRegion(r);
+ rInitialized = 0;
+ }
+ break;
+ case ResizeRequest:
+ DMXDBG2("dmxConsoleCollectEvents: Resize %d %d\n",
+ X.xresizerequest.width, X.xresizerequest.height);
+ priv->consWidth = X.xresizerequest.width;
+ priv->consHeight = X.xresizerequest.height;
+ priv->xScale = (double)priv->consWidth / width;
+ priv->yScale = (double)priv->consHeight / height;
+ attribs.override_redirect = True;
+ XChangeWindowAttributes(dpy, win, CWOverrideRedirect, &attribs);
+ XResizeWindow(dpy, win, priv->consWidth, priv->consHeight);
+ XFreePixmap(dpy, priv->pixmap);
+ priv->pixmap = XCreatePixmap(dpy,
+ RootWindow(dpy, DefaultScreen(dpy)),
+ priv->consWidth,
+ priv->consHeight,
+ DefaultDepth(dpy,DefaultScreen(dpy)));
+ dmxConsoleDraw(priv, 1, 1);
+ attribs.override_redirect = False;
+ XChangeWindowAttributes(dpy, win, CWOverrideRedirect, &attribs);
+ break;
+ case LeaveNotify:
+ DMXDBG4("dmxConsoleCollectEvents: Leave @ %d,%d; r=%d f=%d\n",
+ X.xcrossing.x, X.xcrossing.y, raising, priv->fine);
+ if (!priv->captured) dmxCommonRestoreState(priv);
+ else {
+ dmxConsoleUncapture(dmxInput);
+ dmxCommonRestoreState(priv);
+ }
+ break;
+ case EnterNotify:
+ DMXDBG6("dmxConsoleCollectEvents: Enter %d,%d r=%d f=%d (%d,%d)\n",
+ X.xcrossing.x, X.xcrossing.y, raising, priv->fine,
+ priv->curX, priv->curY);
+ dmxCommonSaveState(priv);
+ if (raising) {
+ raising = 0;
+ dmxConsoleMoveAbsolute(priv, raiseX, raiseY,
+ priv->mou, motion, block);
+ } else {
+ if (priv->fine) {
+ /* The raise will generate an event near the center,
+ * which is not where the cursor should be. So we
+ * save the real position, do the raise, and move
+ * the cursor here again after the raise generates
+ * the event. */
+ raising = 1;
+ raiseX = X.xcrossing.x;
+ raiseY = X.xcrossing.y;
+ XRaiseWindow(dpy, priv->window);
+ }
+ XSync(dpy, False); /* Not a backend display */
+ if (!X.xcrossing.x && !X.xcrossing.y)
+ dmxConsoleMoveAbsolute(priv, priv->curX, priv->curY,
+ priv->mou, motion, block);
+ }
+ break;
+ case MotionNotify:
+ if (priv->curX == X.xmotion.x && priv->curY == X.xmotion.y)
+ continue;
+ if (XPending(dpy)) { /* do motion compression */
+ XPeekEvent(dpy, &N);
+ if (N.type == MotionNotify) continue;
+ }
+ DMXDBG2("dmxConsoleCollectEvents: Motion %d %d\n",
+ X.xmotion.x, X.xmotion.y);
+ if (raising) {
+ raising = 0;
+ dmxConsoleMoveAbsolute(priv, raiseX, raiseY,
+ priv->mou, motion, block);
+ } else {
+ if (priv->fine)
+ dmxConsoleMoveRelative(priv, X.xmotion.x, X.xmotion.y,
+ priv->mou, motion, block);
+ else
+ dmxConsoleMoveAbsolute(priv, X.xmotion.x, X.xmotion.y,
+ priv->mou, motion, block);
+ }
+ break;
+ case KeyPress:
+ case KeyRelease:
+ enqueue(priv->kbd, X.type, X.xkey.keycode, 0, NULL, block);
+ break;
+ default:
+ /* Pass the whole event here, because
+ * this may be an extension event. */
+ enqueue(priv->mou, X.type, X.xbutton.button, 0, &X, block);
+ break;
+ }
+ }
+}
+
+static void dmxCloseConsole(myPrivate *priv)
+{
+ GETDMXINPUTFROMPRIV;
+ dmxCommonRestoreState(priv);
+ if (priv->display) {
+ XFreeGC(priv->display, priv->gc);
+ XFreeGC(priv->display, priv->gcDet);
+ XFreeGC(priv->display, priv->gcRev);
+ XFreeGC(priv->display, priv->gcCur);
+ if (!dmxInput->console) XCloseDisplay(priv->display);
+ }
+ priv->display = NULL;
+}
+
+static Bool dmxCloseConsoleScreen(int idx, ScreenPtr pScreen)
+{
+ myPrivate *priv, *last;
+
+ for (last = priv = (myPrivate *)dixLookupPrivate(&pScreen->devPrivates,
+ dmxScreenPrivateKey);
+ priv;
+ priv = priv->next) dmxCloseConsole(last = priv);
+
+ DMX_UNWRAP(CloseScreen, last, pScreen);
+ return pScreen->CloseScreen(idx, pScreen);
+}
+
+static Cursor dmxConsoleCreateEmptyCursor(myPrivate *priv)
+{
+ char noCursorData[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ Pixmap pixmap;
+ Cursor cursor;
+ XColor color, tmpColor;
+ Display *dpy = priv->display;
+
+ /* Create empty cursor for window */
+ pixmap = XCreateBitmapFromData(priv->display, priv->window,
+ noCursorData, 8, 8);
+ if (!XAllocNamedColor(dpy, DefaultColormap(dpy, DefaultScreen(dpy)),
+ "black",
+ &color,
+ &tmpColor))
+ dmxLog(dmxFatal, "Cannot allocate color for cursor\n");
+ cursor = XCreatePixmapCursor(dpy, pixmap, pixmap, &color, &color, 0, 0);
+ XFreePixmap(dpy, pixmap);
+ return cursor;
+}
+
+static void dmxConsoleComputeWidthHeight(myPrivate *priv,
+ int *width, int *height,
+ double *xScale, double *yScale,
+ int *consWidth, int *consHeight)
+{
+ int screen;
+ Display *dpy = priv->display;
+
+ *width = 0;
+ *height = 0;
+ *xScale = 1.0;
+ *yScale = 1.0;
+
+ screen = DefaultScreen(dpy);
+ *consWidth = DisplayWidth(dpy, screen) * CONSOLE_NUM / CONSOLE_DEN;
+ *consHeight = DisplayHeight(dpy, screen) * CONSOLE_NUM / CONSOLE_DEN;
+
+ if (*consWidth < 1) *consWidth = 1;
+ if (*consHeight < 1) *consHeight = 1;
+
+#if 1
+ /* Always keep the console size similar
+ * to the global bounding box. */
+ *width = dmxGlobalWidth;
+ *height = dmxGlobalHeight;
+#else
+ /* Make the console window as big as
+ * possible by computing the visible
+ * bounding box. */
+ for (i = 0; i < dmxNumScreens; i++) {
+ if (screenInfo.screens[i]->x+screenInfo.screens[i]->width > *width)
+ *width = screenInfo.screens[i]->x+screenInfo.screens[i]->width;
+
+ if (screenInfo.screens[i]->y+screenInfo.screens[i]->height > *height)
+ *height = screenInfo.screens[i]->y+screenInfo.screens[i]->height;
+ }
+#endif
+
+ if ((double)*consWidth / *width < (double)*consHeight / *height)
+ *xScale = *yScale = (double)*consWidth / *width;
+ else
+ *xScale = *yScale = (double)*consHeight / *height;
+
+ *consWidth = scalex(priv, *width);
+ *consHeight = scaley(priv, *height);
+ if (*consWidth < 1) *consWidth = 1;
+ if (*consHeight < 1) *consHeight = 1;
+}
+
+/** Re-initialized the console device described by \a pDev (after a
+ * reconfig). */
+void dmxConsoleReInit(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ Display *dpy;
+
+ if (!priv || !priv->initialized) return;
+ dpy = priv->display;
+
+ dmxConsoleComputeWidthHeight(priv,
+ &priv->width, &priv->height,
+ &priv->xScale, &priv->yScale,
+ &priv->consWidth, &priv->consHeight);
+ XResizeWindow(dpy, priv->window, priv->consWidth, priv->consHeight);
+ XFreePixmap(dpy, priv->pixmap);
+ priv->pixmap = XCreatePixmap(dpy,
+ RootWindow(dpy, DefaultScreen(dpy)),
+ priv->consWidth,
+ priv->consHeight,
+ DefaultDepth(dpy,DefaultScreen(dpy)));
+ dmxConsoleDraw(priv, 1, 1);
+}
+
+/** Initialized the console device described by \a pDev. */
+void dmxConsoleInit(DevicePtr pDev)
+{
+ GETPRIVFROMPDEV;
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
+ int screen;
+ unsigned long mask;
+ XSetWindowAttributes attribs;
+ Display *dpy;
+ Window win;
+ XGCValues gcvals;
+ XColor color;
+ XClassHint class_hints;
+ unsigned long tmp;
+
+ if (dmxLocal->type == DMX_LOCAL_MOUSE) priv->mou = pDev;
+ if (dmxLocal->type == DMX_LOCAL_KEYBOARD) priv->kbd = pDev;
+ if (priv->initialized++) return; /* Only do once for mouse/keyboard pair */
+
+ if (!(dpy = priv->display = XOpenDisplay(dmxInput->name)))
+ dmxLog(dmxFatal,
+ "dmxOpenConsole: cannot open console display %s\n",
+ dmxInput->name);
+
+ /* Set up defaults */
+ dmxConsoleComputeWidthHeight(priv,
+ &priv->width, &priv->height,
+ &priv->xScale, &priv->yScale,
+ &priv->consWidth, &priv->consHeight);
+
+ /* Private initialization using computed values or constants. */
+ screen = DefaultScreen(dpy);
+ priv->initPointerX = scalex(priv, priv->width / 2);
+ priv->initPointerY = scaley(priv, priv->height / 2);
+ priv->eventMask = (ButtonPressMask
+ | ButtonReleaseMask
+ | PointerMotionMask
+ | EnterWindowMask
+ | LeaveWindowMask
+ | KeyPressMask
+ | KeyReleaseMask
+ | ExposureMask
+ | ResizeRedirectMask);
+
+ mask = CWBackPixel | CWEventMask | CWColormap | CWOverrideRedirect;
+ attribs.colormap = DefaultColormap(dpy, screen);
+ if (XParseColor(dpy, attribs.colormap, CONSOLE_BG_COLOR, &color)
+ && XAllocColor(dpy, attribs.colormap, &color)) {
+ attribs.background_pixel = color.pixel;
+ } else
+ attribs.background_pixel = WhitePixel(dpy, screen);
+
+ attribs.event_mask = priv->eventMask;
+ attribs.override_redirect = False;
+
+ win = priv->window = XCreateWindow(dpy,
+ RootWindow(dpy, screen),
+ 0, 0, priv->consWidth, priv->consHeight,
+ 0,
+ DefaultDepth(dpy, screen),
+ InputOutput,
+ DefaultVisual(dpy, screen),
+ mask, &attribs);
+ priv->pixmap = XCreatePixmap(dpy, RootWindow(dpy, screen),
+ priv->consWidth, priv->consHeight,
+ DefaultDepth(dpy, screen));
+
+ /* Set up properties */
+ XStoreName(dpy, win, DMX_CONSOLE_NAME);
+ class_hints.res_name = DMX_RES_NAME;
+ class_hints.res_class = DMX_RES_CLASS;
+ XSetClassHint(dpy, win, &class_hints);
+
+
+ /* Map the window */
+ XMapWindow(dpy, win);
+
+ /* Create cursors */
+ priv->cursorNormal = XCreateFontCursor(dpy, XC_circle);
+ priv->cursorGrabbed = XCreateFontCursor(dpy, XC_spider);
+ priv->cursorEmpty = dmxConsoleCreateEmptyCursor(priv);
+ XDefineCursor(dpy, priv->window, priv->cursorNormal);
+
+ /* Create GC */
+ mask = (GCFunction | GCPlaneMask | GCClipMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle | GCCapStyle |
+ GCFillStyle | GCGraphicsExposures);
+ gcvals.function = GXcopy;
+ gcvals.plane_mask = AllPlanes;
+ gcvals.clip_mask = None;
+ if (XParseColor(dpy, attribs.colormap, CONSOLE_SCREEN_FG_COLOR, &color)
+ && XAllocColor(dpy, attribs.colormap, &color)) {
+ gcvals.foreground = color.pixel;
+ } else
+ gcvals.foreground = BlackPixel(dpy, screen);
+ if (XParseColor(dpy, attribs.colormap, CONSOLE_SCREEN_BG_COLOR, &color)
+ && XAllocColor(dpy, attribs.colormap, &color)) {
+ gcvals.background = color.pixel;
+ } else
+ gcvals.background = WhitePixel(dpy, screen);
+ gcvals.line_width = 0;
+ gcvals.line_style = LineSolid;
+ gcvals.cap_style = CapNotLast;
+ gcvals.fill_style = FillSolid;
+ gcvals.graphics_exposures = False;
+
+ priv->gc = XCreateGC(dpy, win, mask, &gcvals);
+
+ tmp = gcvals.foreground;
+ if (XParseColor(dpy, attribs.colormap, CONSOLE_SCREEN_DET_COLOR, &color)
+ && XAllocColor(dpy, attribs.colormap, &color)) {
+ gcvals.foreground = color.pixel;
+ } else
+ gcvals.foreground = BlackPixel(dpy, screen);
+ priv->gcDet = XCreateGC(dpy, win, mask, &gcvals);
+ gcvals.foreground = tmp;
+
+ tmp = gcvals.background;
+ gcvals.background = gcvals.foreground;
+ gcvals.foreground = tmp;
+ priv->gcRev = XCreateGC(dpy, win, mask, &gcvals);
+
+ gcvals.background = gcvals.foreground;
+ if (XParseColor(dpy, attribs.colormap, CONSOLE_SCREEN_CUR_COLOR, &color)
+ && XAllocColor(dpy, attribs.colormap, &color)) {
+ gcvals.foreground = color.pixel;
+ } else
+ gcvals.foreground = BlackPixel(dpy, screen);
+ priv->gcCur = XCreateGC(dpy, win, mask, &gcvals);
+
+ dmxConsoleDraw(priv, 1, 1);
+
+ if (dixLookupPrivate(&screenInfo.screens[0]->devPrivates,
+ dmxScreenPrivateKey))
+ priv->next = dixLookupPrivate(&screenInfo.screens[0]->devPrivates,
+ dmxScreenPrivateKey);
+ else
+ DMX_WRAP(CloseScreen, dmxCloseConsoleScreen,
+ priv, screenInfo.screens[0]);
+ dixSetPrivate(&screenInfo.screens[0]->devPrivates, dmxScreenPrivateKey,
+ priv);
+}
+
+/** Fill in the \a info structure for the specified \a pDev. Only used
+ * for pointers. */
+void dmxConsoleMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ GETPRIVFROMPDEV;
+
+ info->buttonClass = 1;
+ dmxCommonMouGetMap(pDev, info->map, &info->numButtons);
+ info->valuatorClass = 1;
+ info->numRelAxes = 2;
+ info->minval[0] = 0;
+ info->minval[1] = 0;
+ /* max possible console window size: */
+ info->maxval[0] = DisplayWidth(priv->display, DefaultScreen(priv->display));
+ info->maxval[1] = DisplayHeight(priv->display, DefaultScreen(priv->display));
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ info->ptrFeedbackClass = 1;
+}
+
+/** Fill in the \a info structure for the specified \a pDev. Only used
+ * for keyboard. */
+void dmxConsoleKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ dmxCommonKbdGetInfo(pDev, info);
+ info->keyboard = 1;
+ info->keyClass = 1;
+ dmxCommonKbdGetMap(pDev, &info->keySyms, info->modMap);
+ info->freemap = 1;
+ info->focusClass = 1;
+ info->kbdFeedbackClass = 1;
+}
+
+/** Handle special console-only keys. */
+int dmxConsoleFunctions(pointer private, DMXFunctionType function)
+{
+ GETONLYPRIVFROMPRIVATE;
+ XRectangle rect;
+ Display *dpy = priv->display;
+
+ switch (function) {
+ case DMX_FUNCTION_FINE:
+ if (priv->fine) {
+ priv->fine = 0;
+ dmxConsoleClearCursor(priv, priv->globalX, priv->globalY, &rect);
+ XSetClipRectangles(dpy, priv->gc, 0, 0, &rect, 1, Unsorted);
+ XCopyArea(dpy, priv->pixmap, priv->window, priv->gc,
+ 0, 0, priv->consWidth, priv->consHeight, 0, 0);
+ XSetClipMask(dpy, priv->gc, None);
+
+ XDefineCursor(dpy, priv->window,
+ priv->grabbed
+ ? priv->cursorGrabbed
+ : priv->cursorNormal);
+ XWarpPointer(dpy, priv->window, priv->window,
+ 0, 0, 0, 0,
+ scalex(priv, priv->globalX),
+ scaley(priv, priv->globalY));
+ XSync(dpy, False); /* Not a backend display */
+ } else {
+ priv->fine = 1;
+ XRaiseWindow(dpy, priv->window);
+ XDefineCursor(dpy, priv->window, priv->cursorEmpty);
+ dmxConsoleUpdateFineCursor(priv);
+ }
+ return 1;
+ case DMX_FUNCTION_GRAB:
+ if (priv->grabbed) {
+ XUngrabKeyboard(dpy, CurrentTime);
+ XUngrabPointer(dpy, CurrentTime);
+ XDefineCursor(dpy, priv->window,
+ priv->fine
+ ? priv->cursorEmpty
+ : priv->cursorNormal);
+ } else {
+ if (XGrabPointer(dpy, priv->window, True,
+ 0, GrabModeAsync, GrabModeAsync, priv->window,
+ None, CurrentTime)) {
+ dmxLog(dmxError, "XGrabPointer failed\n");
+ return 0;
+ }
+ if (XGrabKeyboard(dpy, priv->window, True,
+ GrabModeAsync, GrabModeAsync, CurrentTime)) {
+ dmxLog(dmxError, "XGrabKeyboard failed\n");
+ XUngrabPointer(dpy, CurrentTime);
+ return 0;
+ }
+ XDefineCursor(dpy, priv->window,
+ priv->fine
+ ? priv->cursorEmpty
+ : priv->cursorGrabbed);
+ }
+ priv->grabbed = !priv->grabbed;
+ if (priv->fine) dmxConsoleUpdateFineCursor(priv);
+ return 1;
+ case DMX_FUNCTION_TERMINATE:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static void dmxDump(void)
+{
+ int i, j;
+ DMXInputInfo *dmxInput;
+ XEvent X;
+
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
+ for (j = 0; j < dmxInput->numDevs; j++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[j];
+ myPrivate *priv = dmxLocal->private;
+ while (priv
+ && priv->display
+ && XCheckTypedEvent(priv->display, MotionNotify, &X)) {
+ DMXDBG4("dmxDump: %s/%d threw event away %d %s\n",
+ dmxInput->name, j, X.type, dmxEventName(X.type));
+ }
+ }
+ }
+}
+
+/** This routine is used to warp the pointer into the console window
+ * from anywhere on the screen. It is used when backend and console
+ * input are both being taken from the same X display. */
+void dmxConsoleCapture(DMXInputInfo *dmxInput)
+{
+ int i;
+ XEvent X;
+
+ DMXDBG0("dmxConsoleCapture\n");
+ dmxSync(NULL, TRUE);
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ myPrivate *priv = dmxLocal->private;
+ if (dmxLocal->extType != DMX_LOCAL_TYPE_CONSOLE) continue;
+ if (dmxLocal->type != DMX_LOCAL_MOUSE) continue;
+ if (priv->captured) continue;
+ priv->captured = 2; /* Ungrab only after proximal events. */
+ XRaiseWindow(priv->display, priv->window);
+ XSync(priv->display, False); /* Not a backend display */
+ while (XCheckTypedEvent(priv->display, MotionNotify, &X)) {
+ DMXDBG3(" Ignoring motion to %d %d after capture on %s\n",
+ X.xmotion.x, X.xmotion.y, dmxInput->name);
+ }
+ XWarpPointer(priv->display, None,
+ priv->window, 0, 0, 0, 0, priv->curX, priv->curY);
+ XSync(priv->display, False); /* Not a backend display */
+ dmxDump();
+ if (priv->fine) dmxConsoleUpdateFineCursor(priv);
+ }
+}
+
+/** Undo the capture that was done by #dmxConsoleCapture. */
+void dmxConsoleUncapture(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ DMXDBG0("dmxConsoleUncapture\n");
+ dmxSync(NULL, TRUE);
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ myPrivate *priv = dmxLocal->private;
+ if (dmxLocal->extType != DMX_LOCAL_TYPE_CONSOLE) continue;
+ if (dmxLocal->type != DMX_LOCAL_MOUSE) continue;
+ if (!priv->captured) continue;
+ priv->captured = 0;
+ XSync(priv->display, False); /* Not a backend display */
+ }
+}
diff --git a/hw/dmx/input/dmxconsole.h b/hw/dmx/input/dmxconsole.h
new file mode 100644
index 0000000..cd545d3
--- /dev/null
+++ b/hw/dmx/input/dmxconsole.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for console device support. \see dmxconsole.c \see dmxcommon.c */
+
+#ifndef _DMXCONSOLE_H_
+#define _DMXCONSOLE_H_
+
+extern pointer dmxConsoleCreatePrivate(DeviceIntPtr pDevice);
+extern void dmxConsoleDestroyPrivate(pointer private);
+extern void dmxConsoleInit(DevicePtr pDev);
+extern void dmxConsoleReInit(DevicePtr pDev);
+extern void dmxConsoleMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern void dmxConsoleKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern void dmxConsoleCollectEvents(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern int dmxConsoleFunctions(pointer private, DMXFunctionType function);
+extern void dmxConsoleUpdatePosition(pointer private, int x, int y);
+extern void dmxConsoleKbdSetCtrl(pointer private, KeybdCtrl *ctrl);
+extern void dmxConsoleCapture(DMXInputInfo *dmxInput);
+extern void dmxConsoleUncapture(DMXInputInfo *dmxInput);
+extern void dmxConsoleUpdateInfo(pointer private,
+ DMXUpdateType, WindowPtr pWindow);
+
+#endif
diff --git a/hw/dmx/input/dmxdetach.c b/hw/dmx/input/dmxdetach.c
new file mode 100644
index 0000000..cc22506
--- /dev/null
+++ b/hw/dmx/input/dmxdetach.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2004 Red Hat Inc., Raleigh, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide support and helper functions for input detach and attach. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxinputinit.h"
+#include "dmxextension.h" /* For dmxInputCount */
+
+/** Search for input associated with \a dmxScreen, and detach. */
+void dmxInputDetach(DMXScreenInfo *dmxScreen, Bool reserveId)
+{
+ int i;
+
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (dmxInput->scrnIdx == dmxScreen->index) {
+ dmxLogInput(dmxInput, "Detaching (%sreserved)\n",
+ reserveId ? "" : "not ");
+ dmxInput->detached = True;
+ return;
+ }
+ }
+}
diff --git a/hw/dmx/input/dmxdummy.c b/hw/dmx/input/dmxdummy.c
new file mode 100644
index 0000000..971892b
--- /dev/null
+++ b/hw/dmx/input/dmxdummy.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide mouse and keyboard that are sufficient for starting the X
+ * server, but that don't actually provide any events. This is useful
+ * for testing. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmx.h"
+#include "dmxinputinit.h"
+#include "dmxdummy.h"
+
+/** Return information about the dummy keyboard device specified in \a pDev
+ * into the structure pointed to by \a info. The keyboard is set up to
+ * have 1 valid key code that is \a NoSymbol */
+void dmxDummyKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ static KeySym keyboard_mapping = NoSymbol;
+
+ info->keyboard = 1;
+ info->keyClass = 1;
+ info->keySyms.minKeyCode = 8;
+ info->keySyms.maxKeyCode = 8;
+ info->keySyms.mapWidth = 1;
+ info->keySyms.map = &keyboard_mapping;
+ info->freemap = 0;
+ info->focusClass = 1;
+ info->kbdFeedbackClass = 1;
+ info->force = 1;
+}
+
+/** Return information about the dummy mouse device specified in \a pDev
+ * into the structure pointed to by \a info. They mouse has 3 buttons
+ * and two axes. */
+void dmxDummyMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ info->buttonClass = 1;
+ info->numButtons = 3;
+ info->map[0] = 1;
+ info->map[1] = 2;
+ info->map[2] = 3;
+ info->valuatorClass = 1;
+ info->numRelAxes = 2;
+ info->minval[0] = 0;
+ info->minval[1] = 0;
+ info->maxval[0] = 0;
+ info->maxval[1] = 0;
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ info->ptrFeedbackClass = 1;
+}
diff --git a/hw/dmx/input/dmxdummy.h b/hw/dmx/input/dmxdummy.h
new file mode 100644
index 0000000..e3a85be
--- /dev/null
+++ b/hw/dmx/input/dmxdummy.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to dummy input device support. \see dmxdummy.c */
+
+#ifndef _DMXDUMMY_H_
+#define _DMXDUMMY_H_
+
+extern void dmxDummyMouGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern void dmxDummyKbdGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+
+#endif
diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
new file mode 100644
index 0000000..0360517
--- /dev/null
+++ b/hw/dmx/input/dmxevents.c
@@ -0,0 +1,800 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Provide support and helper functions for enqueing events received by
+ * the low-level input drivers. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_EVENTS_DEBUG 0
+
+#include "dmxinputinit.h"
+#include "dmxevents.h"
+#include "dmxcb.h"
+#include "dmxcommon.h"
+#include "dmxcursor.h"
+#include "dmxmotion.h"
+#include "dmxsigio.h"
+#include "dmxmap.h"
+
+#include <X11/keysym.h>
+#include "opaque.h"
+#include "inputstr.h"
+#include "inpututils.h"
+#include "mipointer.h"
+#include "mi.h"
+#include "exglobals.h"
+
+#include "xkbsrv.h"
+#include "XIstubs.h"
+
+static int dmxGlobalX, dmxGlobalY; /* Global cursor position */
+static int dmxGlobalInvalid; /* Flag indicating dmxCoreMotion
+ * should move the mouse anyway. */
+
+#if DMX_EVENTS_DEBUG
+#define DMXDBG0(f) dmxLog(dmxDebug,f)
+#define DMXDBG1(f,a) dmxLog(dmxDebug,f,a)
+#define DMXDBG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define DMXDBG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define DMXDBG4(f,a,b,c,d) dmxLog(dmxDebug,f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e) dmxLog(dmxDebug,f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g) dmxLog(dmxDebug,f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h) dmxLog(dmxDebug,f,a,b,c,d,e,g,h)
+#else
+#define DMXDBG0(f)
+#define DMXDBG1(f,a)
+#define DMXDBG2(f,a,b)
+#define DMXDBG3(f,a,b,c)
+#define DMXDBG4(f,a,b,c,d)
+#define DMXDBG5(f,a,b,c,d,e)
+#define DMXDBG6(f,a,b,c,d,e,g)
+#define DMXDBG7(f,a,b,c,d,e,g,h)
+#endif
+
+static int dmxApplyFunctions(DMXInputInfo *dmxInput, DMXFunctionType f)
+{
+ int i;
+ int rc = 0;
+
+ for (i = 0; i < dmxInput->numDevs; i+= dmxInput->devs[i]->binding)
+ if (dmxInput->devs[i]->functions)
+ rc += dmxInput->devs[i]->functions(dmxInput->devs[i]->private, f);
+ return rc;
+}
+
+static int dmxCheckFunctionKeys(DMXLocalInputInfoPtr dmxLocal,
+ int type,
+ KeySym keySym)
+{
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
+
+#if 1 /* hack to detect ctrl-alt-q, etc */
+ static int ctrl = 0, alt = 0;
+ /* keep track of ctrl/alt key status */
+ if (type == KeyPress && keySym == 0xffe3) {
+ ctrl = 1;
+ }
+ else if (type == KeyRelease && keySym == 0xffe3) {
+ ctrl = 0;
+ }
+ else if (type == KeyPress && keySym == 0xffe9) {
+ alt = 1;
+ }
+ else if (type == KeyRelease && keySym == 0xffe9) {
+ alt = 0;
+ }
+ if (!ctrl || !alt)
+ return 0;
+#else
+ unsigned short state = 0;
+
+ if (dmxLocal->sendsCore)
+ state = dmxLocalCoreKeyboard->pDevice->key->state;
+ else if (dmxLocal->pDevice->key)
+ state = dmxLocal->pDevice->key->state;
+
+ DMXDBG3("dmxCheckFunctionKeys: keySym=0x%04x %s state=0x%04x\n",
+ keySym, type == KeyPress ? "press" : "release", state);
+
+ if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask))
+ return 0;
+#endif
+
+ switch (keySym) {
+ case XK_g:
+ if (type == KeyPress)
+ dmxApplyFunctions(dmxInput, DMX_FUNCTION_GRAB);
+ return 1;
+ case XK_f:
+ if (type == KeyPress)
+ dmxApplyFunctions(dmxInput, DMX_FUNCTION_FINE);
+ return 1;
+ case XK_q:
+ if (type == KeyPress && dmxLocal->sendsCore)
+ if (dmxApplyFunctions(dmxInput, DMX_FUNCTION_TERMINATE)) {
+ dmxLog(dmxInfo, "User request for termination\n");
+ dispatchException |= DE_TERMINATE;
+ }
+ return 1;
+ }
+
+ return 0;
+}
+
+
+DMXScreenInfo *dmxFindFirstScreen(int x, int y)
+{
+ int i;
+
+ for (i = 0; i < dmxNumScreens; i++) {
+ DMXScreenInfo *dmxScreen = &dmxScreens[i];
+ if (dmxOnScreen(x, y, dmxScreen))
+ return dmxScreen;
+ }
+ return NULL;
+}
+
+
+/**
+ * Enqueue a motion event.
+ */
+static void enqueueMotion(DevicePtr pDev, int x, int y)
+{
+ GETDMXLOCALFROMPDEV;
+ DeviceIntPtr p = dmxLocal->pDevice;
+ int i, nevents, valuators[3];
+ EventListPtr events;
+ int detail = 0; /* XXX should this be mask of pressed buttons? */
+ ValuatorMask mask;
+ valuators[0] = x;
+ valuators[1] = y;
+
+ valuator_mask_set_range(&mask, 0, 2, valuators);
+ GetEventList(&events);
+ nevents = GetPointerEvents(events, p, MotionNotify, detail,
+ POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, (InternalEvent*)(events + i)->event);
+ return;
+}
+
+
+void
+dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
+{
+ DMXScreenInfo *dmxScreen;
+ DMXInputInfo *dmxInput;
+ ScreenPtr pScreen;
+ int localX;
+ int localY;
+ int i;
+
+ if (!dmxGlobalInvalid && dmxGlobalX == x && dmxGlobalY == y)
+ return;
+
+ DMXDBG5("dmxCoreMotion(%d,%d,%d) dmxGlobalX=%d dmxGlobalY=%d\n",
+ x, y, delta, dmxGlobalX, dmxGlobalY);
+
+ dmxGlobalInvalid = 0;
+ dmxGlobalX = x;
+ dmxGlobalY = y;
+
+ if (dmxGlobalX < 0)
+ dmxGlobalX = 0;
+ if (dmxGlobalY < 0)
+ dmxGlobalY = 0;
+ if (dmxGlobalX >= dmxGlobalWidth)
+ dmxGlobalX = dmxGlobalWidth + delta -1;
+ if (dmxGlobalY >= dmxGlobalHeight)
+ dmxGlobalY = dmxGlobalHeight + delta -1;
+
+ if ((dmxScreen = dmxFindFirstScreen(dmxGlobalX, dmxGlobalY))) {
+ localX = dmxGlobalX - dmxScreen->rootXOrigin;
+ localY = dmxGlobalY - dmxScreen->rootYOrigin;
+ if ((pScreen = miPointerGetScreen(inputInfo.pointer))
+ && pScreen->myNum == dmxScreen->index) {
+ /* Screen is old screen */
+ if (block)
+ dmxSigioBlock();
+ if (pDev)
+ enqueueMotion(pDev, localX, localY);
+ if (block)
+ dmxSigioUnblock();
+ } else {
+ /* Screen is new */
+ DMXDBG4(" New screen: old=%d new=%d localX=%d localY=%d\n",
+ pScreen->myNum, dmxScreen->index, localX, localY);
+ if (block)
+ dmxSigioBlock();
+ mieqProcessInputEvents();
+ miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
+ localX, localY);
+ if (pDev)
+ enqueueMotion(pDev, localX, localY);
+ if (block)
+ dmxSigioUnblock();
+ }
+#if 00
+ miPointerGetPosition(inputInfo.pointer, &localX, &localY);
+
+ if ((pScreen = miPointerGetScreen(inputInfo.pointer))) {
+ dmxGlobalX = localX + dmxScreens[pScreen->myNum].rootXOrigin;
+ dmxGlobalY = localY + dmxScreens[pScreen->myNum].rootYOrigin;
+ ErrorF("Global is now %d, %d %d, %d\n", dmxGlobalX, dmxGlobalY,
+ localX, localY);
+ DMXDBG6(" Moved to dmxGlobalX=%d dmxGlobalY=%d"
+ " on screen index=%d/%d localX=%d localY=%d\n",
+ dmxGlobalX, dmxGlobalY,
+ dmxScreen ? dmxScreen->index : -1, pScreen->myNum,
+ localX, localY);
+ }
+#endif
+ }
+ /* Send updates down to all core input
+ * drivers */
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
+ int j;
+ for (j = 0; j < dmxInput->numDevs; j += dmxInput->devs[j]->binding)
+ if (!dmxInput->detached
+ && dmxInput->devs[j]->sendsCore
+ && dmxInput->devs[j]->update_position)
+ dmxInput->devs[j]->update_position(dmxInput->devs[j]->private,
+ dmxGlobalX, dmxGlobalY);
+ }
+ if (!dmxScreen) ProcessInputEvents();
+}
+
+
+
+#define DMX_MAX_AXES 32 /* Max axes reported by this routine */
+static void dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
+ int *v, int firstAxis, int axesCount,
+ DMXMotionType type, DMXBlockType block)
+{
+ DeviceIntPtr pDevice = dmxLocal->pDevice;
+ xEvent xE[2 * DMX_MAX_AXES/6];
+ deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *)xE;
+ deviceValuator *xv = (deviceValuator *)xev+1;
+ int thisX = 0;
+ int thisY = 0;
+ int i;
+ int count;
+ EventListPtr events;
+ int nevents;
+ ValuatorMask mask;
+
+ memset(xE, 0, sizeof(xE));
+
+ if (axesCount > DMX_MAX_AXES) axesCount = DMX_MAX_AXES;
+
+ if ((valuator_get_mode(pDevice,0) == Relative) && axesCount == 2) {
+ /* The dmx console is a relative mode
+ * device that sometimes reports
+ * absolute motion. It only has two
+ * axes. */
+ if (type == DMX_RELATIVE) {
+ thisX = -v[0];
+ thisY = -v[1];
+ dmxLocal->lastX += thisX;
+ dmxLocal->lastY += thisY;
+ if (dmxLocal->update_position)
+ dmxLocal->update_position(dmxLocal->private,
+ dmxLocal->lastX, dmxLocal->lastY);
+ } else { /* Convert to relative */
+ if (dmxLocal->lastX || dmxLocal->lastY) {
+ thisX = v[0] - dmxLocal->lastX;
+ thisY = v[1] - dmxLocal->lastY;
+ }
+ dmxLocal->lastX = v[0];
+ dmxLocal->lastY = v[1];
+ }
+ v[0] = thisX;
+ v[1] = thisY;
+ }
+
+ if (axesCount <= 6) {
+ /* Optimize for the common case when
+ * only 1 or 2 axes change. */
+ xev->time = GetTimeInMillis();
+ xev->type = DeviceMotionNotify;
+ xev->detail = 0;
+ xev->deviceid = pDevice->id | MORE_EVENTS;
+
+ xv->type = DeviceValuator;
+ xv->deviceid = pDevice->id;
+ xv->num_valuators = axesCount;
+ xv->first_valuator = firstAxis;
+ switch (xv->num_valuators) {
+ case 6: xv->valuator5 = v[5];
+ case 5: xv->valuator4 = v[4];
+ case 4: xv->valuator3 = v[3];
+ case 3: xv->valuator2 = v[2];
+ case 2: xv->valuator1 = v[1];
+ case 1: xv->valuator0 = v[0];
+ }
+ count = 2;
+ } else {
+ for (i = 0, count = 0; i < axesCount; i += 6) {
+ xev->time = GetTimeInMillis();
+ xev->type = DeviceMotionNotify;
+ xev->detail = 0;
+ xev->deviceid = pDevice->id | MORE_EVENTS;
+ xev += 2;
+
+ xv->type = DeviceValuator;
+ xv->deviceid = pDevice->id;
+ xv->num_valuators = (i+6 >= axesCount ? axesCount - i : 6);
+ xv->first_valuator = firstAxis + i;
+ switch (xv->num_valuators) {
+ case 6: xv->valuator5 = v[i+5];
+ case 5: xv->valuator4 = v[i+4];
+ case 4: xv->valuator3 = v[i+3];
+ case 3: xv->valuator2 = v[i+2];
+ case 2: xv->valuator1 = v[i+1];
+ case 1: xv->valuator0 = v[i+0];
+ }
+ xv += 2;
+ count += 2;
+ }
+ }
+
+ if (block)
+ dmxSigioBlock();
+ valuator_mask_set_range(&mask, firstAxis, axesCount, v);
+ GetEventList(&events);
+ nevents = GetPointerEvents(events, pDevice, MotionNotify, 0,
+ POINTER_ABSOLUTE, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
+ if (block)
+ dmxSigioUnblock();
+}
+
+static int dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
+ XEvent *e, DMXBlockType block)
+{
+ int type;
+ int event = -1;
+ XDeviceKeyEvent *ke = (XDeviceKeyEvent *)e;
+ XDeviceMotionEvent *me = (XDeviceMotionEvent *)e;
+ DeviceIntPtr pDevice = dmxLocal->pDevice;
+ int valuators[MAX_VALUATORS];
+ EventListPtr events;
+ int nevents, i;
+ ValuatorMask mask;
+
+ if (!e)
+ return -1; /* No extended event passed, cannot handle */
+
+ if ((XID)dmxLocal->deviceId != ke->deviceid) {
+ /* Search for the correct dmxLocal,
+ * since backend and console events are
+ * picked up for the first device on
+ * that X server. */
+ int i;
+ DMXInputInfo *dmxInput = &dmxInputs[dmxLocal->inputIdx];
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ dmxLocal = dmxInput->devs[i];
+ if ((XID)dmxLocal->deviceId == ke->deviceid)
+ break;
+ }
+ }
+
+ if ((XID)dmxLocal->deviceId != ke->deviceid
+ || (type = dmxMapLookup(dmxLocal, e->type)) < 0)
+ return -1; /* No mapping, so this event is unhandled */
+
+ switch (type) {
+ case XI_DeviceValuator: event = DeviceValuator; break;
+ case XI_DeviceKeyPress: event = KeyPress; break;
+ case XI_DeviceKeyRelease: event = KeyRelease; break;
+ case XI_DeviceButtonPress: event = ButtonPress; break;
+ case XI_DeviceButtonRelease: event = ButtonRelease; break;
+ case XI_DeviceMotionNotify: event = MotionNotify; break;
+ case XI_DeviceFocusIn: event = DeviceFocusIn; break;
+ case XI_DeviceFocusOut: event = DeviceFocusOut; break;
+ case XI_ProximityIn: event = ProximityIn; break;
+ case XI_ProximityOut: event = ProximityOut; break;
+ case XI_DeviceStateNotify: event = DeviceStateNotify; break;
+ case XI_DeviceMappingNotify: event = DeviceMappingNotify; break;
+ case XI_ChangeDeviceNotify: event = ChangeDeviceNotify; break;
+ case XI_DeviceKeystateNotify: event = DeviceStateNotify; break;
+ case XI_DeviceButtonstateNotify: event = DeviceStateNotify; break;
+ }
+
+#define EXTRACT_VALUATORS(ke, valuators) \
+ valuators[0] = ke->axis_data[0]; \
+ valuators[1] = ke->axis_data[1]; \
+ valuators[2] = ke->axis_data[2]; \
+ valuators[3] = ke->axis_data[3]; \
+ valuators[4] = ke->axis_data[4]; \
+ valuators[5] = ke->axis_data[5]; \
+
+ switch (type) {
+ case XI_DeviceKeyPress:
+ case XI_DeviceKeyRelease:
+ EXTRACT_VALUATORS(ke, valuators);
+ valuator_mask_set_range(&mask, ke->first_axis, ke->axes_count, valuators);
+ if (block)
+ dmxSigioBlock();
+ GetEventList(&events);
+ nevents = GetKeyboardValuatorEvents(events, pDevice, event,
+ ke->keycode, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
+ if (block)
+ dmxSigioUnblock();
+ break;
+ case XI_DeviceButtonPress:
+ case XI_DeviceButtonRelease:
+ EXTRACT_VALUATORS(ke, valuators);
+ valuator_mask_set_range(&mask, ke->first_axis, ke->axes_count, valuators);
+ if (block)
+ dmxSigioBlock();
+ GetEventList(&events);
+ nevents = GetPointerEvents(events, pDevice, event, ke->keycode,
+ POINTER_ABSOLUTE, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
+ if (block)
+ dmxSigioUnblock();
+ break;
+ case XI_ProximityIn:
+ case XI_ProximityOut:
+ EXTRACT_VALUATORS(ke, valuators);
+ valuator_mask_set_range(&mask, ke->first_axis, ke->axes_count, valuators);
+ if (block)
+ dmxSigioBlock();
+ GetEventList(&events);
+ nevents = GetProximityEvents(events, pDevice, event, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(pDevice, (InternalEvent*)(events + i)->event);
+
+ if (block)
+ dmxSigioUnblock();
+ break;
+
+ break;
+
+ case XI_DeviceMotionNotify:
+ dmxExtMotion(dmxLocal, me->axis_data, me->first_axis, me->axes_count,
+ DMX_ABSOLUTE, block);
+ break;
+ case XI_DeviceFocusIn:
+ case XI_DeviceFocusOut:
+ case XI_DeviceStateNotify:
+ case XI_DeviceMappingNotify:
+ case XI_ChangeDeviceNotify:
+ case XI_DeviceKeystateNotify:
+ case XI_DeviceButtonstateNotify:
+ /* These are ignored, since DMX will
+ * generate its own events of these
+ * types, as necessary.
+
+ * Perhaps ChangeDeviceNotify should
+ * generate an error, because it is
+ * unexpected? */
+ break;
+ case XI_DeviceValuator:
+ default:
+ dmxLog(dmxWarning,
+ "XInput extension event (remote=%d -> zero-based=%d)"
+ " not supported yet\n", e->type, type);
+ return -1;
+ }
+ return 0;
+}
+
+static int dmxGetButtonMapping(DMXLocalInputInfoPtr dmxLocal, int button)
+{
+ ButtonClassPtr b = dmxLocal->pDevice->button;
+
+ if (button > b->numButtons) { /* This shouldn't happen. */
+ dmxLog(dmxWarning, "Button %d pressed, but only %d buttons?!?\n",
+ button, b->numButtons);
+ return button;
+ }
+ return b->map[button];
+}
+
+/** Return DMX's notion of the pointer position in the global coordinate
+ * space. */
+void dmxGetGlobalPosition(int *x, int *y)
+{
+ *x = dmxGlobalX;
+ *y = dmxGlobalY;
+}
+
+/** Invalidate the global position for #dmxCoreMotion. */
+void dmxInvalidateGlobalPosition(void)
+{
+ dmxGlobalInvalid = 1;
+}
+
+/** Enqueue a motion event for \a pDev. The \a v vector has length \a
+ * axesCount, and contains values for each of the axes, starting at \a
+ * firstAxes.
+ *
+ * The \a type of the motion may be \a DMX_RELATIVE, \a DMX_ABSOLUTE, or
+ * \a DMX_ABSOLUTE_CONFINED (in the latter case, the pointer will not be
+ * allowed to move outside the global boundaires).
+ *
+ * If \a block is set to \a DMX_BLOCK, then the SIGIO handler will be
+ * blocked around calls to \a enqueueMotion(). */
+void dmxMotion(DevicePtr pDev, int *v, int firstAxes, int axesCount,
+ DMXMotionType type, DMXBlockType block)
+{
+ GETDMXLOCALFROMPDEV;
+
+ if (!dmxLocal->sendsCore) {
+ dmxExtMotion(dmxLocal, v, firstAxes, axesCount, type, block);
+ return;
+ }
+ if (axesCount == 2) {
+ switch (type) {
+ case DMX_RELATIVE:
+ dmxCoreMotion(pDev, dmxGlobalX - v[0], dmxGlobalY - v[1], 0, block);
+ break;
+ case DMX_ABSOLUTE:
+ dmxCoreMotion(pDev, v[0], v[1], 0, block);
+ break;
+ case DMX_ABSOLUTE_CONFINED:
+ dmxCoreMotion(pDev, v[0], v[1], -1, block);
+ break;
+ }
+ }
+}
+
+static KeySym dmxKeyCodeToKeySym(DMXLocalInputInfoPtr dmxLocal,
+ KeyCode keyCode)
+{
+ KeySym keysym = NoSymbol;
+ int effectiveGroup;
+ XkbSrvInfoPtr xkbi;
+
+ if (!dmxLocal || !dmxLocal->pDevice || !dmxLocal->pDevice->key)
+ goto out;
+
+ xkbi = dmxLocal->pDevice->key->xkbInfo;
+ effectiveGroup = XkbGetEffectiveGroup(xkbi, &xkbi->state, keyCode);
+
+ if (effectiveGroup == -1)
+ goto out;
+
+ keysym = XkbKeySym(xkbi->desc, keyCode, effectiveGroup);
+ DMXDBG2("dmxKeyCodeToKeySym: Translated keyCode=%d to keySym=0x%04x\n",
+ keyCode, keysym);
+
+out:
+ return keysym;
+}
+
+static KeyCode dmxKeySymToKeyCode(DMXLocalInputInfoPtr dmxLocal, KeySym keySym,
+ int tryFirst)
+{
+ /* FIXME: this is quite ineffective, converting to a core map first and
+ * then extracting the info from there. It'd be better to run the actual
+ * xkb map */
+ XkbSrvInfoPtr xkbi = dmxLocal->pDevice->key->xkbInfo;
+ KeySymsPtr pKeySyms = XkbGetCoreMap(dmxLocal->pDevice);
+ int i;
+
+ /* Optimize for similar maps */
+ if (XkbKeycodeInRange(xkbi->desc, tryFirst)
+ && pKeySyms->map[(tryFirst - xkbi->desc->min_key_code)
+ * pKeySyms->mapWidth] == keySym)
+ return tryFirst;
+
+ for (i = pKeySyms->minKeyCode; i <= pKeySyms->maxKeyCode; i++) {
+ if (pKeySyms->map[(i - pKeySyms->minKeyCode)
+ * pKeySyms->mapWidth] == keySym) {
+ DMXDBG3("dmxKeySymToKeyCode: Translated keySym=0x%04x to"
+ " keyCode=%d (reverses to core keySym=0x%04x)\n",
+ keySym, i, dmxKeyCodeToKeySym(dmxLocalCoreKeyboard,i));
+ return i;
+ }
+ }
+ return 0;
+}
+
+static int dmxFixup(DevicePtr pDev, int detail, KeySym keySym)
+{
+ GETDMXLOCALFROMPDEV;
+ int keyCode;
+
+ if (!dmxLocal->pDevice->key) {
+ dmxLog(dmxWarning, "dmxFixup: not a keyboard device (%s)\n",
+ dmxLocal->pDevice->name);
+ return NoSymbol;
+ }
+ if (!keySym)
+ keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
+ if (keySym == NoSymbol)
+ return detail;
+ keyCode = dmxKeySymToKeyCode(dmxLocalCoreKeyboard, keySym, detail);
+
+ return keyCode ? keyCode : detail;
+}
+
+/** Enqueue an event from the \a pDev device with the
+ * specified \a type and \a detail. If the event is a KeyPress or
+ * KeyRelease event, then the \a keySym is also specified.
+ *
+ * FIXME: make the code do what the comment says, or remove this comment.
+ * If \a block is set to \a DMX_BLOCK, then the SIGIO handler will be
+ * blocked around calls to dmxeqEnqueue(). */
+
+void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
+ XEvent *e, DMXBlockType block)
+{
+ GETDMXINPUTFROMPDEV;
+ xEvent xE;
+ DeviceIntPtr p = dmxLocal->pDevice;
+ int i, nevents, valuators[3];
+ EventListPtr events;
+ ValuatorMask mask;
+
+ DMXDBG2("dmxEnqueue: Enqueuing type=%d detail=0x%0x\n", type, detail);
+
+ switch (type) {
+ case KeyPress:
+ case KeyRelease:
+ if (!keySym)
+ keySym = dmxKeyCodeToKeySym(dmxLocal, detail);
+ if (dmxCheckFunctionKeys(dmxLocal, type, keySym))
+ return;
+ if (dmxLocal->sendsCore && dmxLocal != dmxLocalCoreKeyboard)
+ xE.u.u.detail = dmxFixup(pDev, detail, keySym);
+
+ GetEventList(&events);
+ /*ErrorF("KEY %d sym %d\n", detail, (int) keySym);*/
+ nevents = GetKeyboardEvents(events, p, type, detail);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, (InternalEvent*)(events + i)->event);
+ return;
+
+ case ButtonPress:
+ case ButtonRelease:
+ detail = dmxGetButtonMapping(dmxLocal, detail);
+ valuator_mask_zero(&mask);
+ GetEventList(&events);
+ nevents = GetPointerEvents(events, p, type, detail,
+ POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, (InternalEvent*)(events + i)->event);
+ return;
+
+ case MotionNotify:
+ GetEventList(&events);
+ valuators[0] = e->xmotion.x;
+ valuators[1] = e->xmotion.y;
+ valuators[2] = e->xmotion.state; /* FIXME: WTF?? */
+ valuator_mask_set_range(&mask, 0, 3, valuators);
+ nevents = GetPointerEvents(events, p, type, detail,
+ POINTER_ABSOLUTE | POINTER_SCREEN, &mask);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(p, (InternalEvent*)(events + i)->event);
+ return;
+
+ case EnterNotify:
+ case LeaveNotify:
+ case KeymapNotify:
+ case MappingNotify: /* This is sent because we change the
+ * modifier map on the backend/console
+ * input device so that we have complete
+ * control of the input device LEDs. */
+ return;
+ default:
+ if (type == ProximityIn || type == ProximityOut) {
+ if (dmxLocal->sendsCore)
+ return; /* Not a core event */
+ break;
+ }
+ if (type >= LASTEvent) {
+ if (dmxTranslateAndEnqueueExtEvent(dmxLocal, e, block))
+ dmxLogInput(dmxInput, "Unhandled extension event: %d\n", type);
+ } else {
+ dmxLogInput(dmxInput, "Unhandled event: %d (%s)\n",
+ type, dmxEventName(type));
+ }
+ return;
+ }
+
+}
+
+/** A pointer to this routine is passed to low-level input drivers so
+ * that all special keychecking is unified to this file. This function
+ * returns 0 if no special keys have been pressed. If the user has
+ * requested termination of the DMX server, -1 is returned. If the user
+ * has requested a switch to a VT, then the (1-based) number of that VT
+ * is returned. */
+int dmxCheckSpecialKeys(DevicePtr pDev, KeySym keySym)
+{
+ GETDMXINPUTFROMPDEV;
+ int vt = 0;
+ unsigned short state = 0;
+
+ if (dmxLocal->sendsCore)
+ state = XkbStateFieldFromRec(&dmxLocalCoreKeyboard->pDevice->key->xkbInfo->state);
+ else if (dmxLocal->pDevice->key)
+ state = XkbStateFieldFromRec(&dmxLocal->pDevice->key->xkbInfo->state);
+
+ if (!dmxLocal->sendsCore) return 0; /* Only for core devices */
+
+ DMXDBG2("dmxCheckSpecialKeys: keySym=0x%04x state=0x%04x\n", keySym,state);
+
+ if ((state & (ControlMask|Mod1Mask)) != (ControlMask|Mod1Mask)) return 0;
+
+ switch (keySym) {
+ case XK_F1:
+ case XK_F2:
+ case XK_F3:
+ case XK_F4:
+ case XK_F5:
+ case XK_F6:
+ case XK_F7:
+ case XK_F8:
+ case XK_F9:
+ case XK_F10:
+ vt = keySym - XK_F1 + 1;
+ break;
+
+ case XK_F11:
+ case XK_F12:
+ vt = keySym - XK_F11 + 11;
+ break;
+
+ case XK_q: /* To avoid confusion */
+ case XK_BackSpace:
+ case XK_Delete:
+ case XK_KP_Delete:
+ dmxLog(dmxInfo, "User request for termination\n");
+ dispatchException |= DE_TERMINATE;
+ return -1; /* Terminate */
+ }
+
+ if (vt) {
+ dmxLog(dmxInfo, "Request to switch to VT %d\n", vt);
+ dmxInput->vt_switch_pending = vt;
+ return vt;
+ }
+
+ return 0; /* Do nothing */
+}
diff --git a/hw/dmx/input/dmxevents.h b/hw/dmx/input/dmxevents.h
new file mode 100644
index 0000000..fe8712e
--- /dev/null
+++ b/hw/dmx/input/dmxevents.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to event processing functions. \see dmxevents.h */
+
+#ifndef _DMXEVENTS_H_
+#define _DMXEVENTS_H_
+
+extern void dmxMotion(DevicePtr pDev, int *v, int firstAxis, int axesCount,
+ DMXMotionType type, DMXBlockType block);
+extern void dmxEnqueue(DevicePtr pDev, int type, int detail, KeySym keySym,
+ XEvent *e, DMXBlockType block);
+extern int dmxCheckSpecialKeys(DevicePtr pDev, KeySym keySym);
+extern void dmxInvalidateGlobalPosition(void);
+#endif
diff --git a/hw/dmx/input/dmxinputinit.c b/hw/dmx/input/dmxinputinit.c
new file mode 100644
index 0000000..5cbd620
--- /dev/null
+++ b/hw/dmx/input/dmxinputinit.c
@@ -0,0 +1,1274 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides generic input support. Functions here set up
+ * input and lead to the calling of low-level device drivers for
+ * input. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#define DMX_WINDOW_DEBUG 0
+
+#include "dmxinputinit.h"
+#include "dmxextension.h" /* For dmxInputCount */
+
+#include "dmxdummy.h"
+#include "dmxbackend.h"
+#include "dmxconsole.h"
+#include "dmxcommon.h"
+#include "dmxevents.h"
+#include "dmxmotion.h"
+#include "dmxprop.h"
+#include "config/dmxconfig.h"
+#include "dmxcursor.h"
+
+#include "lnx-keyboard.h"
+#include "lnx-ms.h"
+#include "lnx-ps2.h"
+#include "usb-keyboard.h"
+#include "usb-mouse.h"
+#include "usb-other.h"
+#include "usb-common.h"
+
+#include "dmxsigio.h"
+#include "dmxarg.h"
+
+#include "inputstr.h"
+#include "input.h"
+#include "mipointer.h"
+#include "windowstr.h"
+#include "mi.h"
+#include "xkbsrv.h"
+
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include "exevents.h"
+#include "extinit.h"
+
+DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
+
+static DMXLocalInputInfoRec DMXDummyMou = {
+ "dummy-mou", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_LOCAL, 1,
+ NULL, NULL, NULL, NULL, NULL, dmxDummyMouGetInfo
+};
+
+static DMXLocalInputInfoRec DMXDummyKbd = {
+ "dummy-kbd", DMX_LOCAL_KEYBOARD, DMX_LOCAL_TYPE_LOCAL, 1,
+ NULL, NULL, NULL, NULL, NULL, dmxDummyKbdGetInfo
+};
+
+static DMXLocalInputInfoRec DMXBackendMou = {
+ "backend-mou", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_BACKEND, 2,
+ dmxBackendCreatePrivate, dmxBackendDestroyPrivate,
+ dmxBackendInit, NULL, dmxBackendLateReInit, dmxBackendMouGetInfo,
+ dmxCommonMouOn, dmxCommonMouOff, dmxBackendUpdatePosition,
+ NULL, NULL, NULL,
+ dmxBackendCollectEvents, dmxBackendProcessInput, dmxBackendFunctions, NULL,
+ dmxCommonMouCtrl
+};
+
+static DMXLocalInputInfoRec DMXBackendKbd = {
+ "backend-kbd", DMX_LOCAL_KEYBOARD, DMX_LOCAL_TYPE_BACKEND,
+ 1, /* With backend-mou or console-mou */
+ dmxCommonCopyPrivate, NULL,
+ dmxBackendInit, NULL, NULL, dmxBackendKbdGetInfo,
+ dmxCommonKbdOn, dmxCommonKbdOff, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, dmxCommonKbdCtrl, dmxCommonKbdBell
+};
+
+static DMXLocalInputInfoRec DMXConsoleMou = {
+ "console-mou", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_CONSOLE, 2,
+ dmxConsoleCreatePrivate, dmxConsoleDestroyPrivate,
+ dmxConsoleInit, dmxConsoleReInit, NULL, dmxConsoleMouGetInfo,
+ dmxCommonMouOn, dmxCommonMouOff, dmxConsoleUpdatePosition,
+ NULL, NULL, NULL,
+ dmxConsoleCollectEvents, NULL, dmxConsoleFunctions, dmxConsoleUpdateInfo,
+ dmxCommonMouCtrl
+};
+
+static DMXLocalInputInfoRec DMXConsoleKbd = {
+ "console-kbd", DMX_LOCAL_KEYBOARD, DMX_LOCAL_TYPE_CONSOLE,
+ 1, /* With backend-mou or console-mou */
+ dmxCommonCopyPrivate, NULL,
+ dmxConsoleInit, dmxConsoleReInit, NULL, dmxConsoleKbdGetInfo,
+ dmxCommonKbdOn, dmxCommonKbdOff, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, dmxCommonKbdCtrl, dmxCommonKbdBell
+};
+
+static DMXLocalInputInfoRec DMXLocalDevices[] = {
+ /* Dummy drivers that can compile on any OS */
+#ifdef __linux__
+ /* Linux-specific drivers */
+ {
+ "kbd", DMX_LOCAL_KEYBOARD, DMX_LOCAL_TYPE_LOCAL, 1,
+ kbdLinuxCreatePrivate, kbdLinuxDestroyPrivate,
+ kbdLinuxInit, NULL, NULL, kbdLinuxGetInfo,
+ kbdLinuxOn, kbdLinuxOff, NULL,
+ kbdLinuxVTPreSwitch, kbdLinuxVTPostSwitch, kbdLinuxVTSwitch,
+ kbdLinuxRead, NULL, NULL, NULL,
+ NULL, kbdLinuxCtrl, kbdLinuxBell
+ },
+ {
+ "ms", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_LOCAL, 1,
+ msLinuxCreatePrivate, msLinuxDestroyPrivate,
+ msLinuxInit, NULL, NULL, msLinuxGetInfo,
+ msLinuxOn, msLinuxOff, NULL,
+ msLinuxVTPreSwitch, msLinuxVTPostSwitch, NULL,
+ msLinuxRead
+ },
+ {
+ "ps2", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_LOCAL, 1,
+ ps2LinuxCreatePrivate, ps2LinuxDestroyPrivate,
+ ps2LinuxInit, NULL, NULL, ps2LinuxGetInfo,
+ ps2LinuxOn, ps2LinuxOff, NULL,
+ ps2LinuxVTPreSwitch, ps2LinuxVTPostSwitch, NULL,
+ ps2LinuxRead
+ },
+#endif
+#ifdef __linux__
+ /* USB drivers, currently only for
+ Linux, but relatively easy to port to
+ other OSs */
+ {
+ "usb-kbd", DMX_LOCAL_KEYBOARD, DMX_LOCAL_TYPE_LOCAL, 1,
+ usbCreatePrivate, usbDestroyPrivate,
+ kbdUSBInit, NULL, NULL, kbdUSBGetInfo,
+ kbdUSBOn, usbOff, NULL,
+ NULL, NULL, NULL,
+ kbdUSBRead, NULL, NULL, NULL,
+ NULL, kbdUSBCtrl
+ },
+ {
+ "usb-mou", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_LOCAL, 1,
+ usbCreatePrivate, usbDestroyPrivate,
+ mouUSBInit, NULL, NULL, mouUSBGetInfo,
+ mouUSBOn, usbOff, NULL,
+ NULL, NULL, NULL,
+ mouUSBRead
+ },
+ {
+ "usb-oth", DMX_LOCAL_OTHER, DMX_LOCAL_TYPE_LOCAL, 1,
+ usbCreatePrivate, usbDestroyPrivate,
+ othUSBInit, NULL, NULL, othUSBGetInfo,
+ othUSBOn, usbOff, NULL,
+ NULL, NULL, NULL,
+ othUSBRead
+ },
+#endif
+ {
+ "dummy-mou", DMX_LOCAL_MOUSE, DMX_LOCAL_TYPE_LOCAL, 1,
+ NULL, NULL, NULL, NULL, NULL, dmxDummyMouGetInfo
+ },
+ {
+ "dummy-kbd", DMX_LOCAL_KEYBOARD, DMX_LOCAL_TYPE_LOCAL, 1,
+ NULL, NULL, NULL, NULL, NULL, dmxDummyKbdGetInfo
+ },
+ { NULL } /* Must be last */
+};
+
+
+#if 11 /*BP*/
+void
+DDXRingBell(int volume, int pitch, int duration)
+{
+ /* NO-OP */
+}
+
+/* taken from kdrive/src/kinput.c: */
+static void
+dmxKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl)
+{
+#if 0
+ KdKeyboardInfo *ki;
+
+ for (ki = kdKeyboards; ki; ki = ki->next) {
+ if (ki->dixdev && ki->dixdev->id == pDevice->id)
+ break;
+ }
+
+ if (!ki || !ki->dixdev || ki->dixdev->id != pDevice->id || !ki->driver)
+ return;
+
+ KdSetLeds(ki, ctrl->leds);
+ ki->bellPitch = ctrl->bell_pitch;
+ ki->bellDuration = ctrl->bell_duration;
+#endif
+}
+
+/* taken from kdrive/src/kinput.c: */
+static void
+dmxBell(int volume, DeviceIntPtr pDev, pointer arg, int something)
+{
+#if 0
+ KeybdCtrl *ctrl = arg;
+ KdKeyboardInfo *ki = NULL;
+
+ for (ki = kdKeyboards; ki; ki = ki->next) {
+ if (ki->dixdev && ki->dixdev->id == pDev->id)
+ break;
+ }
+
+ if (!ki || !ki->dixdev || ki->dixdev->id != pDev->id || !ki->driver)
+ return;
+
+ KdRingBell(ki, volume, ctrl->bell_pitch, ctrl->bell_duration);
+#endif
+}
+
+#endif /*BP*/
+
+static void _dmxChangePointerControl(DMXLocalInputInfoPtr dmxLocal,
+ PtrCtrl *ctrl)
+{
+ if (!dmxLocal) return;
+ dmxLocal->mctrl = *ctrl;
+ if (dmxLocal->mCtrl) dmxLocal->mCtrl(&dmxLocal->pDevice->public, ctrl);
+}
+
+/** Change the pointer control information for the \a pDevice. If the
+ * device sends core events, then also change the control information
+ * for all of the pointer devices that send core events. */
+void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl)
+{
+ GETDMXLOCALFROMPDEVICE;
+ int i, j;
+
+ if (dmxLocal->sendsCore) { /* Do for all core devices */
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (dmxInput->detached) continue;
+ for (j = 0; j < dmxInput->numDevs; j++)
+ if (dmxInput->devs[j]->sendsCore)
+ _dmxChangePointerControl(dmxInput->devs[j], ctrl);
+ }
+ } else { /* Do for this device only */
+ _dmxChangePointerControl(dmxLocal, ctrl);
+ }
+}
+
+static void _dmxKeyboardKbdCtrlProc(DMXLocalInputInfoPtr dmxLocal,
+ KeybdCtrl *ctrl)
+{
+ dmxLocal->kctrl = *ctrl;
+ if (dmxLocal->kCtrl) {
+ dmxLocal->kCtrl(&dmxLocal->pDevice->public, ctrl);
+ if (dmxLocal->pDevice->kbdfeed) {
+ XkbEventCauseRec cause;
+ XkbSetCauseUnknown(&cause);
+ /* Generate XKB events, as necessary */
+ XkbUpdateIndicators(dmxLocal->pDevice, XkbAllIndicatorsMask, False,
+ NULL, &cause);
+ }
+ }
+}
+
+
+/** Change the keyboard control information for the \a pDevice. If the
+ * device sends core events, then also change the control information
+ * for all of the keyboard devices that send core events. */
+void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl)
+{
+ GETDMXLOCALFROMPDEVICE;
+ int i, j;
+
+ if (dmxLocal->sendsCore) { /* Do for all core devices */
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (dmxInput->detached) continue;
+ for (j = 0; j < dmxInput->numDevs; j++)
+ if (dmxInput->devs[j]->sendsCore)
+ _dmxKeyboardKbdCtrlProc(dmxInput->devs[j], ctrl);
+ }
+ } else { /* Do for this device only */
+ _dmxKeyboardKbdCtrlProc(dmxLocal, ctrl);
+ }
+}
+
+static void _dmxKeyboardBellProc(DMXLocalInputInfoPtr dmxLocal, int percent)
+{
+ if (dmxLocal->kBell) dmxLocal->kBell(&dmxLocal->pDevice->public,
+ percent,
+ dmxLocal->kctrl.bell,
+ dmxLocal->kctrl.bell_pitch,
+ dmxLocal->kctrl.bell_duration);
+}
+
+/** Sound the bell on the device. If the device send core events, then
+ * sound the bell on all of the devices that send core events. */
+void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
+ pointer ctrl, int unknown)
+{
+ GETDMXLOCALFROMPDEVICE;
+ int i, j;
+
+ if (dmxLocal->sendsCore) { /* Do for all core devices */
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (dmxInput->detached) continue;
+ for (j = 0; j < dmxInput->numDevs; j++)
+ if (dmxInput->devs[j]->sendsCore)
+ _dmxKeyboardBellProc(dmxInput->devs[j], percent);
+ }
+ } else { /* Do for this device only */
+ _dmxKeyboardBellProc(dmxLocal, percent);
+ }
+}
+
+static void dmxKeyboardFreeNames(XkbComponentNamesPtr names)
+{
+ if (names->keycodes) XFree(names->keycodes);
+ if (names->types) XFree(names->types);
+ if (names->compat) XFree(names->compat);
+ if (names->symbols) XFree(names->symbols);
+ if (names->geometry) XFree(names->geometry);
+}
+
+
+static int dmxKeyboardOn(DeviceIntPtr pDevice, DMXLocalInitInfo *info)
+{
+ GETDMXINPUTFROMPDEVICE;
+ XkbRMLVOSet rmlvo;
+
+ rmlvo.rules = dmxConfigGetXkbRules();
+ rmlvo.model = dmxConfigGetXkbModel();
+ rmlvo.layout = dmxConfigGetXkbLayout();
+ rmlvo.variant = dmxConfigGetXkbVariant();
+ rmlvo.options = dmxConfigGetXkbOptions();
+
+ XkbSetRulesDflts(&rmlvo);
+ if (!info->force && (dmxInput->keycodes
+ || dmxInput->symbols
+ || dmxInput->geometry)) {
+ if (info->freenames) dmxKeyboardFreeNames(&info->names);
+ info->freenames = 0;
+ info->names.keycodes = dmxInput->keycodes;
+ info->names.types = NULL;
+ info->names.compat = NULL;
+ info->names.symbols = dmxInput->symbols;
+ info->names.geometry = dmxInput->geometry;
+
+ dmxLogInput(dmxInput, "XKEYBOARD: From command line: %s",
+ info->names.keycodes);
+ if (info->names.symbols && *info->names.symbols)
+ dmxLogInputCont(dmxInput, " %s", info->names.symbols);
+ if (info->names.geometry && *info->names.geometry)
+ dmxLogInputCont(dmxInput, " %s", info->names.geometry);
+ dmxLogInputCont(dmxInput, "\n");
+ } else if (info->names.keycodes) {
+ dmxLogInput(dmxInput, "XKEYBOARD: From device: %s",
+ info->names.keycodes);
+ if (info->names.symbols && *info->names.symbols)
+ dmxLogInputCont(dmxInput, " %s", info->names.symbols);
+ if (info->names.geometry && *info->names.geometry)
+ dmxLogInputCont(dmxInput, " %s", info->names.geometry);
+ dmxLogInputCont(dmxInput, "\n");
+ } else {
+ dmxLogInput(dmxInput, "XKEYBOARD: Defaults: %s %s %s %s %s\n",
+ dmxConfigGetXkbRules(),
+ dmxConfigGetXkbLayout(),
+ dmxConfigGetXkbModel(),
+ dmxConfigGetXkbVariant()
+ ? dmxConfigGetXkbVariant() : "",
+ dmxConfigGetXkbOptions()
+ ? dmxConfigGetXkbOptions() : "");
+ }
+ InitKeyboardDeviceStruct(pDevice, &rmlvo,
+ dmxKeyboardBellProc,
+ dmxKeyboardKbdCtrlProc);
+
+ if (info->freenames) dmxKeyboardFreeNames(&info->names);
+
+ return Success;
+}
+
+
+static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
+{
+ GETDMXINPUTFROMPDEVICE;
+ int fd;
+ DMXLocalInitInfo info;
+ int i;
+ Atom btn_labels[MAX_BUTTONS] = {0}; /* FIXME */
+ Atom axis_labels[MAX_VALUATORS] = {0}; /* FIXME */
+
+ if (dmxInput->detached) return Success;
+
+ memset(&info, 0, sizeof(info));
+ switch (what) {
+ case DEVICE_INIT:
+ if (dmxLocal->init)
+ dmxLocal->init(pDev);
+ if (dmxLocal->get_info)
+ dmxLocal->get_info(pDev, &info);
+ if (info.keyboard) { /* XKEYBOARD makes this a special case */
+ dmxKeyboardOn(pDevice, &info);
+ break;
+ }
+ if (info.keyClass) {
+ XkbRMLVOSet rmlvo;
+
+ rmlvo.rules = dmxConfigGetXkbRules();
+ rmlvo.model = dmxConfigGetXkbModel();
+ rmlvo.layout = dmxConfigGetXkbLayout();
+ rmlvo.variant = dmxConfigGetXkbVariant();
+ rmlvo.options = dmxConfigGetXkbOptions();
+
+ InitKeyboardDeviceStruct(pDevice,
+ &rmlvo,
+ dmxBell, dmxKbdCtrl);
+ }
+ if (info.buttonClass) {
+ InitButtonClassDeviceStruct(pDevice, info.numButtons,
+ btn_labels, info.map);
+ }
+ if (info.valuatorClass) {
+ if (info.numRelAxes && dmxLocal->sendsCore) {
+ InitValuatorClassDeviceStruct(pDevice, info.numRelAxes,
+ axis_labels,
+ GetMaximumEventsNum(),
+ Relative);
+ for (i = 0; i < info.numRelAxes; i++)
+ InitValuatorAxisStruct(pDevice, i, axis_labels[i],
+ info.minval[i], info.maxval[i],
+ info.res[i],
+ info.minres[i], info.maxres[i],
+ Relative);
+ } else if (info.numRelAxes) {
+ InitValuatorClassDeviceStruct(pDevice, info.numRelAxes,
+ axis_labels,
+ dmxPointerGetMotionBufferSize(),
+ Relative);
+ for (i = 0; i < info.numRelAxes; i++)
+ InitValuatorAxisStruct(pDevice, i, axis_labels[i],
+ info.minval[i],
+ info.maxval[i], info.res[i],
+ info.minres[i], info.maxres[i],
+ Relative);
+ } else if (info.numAbsAxes) {
+ InitValuatorClassDeviceStruct(pDevice, info.numAbsAxes,
+ axis_labels,
+ dmxPointerGetMotionBufferSize(),
+ Absolute);
+ for (i = 0; i < info.numAbsAxes; i++)
+ InitValuatorAxisStruct(pDevice, i,
+ axis_labels[i],
+ info.minval[i], info.maxval[i],
+ info.res[i], info.minres[i],
+ info.maxres[i], Absolute);
+ }
+ }
+ if (info.focusClass) InitFocusClassDeviceStruct(pDevice);
+ if (info.proximityClass) InitProximityClassDeviceStruct(pDevice);
+ if (info.ptrFeedbackClass)
+ InitPtrFeedbackClassDeviceStruct(pDevice, dmxChangePointerControl);
+ if (info.intFeedbackClass || info.strFeedbackClass)
+ dmxLog(dmxWarning,
+ "Integer and string feedback not supported for %s\n",
+ pDevice->name);
+ if (!info.keyboard && (info.ledFeedbackClass || info.belFeedbackClass))
+ dmxLog(dmxWarning,
+ "Led and bel feedback not supported for non-keyboard %s\n",
+ pDevice->name);
+ break;
+ case DEVICE_ON:
+ if (!pDev->on) {
+ if (dmxLocal->on && (fd = dmxLocal->on(pDev)) >= 0)
+ dmxSigioRegister(dmxInput, fd);
+ pDev->on = TRUE;
+ }
+ break;
+ case DEVICE_OFF:
+ case DEVICE_CLOSE:
+ /* This can get called twice consecutively: once for a
+ * detached screen (DEVICE_OFF), and then again at server
+ * generation time (DEVICE_CLOSE). */
+ if (pDev->on) {
+ dmxSigioUnregister(dmxInput);
+ if (dmxLocal->off) dmxLocal->off(pDev);
+ pDev->on = FALSE;
+ }
+ break;
+ }
+ if (info.keySyms.map && info.freemap) {
+ XFree(info.keySyms.map);
+ info.keySyms.map = NULL;
+ }
+ if (info.xkb) XkbFreeKeyboard(info.xkb, 0, True);
+ return Success;
+}
+
+static void dmxProcessInputEvents(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ mieqProcessInputEvents();
+#if 00 /*BP*/
+ miPointerUpdate();
+#endif
+ if (dmxInput->detached)
+ return;
+ for (i = 0; i < dmxInput->numDevs; i += dmxInput->devs[i]->binding)
+ if (dmxInput->devs[i]->process_input) {
+#if 11 /*BP*/
+ miPointerUpdateSprite(dmxInput->devs[i]->pDevice);
+#endif
+ dmxInput->devs[i]->process_input(dmxInput->devs[i]->private);
+ }
+
+#if 11 /*BP*/
+ mieqProcessInputEvents();
+#endif
+}
+
+static void dmxUpdateWindowInformation(DMXInputInfo *dmxInput,
+ DMXUpdateType type,
+ WindowPtr pWindow)
+{
+ int i;
+
+#ifdef PANORAMIX
+ if (!noPanoramiXExtension && pWindow && pWindow->parent != screenInfo.screens[0]->root)
+ return;
+#endif
+#if DMX_WINDOW_DEBUG
+ {
+ const char *name = "Unknown";
+ switch (type) {
+ case DMX_UPDATE_REALIZE: name = "Realize"; break;
+ case DMX_UPDATE_UNREALIZE: name = "Unrealize"; break;
+ case DMX_UPDATE_RESTACK: name = "Restack"; break;
+ case DMX_UPDATE_COPY: name = "Copy"; break;
+ case DMX_UPDATE_RESIZE: name = "Resize"; break;
+ case DMX_UPDATE_REPARENT: name = "Repaint"; break;
+ }
+ dmxLog(dmxDebug, "Window %p changed: %s\n", pWindow, name);
+ }
+#endif
+
+ if (dmxInput->detached)
+ return;
+ for (i = 0; i < dmxInput->numDevs; i += dmxInput->devs[i]->binding)
+ if (dmxInput->devs[i]->update_info)
+ dmxInput->devs[i]->update_info(dmxInput->devs[i]->private,
+ type, pWindow);
+}
+
+static void dmxCollectAll(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ if (dmxInput->detached)
+ return;
+ for (i = 0; i < dmxInput->numDevs; i += dmxInput->devs[i]->binding)
+ if (dmxInput->devs[i]->collect_events)
+ dmxInput->devs[i]->collect_events(&dmxInput->devs[i]->pDevice->public,
+ dmxMotion,
+ dmxEnqueue,
+ dmxCheckSpecialKeys, DMX_BLOCK);
+}
+
+static void dmxBlockHandler(pointer blockData, OSTimePtr pTimeout,
+ pointer pReadMask)
+{
+ DMXInputInfo *dmxInput = &dmxInputs[(uintptr_t)blockData];
+ static unsigned long generation = 0;
+
+ if (generation != serverGeneration) {
+ generation = serverGeneration;
+ dmxCollectAll(dmxInput);
+ }
+}
+
+static void dmxSwitchReturn(pointer p)
+{
+ DMXInputInfo *dmxInput = p;
+ int i;
+
+ dmxLog(dmxInfo, "Returning from VT %d\n", dmxInput->vt_switched);
+
+ if (!dmxInput->vt_switched)
+ dmxLog(dmxFatal, "dmxSwitchReturn called, but not switched\n");
+ dmxSigioEnableInput();
+ for (i = 0; i < dmxInput->numDevs; i++)
+ if (dmxInput->devs[i]->vt_post_switch)
+ dmxInput->devs[i]->vt_post_switch(dmxInput->devs[i]->private);
+ dmxInput->vt_switched = 0;
+}
+
+static void dmxWakeupHandler(pointer blockData, int result, pointer pReadMask)
+{
+ DMXInputInfo *dmxInput = &dmxInputs[(uintptr_t)blockData];
+ int i;
+
+ if (dmxInput->vt_switch_pending) {
+ dmxLog(dmxInfo, "Switching to VT %d\n", dmxInput->vt_switch_pending);
+ for (i = 0; i < dmxInput->numDevs; i++)
+ if (dmxInput->devs[i]->vt_pre_switch)
+ dmxInput->devs[i]->vt_pre_switch(dmxInput->devs[i]->private);
+ dmxInput->vt_switched = dmxInput->vt_switch_pending;
+ dmxInput->vt_switch_pending = 0;
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ if (dmxInput->devs[i]->vt_switch) {
+ dmxSigioDisableInput();
+ if (!dmxInput->devs[i]->vt_switch(dmxInput->devs[i]->private,
+ dmxInput->vt_switched,
+ dmxSwitchReturn,
+ dmxInput))
+ dmxSwitchReturn(dmxInput);
+ break; /* Only call one vt_switch routine */
+ }
+ }
+ }
+ dmxCollectAll(dmxInput);
+}
+
+static char *dmxMakeUniqueDeviceName(DMXLocalInputInfoPtr dmxLocal)
+{
+ static int k = 0;
+ static int m = 0;
+ static int o = 0;
+ static unsigned long dmxGeneration = 0;
+#define LEN 32
+ char * buf = malloc(LEN);
+
+ if (dmxGeneration != serverGeneration) {
+ k = m = o = 0;
+ dmxGeneration = serverGeneration;
+ }
+
+ switch (dmxLocal->type) {
+ case DMX_LOCAL_KEYBOARD: XmuSnprintf(buf, LEN, "Keyboard%d", k++); break;
+ case DMX_LOCAL_MOUSE: XmuSnprintf(buf, LEN, "Mouse%d", m++); break;
+ default: XmuSnprintf(buf, LEN, "Other%d", o++); break;
+ }
+
+ return buf;
+}
+
+static DeviceIntPtr dmxAddDevice(DMXLocalInputInfoPtr dmxLocal)
+{
+ DeviceIntPtr pDevice;
+ Atom atom;
+ const char *name = NULL;
+ char *devname;
+ DMXInputInfo *dmxInput;
+
+ if (!dmxLocal)
+ return NULL;
+ dmxInput = &dmxInputs[dmxLocal->inputIdx];
+
+ if (dmxLocal->sendsCore) {
+ if (dmxLocal->type == DMX_LOCAL_KEYBOARD && !dmxLocalCoreKeyboard) {
+ dmxLocal->isCore = 1;
+ dmxLocalCoreKeyboard = dmxLocal;
+ name = "keyboard";
+ }
+ if (dmxLocal->type == DMX_LOCAL_MOUSE && !dmxLocalCorePointer) {
+ dmxLocal->isCore = 1;
+ dmxLocalCorePointer = dmxLocal;
+ name = "pointer";
+ }
+ }
+
+ if (!name) {
+ name = "extension";
+ }
+
+ if (!name)
+ dmxLog(dmxFatal, "Cannot add device %s\n", dmxLocal->name);
+
+ pDevice = AddInputDevice(serverClient, dmxDeviceOnOff, TRUE);
+ if (!pDevice) {
+ dmxLog(dmxError, "Too many devices -- cannot add device %s\n",
+ dmxLocal->name);
+ return NULL;
+ }
+ pDevice->public.devicePrivate = dmxLocal;
+ dmxLocal->pDevice = pDevice;
+
+ devname = dmxMakeUniqueDeviceName(dmxLocal);
+ atom = MakeAtom((char *)devname, strlen(devname), TRUE);
+ pDevice->type = atom;
+ pDevice->name = devname;
+
+ if (dmxLocal->isCore && dmxLocal->type == DMX_LOCAL_MOUSE) {
+#if 00 /*BP*/
+ miRegisterPointerDevice(screenInfo.screens[0], pDevice);
+#else
+ /* Nothing? dmxDeviceOnOff() should get called to init, right? */
+#endif
+ }
+
+ if (dmxLocal->create_private)
+ dmxLocal->private = dmxLocal->create_private(pDevice);
+
+ dmxLogInput(dmxInput, "Added %s as %s device called %s%s\n",
+ dmxLocal->name, name, devname,
+ dmxLocal->isCore
+ ? " [core]"
+ : (dmxLocal->sendsCore
+ ? " [sends core events]"
+ : ""));
+
+ return pDevice;
+}
+
+static DMXLocalInputInfoPtr dmxLookupLocal(const char *name)
+{
+ DMXLocalInputInfoPtr pt;
+
+ for (pt = &DMXLocalDevices[0]; pt->name; ++pt)
+ if (!strcmp(pt->name, name)) return pt; /* search for device name */
+ return NULL;
+}
+
+/** Copy the local input information from \a s into a new \a devs slot
+ * in \a dmxInput. */
+DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
+ DMXLocalInputInfoPtr s)
+{
+ DMXLocalInputInfoPtr dmxLocal = malloc(sizeof(*dmxLocal));
+
+ if (!dmxLocal)
+ dmxLog(dmxFatal, "DMXLocalInputInfoPtr: out of memory\n");
+
+ memcpy(dmxLocal, s, sizeof(*dmxLocal));
+ dmxLocal->inputIdx = dmxInput->inputIdx;
+ dmxLocal->sendsCore = dmxInput->core;
+ dmxLocal->savedSendsCore = dmxInput->core;
+ dmxLocal->deviceId = -1;
+
+ ++dmxInput->numDevs;
+ dmxInput->devs = realloc(dmxInput->devs,
+ dmxInput->numDevs * sizeof(*dmxInput->devs));
+ dmxInput->devs[dmxInput->numDevs-1] = dmxLocal;
+
+ return dmxLocal;
+}
+
+static void dmxPopulateLocal(DMXInputInfo *dmxInput, dmxArg a)
+{
+ int i;
+ int help = 0;
+ DMXLocalInputInfoRec *pt;
+
+ for (i = 1; i < dmxArgC(a); i++) {
+ const char *name = dmxArgV(a, i);
+ if ((pt = dmxLookupLocal(name))) {
+ dmxInputCopyLocal(dmxInput, pt);
+ } else {
+ if (strlen(name))
+ dmxLog(dmxWarning,
+ "Could not find a driver called %s\n", name);
+ ++help;
+ }
+ }
+ if (help) {
+ dmxLog(dmxInfo, "Available local device drivers:\n");
+ for (pt = &DMXLocalDevices[0]; pt->name; ++pt) {
+ const char *type;
+ switch (pt->type) {
+ case DMX_LOCAL_KEYBOARD: type = "keyboard"; break;
+ case DMX_LOCAL_MOUSE: type = "pointer"; break;
+ default: type = "unknown"; break;
+ }
+ dmxLog(dmxInfo, " %s (%s)\n", pt->name, type);
+ }
+ dmxLog(dmxFatal, "Must have valid local device driver\n");
+ }
+}
+
+int dmxInputExtensionErrorHandler(Display *dsp, _Xconst char *name, _Xconst char *reason)
+{
+ return 0;
+}
+
+static void dmxInputScanForExtensions(DMXInputInfo *dmxInput, int doXI)
+{
+ XExtensionVersion *ext;
+ XDeviceInfo *devices;
+ Display *display;
+ int num;
+ int i, j;
+ XextErrorHandler handler;
+
+ if (!(display = XOpenDisplay(dmxInput->name))) return;
+
+ /* Print out information about the XInput Extension. */
+ handler = XSetExtensionErrorHandler(dmxInputExtensionErrorHandler);
+ ext = XGetExtensionVersion(display, INAME);
+ XSetExtensionErrorHandler(handler);
+
+ if (!ext || ext == (XExtensionVersion *)NoSuchExtension) {
+ dmxLogInput(dmxInput, "%s is not available\n", INAME);
+ } else {
+ dmxLogInput(dmxInput, "Locating devices on %s (%s version %d.%d)\n",
+ dmxInput->name, INAME,
+ ext->major_version, ext->minor_version);
+ devices = XListInputDevices(display, &num);
+
+ XFree(ext);
+ ext = NULL;
+
+ /* Print a list of all devices */
+ for (i = 0; i < num; i++) {
+ const char *use = "Unknown";
+ switch (devices[i].use) {
+ case IsXPointer: use = "XPointer"; break;
+ case IsXKeyboard: use = "XKeyboard"; break;
+ case IsXExtensionDevice: use = "XExtensionDevice"; break;
+ case IsXExtensionPointer: use = "XExtensionPointer"; break;
+ case IsXExtensionKeyboard: use = "XExtensionKeyboard"; break;
+ }
+ dmxLogInput(dmxInput, " %2d %-10.10s %-16.16s\n",
+ devices[i].id,
+ devices[i].name ? devices[i].name : "",
+ use);
+ }
+
+ /* Search for extensions */
+ for (i = 0; i < num; i++) {
+ switch (devices[i].use) {
+ case IsXKeyboard:
+ for (j = 0; j < dmxInput->numDevs; j++) {
+ DMXLocalInputInfoPtr dmxL = dmxInput->devs[j];
+ if (dmxL->type == DMX_LOCAL_KEYBOARD
+ && dmxL->deviceId < 0) {
+ dmxL->deviceId = devices[i].id;
+ dmxL->deviceName = (devices[i].name
+ ? strdup(devices[i].name)
+ : NULL);
+ }
+ }
+ break;
+ case IsXPointer:
+ for (j = 0; j < dmxInput->numDevs; j++) {
+ DMXLocalInputInfoPtr dmxL = dmxInput->devs[j];
+ if (dmxL->type == DMX_LOCAL_MOUSE && dmxL->deviceId < 0) {
+ dmxL->deviceId = devices[i].id;
+ dmxL->deviceName = (devices[i].name
+ ? xstrdup(devices[i].name)
+ : NULL);
+ }
+ }
+ break;
+ }
+ }
+ XFreeDeviceList(devices);
+ }
+ XCloseDisplay(display);
+}
+
+/** Re-initialize all the devices described in \a dmxInput. Called from
+ #dmxAdjustCursorBoundaries before the cursor is redisplayed. */
+void dmxInputReInit(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ if (dmxLocal->reinit)
+ dmxLocal->reinit(&dmxLocal->pDevice->public);
+ }
+}
+
+/** Re-initialize all the devices described in \a dmxInput. Called from
+ #dmxAdjustCursorBoundaries after the cursor is redisplayed. */
+void dmxInputLateReInit(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ if (dmxLocal->latereinit)
+ dmxLocal->latereinit(&dmxLocal->pDevice->public);
+ }
+}
+
+/** Initialize all of the devices described in \a dmxInput. */
+void dmxInputInit(DMXInputInfo *dmxInput)
+{
+ DeviceIntPtr pPointer = NULL, pKeyboard = NULL;
+ dmxArg a;
+ const char *name;
+ int i;
+ int doXI = 1; /* Include by default */
+ int forceConsole = 0;
+ int doWindows = 1; /* On by default */
+ int hasXkb = 0;
+
+ a = dmxArgParse(dmxInput->name);
+
+ for (i = 1; i < dmxArgC(a); i++) {
+ switch (hasXkb) {
+ case 1:
+ dmxInput->keycodes = xstrdup(dmxArgV(a, i));
+ ++hasXkb;
+ break;
+ case 2:
+ dmxInput->symbols = xstrdup(dmxArgV(a, i));
+ ++hasXkb;
+ break;
+ case 3:
+ dmxInput->geometry = xstrdup(dmxArgV(a, i));
+ hasXkb = 0;
+ break;
+ case 0:
+ if (!strcmp(dmxArgV(a, i), "noxi")) doXI = 0;
+ else if (!strcmp(dmxArgV(a, i), "xi")) doXI = 1;
+ else if (!strcmp(dmxArgV(a, i), "console")) forceConsole = 1;
+ else if (!strcmp(dmxArgV(a, i), "noconsole")) forceConsole = 0;
+ else if (!strcmp(dmxArgV(a, i), "windows")) doWindows = 1;
+ else if (!strcmp(dmxArgV(a, i), "nowindows")) doWindows = 0;
+ else if (!strcmp(dmxArgV(a, i), "xkb")) hasXkb = 1;
+ else {
+ dmxLog(dmxFatal,
+ "Unknown input argument: %s\n", dmxArgV(a, i));
+ }
+ }
+ }
+
+ name = dmxArgV(a, 0);
+
+ if (!strcmp(name, "local")) {
+ dmxPopulateLocal(dmxInput, a);
+ } else if (!strcmp(name, "dummy")) {
+ dmxInputCopyLocal(dmxInput, &DMXDummyMou);
+ dmxInputCopyLocal(dmxInput, &DMXDummyKbd);
+ dmxLogInput(dmxInput, "Using dummy input\n");
+ } else {
+ int found;
+
+ for (found = 0, i = 0; i < dmxNumScreens; i++) {
+ if (dmxPropertySameDisplay(&dmxScreens[i], name)) {
+ if (dmxScreens[i].shared)
+ dmxLog(dmxFatal,
+ "Cannot take input from shared backend (%s)\n",
+ name);
+ if (!dmxInput->core) {
+ dmxLog(dmxWarning,
+ "Cannot use core devices on a backend (%s)"
+ " as XInput devices\n", name);
+ } else {
+ char *pt;
+ for (pt = (char *)dmxInput->name; pt && *pt; pt++)
+ if (*pt == ',') *pt = '\0';
+ dmxInputCopyLocal(dmxInput, &DMXBackendMou);
+ dmxInputCopyLocal(dmxInput, &DMXBackendKbd);
+ dmxInput->scrnIdx = i;
+ dmxLogInput(dmxInput,
+ "Using backend input from %s\n", name);
+ }
+ ++found;
+ break;
+ }
+ }
+ if (!found || forceConsole) {
+ char *pt;
+ if (found) dmxInput->console = TRUE;
+ for (pt = (char *)dmxInput->name; pt && *pt; pt++)
+ if (*pt == ',') *pt = '\0';
+ dmxInputCopyLocal(dmxInput, &DMXConsoleMou);
+ dmxInputCopyLocal(dmxInput, &DMXConsoleKbd);
+ if (doWindows) {
+ dmxInput->windows = TRUE;
+ dmxInput->updateWindowInfo = dmxUpdateWindowInformation;
+ }
+ dmxLogInput(dmxInput,
+ "Using console input from %s (%s windows)\n",
+ name, doWindows ? "with" : "without");
+ }
+ }
+
+ dmxArgFree(a);
+
+ /* Locate extensions we may be interested in */
+ dmxInputScanForExtensions(dmxInput, doXI);
+
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ dmxLocal->pDevice = dmxAddDevice(dmxLocal);
+ if (dmxLocal->isCore) {
+ if (dmxLocal->type == DMX_LOCAL_MOUSE)
+ pPointer = dmxLocal->pDevice;
+ if (dmxLocal->type == DMX_LOCAL_KEYBOARD)
+ pKeyboard = dmxLocal->pDevice;
+ }
+ }
+
+ dmxInput->processInputEvents = dmxProcessInputEvents;
+ dmxInput->detached = False;
+
+ RegisterBlockAndWakeupHandlers(dmxBlockHandler, dmxWakeupHandler,
+ (void *)(uintptr_t)dmxInput->inputIdx);
+}
+
+static void dmxInputFreeLocal(DMXLocalInputInfoRec *local)
+{
+ if (!local) return;
+ if (local->isCore && local->type == DMX_LOCAL_MOUSE)
+ dmxLocalCorePointer = NULL;
+ if (local->isCore && local->type == DMX_LOCAL_KEYBOARD)
+ dmxLocalCoreKeyboard = NULL;
+ if (local->destroy_private) local->destroy_private(local->private);
+ free(local->history);
+ free(local->valuators);
+ free(local->deviceName);
+ local->private = NULL;
+ local->history = NULL;
+ local->deviceName = NULL;
+ free(local);
+}
+
+/** Free all of the memory associated with \a dmxInput */
+void dmxInputFree(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ if (!dmxInput) return;
+
+ free(dmxInput->keycodes);
+ free(dmxInput->symbols);
+ free(dmxInput->geometry);
+
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ dmxInputFreeLocal(dmxInput->devs[i]);
+ dmxInput->devs[i] = NULL;
+ }
+ free(dmxInput->devs);
+ dmxInput->devs = NULL;
+ dmxInput->numDevs = 0;
+ if (dmxInput->freename) free(dmxInput->name);
+ dmxInput->name = NULL;
+}
+
+/** Log information about all of the known devices using #dmxLog(). */
+void dmxInputLogDevices(void)
+{
+ int i, j;
+
+ dmxLog(dmxInfo, "%d devices:\n", dmxGetInputCount());
+ dmxLog(dmxInfo, " Id Name Classes\n");
+ for (j = 0; j < dmxNumInputs; j++) {
+ DMXInputInfo *dmxInput = &dmxInputs[j];
+ const char *pt = strchr(dmxInput->name, ',');
+ int len = (pt
+ ? (size_t)(pt-dmxInput->name)
+ : strlen(dmxInput->name));
+
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DeviceIntPtr pDevice = dmxInput->devs[i]->pDevice;
+ if (pDevice) {
+ dmxLog(dmxInfo, " %2d%c %-20.20s",
+ pDevice->id,
+ dmxInput->detached ? 'D' : ' ',
+ pDevice->name);
+ if (pDevice->key) dmxLogCont(dmxInfo, " key");
+ if (pDevice->valuator) dmxLogCont(dmxInfo, " val");
+ if (pDevice->button) dmxLogCont(dmxInfo, " btn");
+ if (pDevice->focus) dmxLogCont(dmxInfo, " foc");
+ if (pDevice->kbdfeed) dmxLogCont(dmxInfo, " fb/kbd");
+ if (pDevice->ptrfeed) dmxLogCont(dmxInfo, " fb/ptr");
+ if (pDevice->intfeed) dmxLogCont(dmxInfo, " fb/int");
+ if (pDevice->stringfeed) dmxLogCont(dmxInfo, " fb/str");
+ if (pDevice->bell) dmxLogCont(dmxInfo, " fb/bel");
+ if (pDevice->leds) dmxLogCont(dmxInfo, " fb/led");
+ if (!pDevice->key && !pDevice->valuator && !pDevice->button
+ && !pDevice->focus && !pDevice->kbdfeed
+ && !pDevice->ptrfeed && !pDevice->intfeed
+ && !pDevice->stringfeed && !pDevice->bell
+ && !pDevice->leds) dmxLogCont(dmxInfo, " (none)");
+
+ dmxLogCont(dmxInfo, "\t[i%d/%*.*s",
+ dmxInput->inputIdx, len, len, dmxInput->name);
+ if (dmxInput->devs[i]->deviceId >= 0)
+ dmxLogCont(dmxInfo, "/id%d", dmxInput->devs[i]->deviceId);
+ if (dmxInput->devs[i]->deviceName)
+ dmxLogCont(dmxInfo, "=%s", dmxInput->devs[i]->deviceName);
+ dmxLogCont(dmxInfo, "] %s\n",
+ dmxInput->devs[i]->isCore
+ ? "core"
+ : (dmxInput->devs[i]->sendsCore
+ ? "extension (sends core events)"
+ : "extension"));
+ }
+ }
+ }
+}
+
+/** Detach an input */
+int dmxInputDetach(DMXInputInfo *dmxInput)
+{
+ int i;
+
+ if (dmxInput->detached) return BadAccess;
+
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ dmxLogInput(dmxInput, "Detaching device id %d: %s%s\n",
+ dmxLocal->pDevice->id,
+ dmxLocal->pDevice->name,
+ dmxLocal->isCore
+ ? " [core]"
+ : (dmxLocal->sendsCore
+ ? " [sends core events]"
+ : ""));
+ DisableDevice(dmxLocal->pDevice, TRUE);
+ }
+ dmxInput->detached = True;
+ dmxInputLogDevices();
+ return 0;
+}
+
+/** Search for input associated with \a dmxScreen, and detach. */
+void dmxInputDetachAll(DMXScreenInfo *dmxScreen)
+{
+ int i;
+
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ if (dmxInput->scrnIdx == dmxScreen->index) dmxInputDetach(dmxInput);
+ }
+}
+
+/** Search for input associated with \a deviceId, and detach. */
+int dmxInputDetachId(int id)
+{
+ DMXInputInfo *dmxInput = dmxInputLocateId(id);
+
+ if (!dmxInput) return BadValue;
+
+ return dmxInputDetach(dmxInput);
+}
+
+DMXInputInfo *dmxInputLocateId(int id)
+{
+ int i, j;
+
+ for (i = 0; i < dmxNumInputs; i++) {
+ DMXInputInfo *dmxInput = &dmxInputs[i];
+ for (j = 0; j < dmxInput->numDevs; j++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[j];
+ if (dmxLocal->pDevice->id == id) return dmxInput;
+ }
+ }
+ return NULL;
+}
+
+static int dmxInputAttachNew(DMXInputInfo *dmxInput, int *id)
+{
+ dmxInputInit(dmxInput);
+ InitAndStartDevices();
+ if (id && dmxInput->devs) *id = dmxInput->devs[0]->pDevice->id;
+ dmxInputLogDevices();
+ return 0;
+}
+
+static int dmxInputAttachOld(DMXInputInfo *dmxInput, int *id)
+{
+ int i;
+
+ dmxInput->detached = False;
+ for (i = 0; i < dmxInput->numDevs; i++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[i];
+ if (id) *id = dmxLocal->pDevice->id;
+ dmxLogInput(dmxInput,
+ "Attaching device id %d: %s%s\n",
+ dmxLocal->pDevice->id,
+ dmxLocal->pDevice->name,
+ dmxLocal->isCore
+ ? " [core]"
+ : (dmxLocal->sendsCore
+ ? " [sends core events]"
+ : ""));
+ EnableDevice(dmxLocal->pDevice, TRUE);
+ }
+ dmxInputLogDevices();
+ return 0;
+}
+
+int dmxInputAttachConsole(const char *name, int isCore, int *id)
+{
+ DMXInputInfo *dmxInput;
+ int i;
+
+ for (i = 0; i < dmxNumInputs; i++) {
+ dmxInput = &dmxInputs[i];
+ if (dmxInput->scrnIdx == -1
+ && dmxInput->detached
+ && !strcmp(dmxInput->name, name)) {
+ /* Found match */
+ dmxLogInput(dmxInput, "Reattaching detached console input\n");
+ return dmxInputAttachOld(dmxInput, id);
+ }
+ }
+
+ /* No match found */
+ dmxInput = dmxConfigAddInput(xstrdup(name), isCore);
+ dmxInput->freename = TRUE;
+ dmxLogInput(dmxInput, "Attaching new console input\n");
+ return dmxInputAttachNew(dmxInput, id);
+}
+
+int dmxInputAttachBackend(int physicalScreen, int isCore, int *id)
+{
+ DMXInputInfo *dmxInput;
+ DMXScreenInfo *dmxScreen;
+ int i;
+
+ if (physicalScreen < 0 || physicalScreen >= dmxNumScreens) return BadValue;
+ for (i = 0; i < dmxNumInputs; i++) {
+ dmxInput = &dmxInputs[i];
+ if (dmxInput->scrnIdx != -1 && dmxInput->scrnIdx == physicalScreen) {
+ /* Found match */
+ if (!dmxInput->detached) return BadAccess; /* Already attached */
+ dmxScreen = &dmxScreens[physicalScreen];
+ if (!dmxScreen->beDisplay) return BadAccess; /* Screen detached */
+ dmxLogInput(dmxInput, "Reattaching detached backend input\n");
+ return dmxInputAttachOld(dmxInput, id);
+ }
+ }
+ /* No match found */
+ dmxScreen = &dmxScreens[physicalScreen];
+ if (!dmxScreen->beDisplay) return BadAccess; /* Screen detached */
+ dmxInput = dmxConfigAddInput(dmxScreen->name, isCore);
+ dmxLogInput(dmxInput, "Attaching new backend input\n");
+ return dmxInputAttachNew(dmxInput, id);
+}
diff --git a/hw/dmx/input/dmxinputinit.h b/hw/dmx/input/dmxinputinit.h
new file mode 100644
index 0000000..5a4a410
--- /dev/null
+++ b/hw/dmx/input/dmxinputinit.h
@@ -0,0 +1,291 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface for low-level input support. \see dmxinputinit.c */
+
+#ifndef _DMXINPUTINIT_H_
+#define _DMXINPUTINIT_H_
+
+#include "dmx.h"
+#include "dmxinput.h"
+#include "dmxlog.h"
+
+
+#define DMX_LOCAL_DEFAULT_KEYBOARD "kbd"
+#define DMX_LOCAL_DEFAULT_POINTER "ps2"
+#define DMX_MAX_BUTTONS 256
+#define DMX_MOTION_SIZE 256
+#define DMX_MAX_VALUATORS 32
+#define DMX_MAX_AXES 32
+#define DMX_MAX_XINPUT_EVENT_TYPES 100
+#define DMX_MAP_ENTRIES 16 /* Must be a power of 2 */
+#define DMX_MAP_MASK (DMX_MAP_ENTRIES - 1)
+
+typedef enum {
+ DMX_FUNCTION_GRAB,
+ DMX_FUNCTION_TERMINATE,
+ DMX_FUNCTION_FINE
+} DMXFunctionType;
+
+typedef enum {
+ DMX_LOCAL_HIGHLEVEL,
+ DMX_LOCAL_KEYBOARD,
+ DMX_LOCAL_MOUSE,
+ DMX_LOCAL_OTHER
+} DMXLocalInputType;
+
+typedef enum {
+ DMX_LOCAL_TYPE_LOCAL,
+ DMX_LOCAL_TYPE_CONSOLE,
+ DMX_LOCAL_TYPE_BACKEND,
+ DMX_LOCAL_TYPE_COMMON
+} DMXLocalInputExtType;
+
+typedef enum {
+ DMX_RELATIVE,
+ DMX_ABSOLUTE,
+ DMX_ABSOLUTE_CONFINED
+} DMXMotionType;
+
+/** Stores information from low-level device that is used to initialize
+ * the device at the dix level. */
+typedef struct _DMXLocalInitInfo {
+ int keyboard; /**< Non-zero if the device is a keyboard */
+
+ int keyClass; /**< Non-zero if keys are present */
+ KeySymsRec keySyms; /**< Key symbols */
+ int freemap; /**< If non-zero, free keySyms.map */
+ CARD8 modMap[MAP_LENGTH]; /**< Modifier map */
+ XkbDescPtr xkb; /**< XKB description */
+ XkbComponentNamesRec names; /**< XKB component names */
+ int freenames; /**< Non-zero if names should be free'd */
+ int force; /**< Do not allow command line override */
+
+ int buttonClass; /**< Non-zero if buttons are present */
+ int numButtons; /**< Number of buttons */
+ unsigned char map[DMX_MAX_BUTTONS]; /**< Button map */
+
+ int valuatorClass; /**< Non-zero if valuators are
+ * present */
+ int numRelAxes; /**< Number of relative axes */
+ int numAbsAxes; /**< Number of absolute axes */
+ int minval[DMX_MAX_AXES]; /**< Minimum values */
+ int maxval[DMX_MAX_AXES]; /**< Maximum values */
+ int res[DMX_MAX_AXES]; /**< Resolution */
+ int minres[DMX_MAX_AXES]; /**< Minimum resolutions */
+ int maxres[DMX_MAX_AXES]; /**< Maximum resolutions */
+
+ int focusClass; /**< Non-zero if device can
+ * cause focus */
+ int proximityClass; /**< Non-zero if device
+ * causes proximity events */
+ int kbdFeedbackClass; /**< Non-zero if device has
+ * keyboard feedback */
+ int ptrFeedbackClass; /**< Non-zero if device has
+ * pointer feedback */
+ int ledFeedbackClass; /**< Non-zero if device has
+ * LED indicators */
+ int belFeedbackClass; /**< Non-zero if device has a
+ * bell */
+ int intFeedbackClass; /**< Non-zero if device has
+ * integer feedback */
+ int strFeedbackClass; /**< Non-zero if device has
+ * string feedback */
+
+ int maxSymbols; /**< Maximum symbols */
+ int maxSymbolsSupported; /**< Maximum symbols supported */
+ KeySym *symbols; /**< Key symbols */
+} DMXLocalInitInfo, *DMXLocalInitInfoPtr;
+
+typedef pointer (*dmxCreatePrivateProcPtr)(DeviceIntPtr);
+typedef void (*dmxDestroyPrivateProcPtr)(pointer);
+
+typedef void (*dmxInitProcPtr)(DevicePtr);
+typedef void (*dmxReInitProcPtr)(DevicePtr);
+typedef void (*dmxLateReInitProcPtr)(DevicePtr);
+typedef void (*dmxGetInfoProcPtr)(DevicePtr, DMXLocalInitInfoPtr);
+typedef int (*dmxOnProcPtr)(DevicePtr);
+typedef void (*dmxOffProcPtr)(DevicePtr);
+typedef void (*dmxUpdatePositionProcPtr)(pointer, int x, int y);
+
+typedef void (*dmxVTPreSwitchProcPtr)(pointer); /* Turn I/O Off */
+typedef void (*dmxVTPostSwitchProcPtr)(pointer); /* Turn I/O On */
+typedef void (*dmxVTSwitchReturnProcPtr)(pointer);
+typedef int (*dmxVTSwitchProcPtr)(pointer, int vt,
+ dmxVTSwitchReturnProcPtr, pointer);
+
+typedef void (*dmxMotionProcPtr)(DevicePtr,
+ int *valuators,
+ int firstAxis,
+ int axesCount,
+ DMXMotionType type,
+ DMXBlockType block);
+typedef void (*dmxEnqueueProcPtr)(DevicePtr, int type, int detail,
+ KeySym keySym, XEvent *e,
+ DMXBlockType block);
+typedef int (*dmxCheckSpecialProcPtr)(DevicePtr, KeySym keySym);
+typedef void (*dmxCollectEventsProcPtr)(DevicePtr,
+ dmxMotionProcPtr,
+ dmxEnqueueProcPtr,
+ dmxCheckSpecialProcPtr,
+ DMXBlockType);
+typedef void (*dmxProcessInputProcPtr)(pointer);
+typedef void (*dmxUpdateInfoProcPtr)(pointer, DMXUpdateType, WindowPtr);
+typedef int (*dmxFunctionsProcPtr)(pointer, DMXFunctionType);
+
+typedef void (*dmxKBCtrlProcPtr)(DevicePtr, KeybdCtrl *ctrl);
+typedef void (*dmxMCtrlProcPtr)(DevicePtr, PtrCtrl *ctrl);
+typedef void (*dmxKBBellProcPtr)(DevicePtr, int percent,
+ int volume, int pitch, int duration);
+
+/** Stores a mapping between the device id on the remote X server and
+ * the id on the DMX server */
+typedef struct _DMXEventMap {
+ int remote; /**< Event number on remote X server */
+ int server; /**< Event number (unbiased) on DMX server */
+} DMXEventMap;
+
+/** This is the device-independent structure used by the low-level input
+ * routines. The contents are not exposed to top-level .c files (except
+ * dmxextensions.c). \see dmxinput.h \see dmxextensions.c */
+typedef struct _DMXLocalInputInfo {
+ const char *name; /**< Device name */
+ DMXLocalInputType type; /**< Device type */
+ DMXLocalInputExtType extType; /**< Extended device type */
+ int binding; /**< Count of how many consecutive
+ * structs are bound to the same
+ * device */
+
+ /* Low-level (e.g., keyboard/mouse drivers) */
+
+ dmxCreatePrivateProcPtr create_private; /**< Create
+ * device-dependent
+ * private */
+ dmxDestroyPrivateProcPtr destroy_private; /**< Destroy
+ * device-dependent
+ * private */
+ dmxInitProcPtr init; /**< Initialize device */
+ dmxReInitProcPtr reinit; /**< Reinitialize device
+ * (during a
+ * reconfiguration) */
+ dmxLateReInitProcPtr latereinit; /**< Reinitialize a device
+ * (called very late
+ * during a
+ * reconfiguration) */
+ dmxGetInfoProcPtr get_info; /**< Get device information */
+ dmxOnProcPtr on; /**< Turn device on */
+ dmxOffProcPtr off; /**< Turn device off */
+ dmxUpdatePositionProcPtr update_position; /**< Called when another
+ * device updates the
+ * cursor position */
+ dmxVTPreSwitchProcPtr vt_pre_switch; /**< Called before a VT switch */
+ dmxVTPostSwitchProcPtr vt_post_switch; /**< Called after a VT switch */
+ dmxVTSwitchProcPtr vt_switch; /**< Causes a VT switch */
+
+ dmxCollectEventsProcPtr collect_events; /**< Collect and enqueue
+ * events from the
+ * device*/
+ dmxProcessInputProcPtr process_input; /**< Process event (from
+ * queue) */
+ dmxFunctionsProcPtr functions;
+ dmxUpdateInfoProcPtr update_info; /**< Update window layout
+ * information */
+
+ dmxMCtrlProcPtr mCtrl; /**< Pointer control */
+ dmxKBCtrlProcPtr kCtrl; /**< Keyboard control */
+ dmxKBBellProcPtr kBell; /**< Bell control */
+
+ pointer private; /**< Device-dependent private */
+ int isCore; /**< Is a DMX core device */
+ int sendsCore; /**< Sends DMX core events */
+ KeybdCtrl kctrl; /**< Keyboard control */
+ PtrCtrl mctrl; /**< Pointer control */
+
+ DeviceIntPtr pDevice; /**< X-level device */
+ int inputIdx; /**< High-level index */
+ int lastX, lastY; /**< Last known position;
+ * for XInput in
+ * dmxevents.c */
+
+ int head; /**< XInput motion history
+ * head */
+ int tail; /**< XInput motion history
+ * tail */
+ unsigned long *history; /**< XInput motion history */
+ int *valuators; /**< Cache of previous values */
+
+ /* for XInput ChangePointerDevice */
+ int (*savedMotionProc)(DeviceIntPtr,
+ xTimecoord *,
+ unsigned long,
+ unsigned long,
+ ScreenPtr);
+ int savedMotionEvents; /**< Saved motion events */
+ int savedSendsCore; /**< Saved sends-core flag */
+
+ DMXEventMap map[DMX_MAP_ENTRIES]; /**< XInput device id map */
+ int mapOptimize; /**< XInput device id
+ * map
+ * optimization */
+
+ long deviceId; /**< device id on remote side,
+ * if any */
+ const char *deviceName; /**< devive name on remote
+ * side, if any */
+} DMXLocalInputInfoRec;
+
+extern DMXLocalInputInfoPtr dmxLocalCorePointer, dmxLocalCoreKeyboard;
+
+extern void dmxLocalInitInput(DMXInputInfo *dmxInput);
+extern DMXLocalInputInfoPtr dmxInputCopyLocal(DMXInputInfo *dmxInput,
+ DMXLocalInputInfoPtr s);
+
+extern void dmxChangePointerControl(DeviceIntPtr pDevice, PtrCtrl *ctrl);
+extern void dmxKeyboardKbdCtrlProc(DeviceIntPtr pDevice, KeybdCtrl *ctrl);
+extern void dmxKeyboardBellProc(int percent, DeviceIntPtr pDevice,
+ pointer ctrl, int unknown);
+
+extern int dmxInputExtensionErrorHandler(Display *dsp, _Xconst char *name,
+ _Xconst char *reason);
+
+extern int dmxInputDetach(DMXInputInfo *dmxInput);
+extern void dmxInputDetachAll(DMXScreenInfo *dmxScreen);
+extern int dmxInputDetachId(int id);
+extern DMXInputInfo *dmxInputLocateId(int id);
+extern int dmxInputAttachConsole(const char *name, int isCore,
+ int *id);
+extern int dmxInputAttachBackend(int physicalScreen, int isCore,
+ int *id);
+
+#endif
diff --git a/hw/dmx/input/dmxmap.c b/hw/dmx/input/dmxmap.c
new file mode 100644
index 0000000..1eccd3d
--- /dev/null
+++ b/hw/dmx/input/dmxmap.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ */
+
+/** \file
+ *
+ * This file implements a mapping from remote XInput event types to Xdmx
+ * XInput event types.
+ *
+ * The exglobals.h file defines global server-side variables with names
+ * Device* to be integers that hold the value of the type of the
+ * server-side XInput extension event.
+ *
+ * The client-side X11/extensions/XInput.h file defines macros with THE
+ * EXACT SAME Device* names!
+ *
+ * Using those macros to extract remote server event type values from
+ * the (opaque) XDevice structure is appropriate, but makes a direct
+ * mapping to the Device* integers impossible. So we use the normalized
+ * XI_Device* names for these routines.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "dmxinputinit.h"
+#include "dmxmap.h"
+
+/** Create a mapping from \a remoteEvent to \a serverEvent. The \a
+ * remoteEvent is the type returned from the remote server. The \a
+ * serverEvent is from the XI_* list of events in
+ * include/extensions/XIproto.h. */
+void dmxMapInsert(DMXLocalInputInfoPtr dmxLocal,
+ int remoteEvent, int serverEvent)
+{
+ int hash = remoteEvent & DMX_MAP_MASK;
+ int i;
+
+ /* Return if this has already been mapped */
+ if (dmxLocal->map[hash].remote == remoteEvent
+ && dmxLocal->map[hash].server == serverEvent) return;
+
+ if (dmxLocal->map[hash].remote) {
+ dmxLocal->mapOptimize = 0;
+ for (i = 0; i < DMX_MAP_ENTRIES; i++) {
+ if (!dmxLocal->map[i].remote) {
+ dmxLocal->map[i].remote = remoteEvent;
+ dmxLocal->map[i].server = serverEvent;
+ return;
+ }
+ }
+ dmxLog(dmxWarning,
+ "Out of map entries, cannot map remove event type %d\n",
+ remoteEvent);
+ } else {
+ dmxLocal->map[hash].remote = remoteEvent;
+ dmxLocal->map[hash].server = serverEvent;
+ }
+}
+
+/** Remove all mappings there were inserted with #dmxMapInsert. */
+void dmxMapClear(DMXLocalInputInfoPtr dmxLocal)
+{
+ int i;
+
+ for (i = 0; i < DMX_MAP_ENTRIES; i++) dmxLocal->map[i].remote = 0;
+ dmxLocal->mapOptimize = 1;
+}
+
+/** Lookup a mapping for \a remoteEvent. The \a remoteEvent is the type
+ * returned from the remote server. The return value is that which was
+ * passed into #dmxMapInsert (i.e., a value from the XI_* list in
+ * include/extensions/XIproto.h). If a mapping is not available, -1 is
+ * returned. */
+int dmxMapLookup(DMXLocalInputInfoPtr dmxLocal, int remoteEvent)
+{
+ int hash = remoteEvent & DMX_MAP_MASK;
+ int serverEvent = -1;
+ int i;
+
+ if (dmxLocal->mapOptimize && dmxLocal->map[hash].remote == remoteEvent) {
+ serverEvent = dmxLocal->map[hash].server;
+ } else {
+ for (i = 0; i < DMX_MAP_ENTRIES; i++)
+ if (dmxLocal->map[i].remote == remoteEvent) {
+ serverEvent = dmxLocal->map[hash].server;
+ break;
+ }
+ }
+
+ return serverEvent;
+}
diff --git a/hw/dmx/input/dmxmap.h b/hw/dmx/input/dmxmap.h
new file mode 100644
index 0000000..aad30d1
--- /dev/null
+++ b/hw/dmx/input/dmxmap.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ */
+
+/** \file
+ * Interface to XInput event mapping support. \see dmxmap.c */
+
+#ifndef _DMXMAP_H_
+#define _DMXMAP_H_
+extern void dmxMapInsert(DMXLocalInputInfoPtr dmxLocal,
+ int remoteEvent, int serverEvent);
+extern void dmxMapClear(DMXLocalInputInfoPtr dmxLocal);
+extern int dmxMapLookup(DMXLocalInputInfoPtr dmxLocal, int remoteEvent);
+#endif
diff --git a/hw/dmx/input/dmxmotion.c b/hw/dmx/input/dmxmotion.c
new file mode 100644
index 0000000..1aae5fe
--- /dev/null
+++ b/hw/dmx/input/dmxmotion.c
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * This file provides functions similar to miPointerGetMotionEvents and
+ * miPointerPutMotionEvents, with the exception that devices with more
+ * than two axes are fully supported. These routines may be used only
+ * for motion buffers for extension devices, and are \a not compatible
+ * replacements for the mi routines. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "inputstr.h"
+#include "dmxinputinit.h"
+#include "dmxcommon.h"
+#include "dmxmotion.h"
+
+#define OFFSET(offset,element) ((offset) * (numAxes + 1) + (element))
+
+/** Return size of motion buffer. \see DMX_MOTION_SIZE */
+int dmxPointerGetMotionBufferSize(void)
+{
+ return DMX_MOTION_SIZE;
+}
+
+/** This routine performs the same function as \a miPointerGetMotionEvents:
+ * the events in the motion history that are between the start and stop
+ * times (in mS) are placed in the coords vector, and the count of the
+ * number of items so placed is returned. This routine is called from
+ * dix/devices.c so that coords can hold valuator->numMotionEvents
+ * events. This routine is called from \a Xi/gtmotion.c with coords large
+ * enough to hold the same number of events in a variable-length
+ * extended \a xTimecoord structure. This provides sufficient data for the
+ * \a XGetDeviceMotionEvents library call, and would be identical to
+ * \a miPointerGetMotionEvents for devices with only 2 axes (i.e., core
+ * pointers) if \a xTimecoord used 32bit integers.
+ *
+ * Because DMX uses the mi* routines for all core devices, this routine
+ * only has to support extension devices using the polymorphic coords.
+ * Because compatibility with miPointerGetMotionEvents is not possible,
+ * it is not provided. */
+int dmxPointerGetMotionEvents(DeviceIntPtr pDevice,
+ xTimecoord *coords,
+ unsigned long start,
+ unsigned long stop,
+ ScreenPtr pScreen)
+{
+ GETDMXLOCALFROMPDEVICE;
+ int numAxes = pDevice->valuator->numAxes;
+ unsigned long *c = (unsigned long *)coords;
+ int count = 0;
+ int i, j;
+
+ if (!dmxLocal->history) return 0;
+ for (i = dmxLocal->head; i != dmxLocal->tail;) {
+ if (dmxLocal->history[OFFSET(i,0)] >= stop) break;
+ if (dmxLocal->history[OFFSET(i,0)] >= start) {
+ for (j = 0; j < numAxes + 1; j++)
+ c[OFFSET(count,j)] = dmxLocal->history[OFFSET(i,j)];
+ ++count;
+ }
+ if (++i >= DMX_MOTION_SIZE) i = 0;
+ }
+ return count;
+}
+
+/** This routine adds an event to the motion history. A similar
+ * function is performed by miPointerMove for the mi versions of these
+ * routines. */
+void dmxPointerPutMotionEvent(DeviceIntPtr pDevice,
+ int firstAxis, int axesCount, int *v,
+ unsigned long time)
+{
+ GETDMXLOCALFROMPDEVICE;
+ int numAxes = pDevice->valuator->numAxes;
+ int i;
+
+ if (!dmxLocal->history) {
+ dmxLocal->history = malloc(sizeof(*dmxLocal->history)
+ * (numAxes + 1)
+ * DMX_MOTION_SIZE);
+ dmxLocal->head = 0;
+ dmxLocal->tail = 0;
+ dmxLocal->valuators = calloc(sizeof(*dmxLocal->valuators), numAxes);
+ } else {
+ if (++dmxLocal->tail >= DMX_MOTION_SIZE) dmxLocal->tail = 0;
+ if (dmxLocal->head == dmxLocal->tail)
+ if (++dmxLocal->head >= DMX_MOTION_SIZE) dmxLocal->head = 0;
+ }
+
+ dmxLocal->history[OFFSET(dmxLocal->tail,0)] = time;
+
+ /* Initialize the data from the known
+ * values (if Absolute) or to zero (if
+ * Relative) */
+ for (i = 0; i < numAxes; i++) {
+ if (pDevice->valuator->axes[i].mode == Absolute)
+ dmxLocal->history[OFFSET(dmxLocal->tail,i+1)]
+ = dmxLocal->valuators[i];
+ else
+ dmxLocal->history[OFFSET(dmxLocal->tail,i+1)] = 0;
+ }
+
+ for (i = firstAxis; i < axesCount; i++) {
+ dmxLocal->history[OFFSET(dmxLocal->tail,i+i)]
+ = (unsigned long)v[i-firstAxis];
+ dmxLocal->valuators[i] = v[i-firstAxis];
+ }
+}
diff --git a/hw/dmx/input/dmxmotion.h b/hw/dmx/input/dmxmotion.h
new file mode 100644
index 0000000..88aeb3d
--- /dev/null
+++ b/hw/dmx/input/dmxmotion.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to functions supporting motion events. \see dmxmotion.c */
+
+#ifndef _DMXMOTION_H_
+#define _DMXMOTION_H_
+
+extern int dmxPointerGetMotionBufferSize(void);
+extern int dmxPointerGetMotionEvents(DeviceIntPtr pDevice,
+ xTimecoord *coords,
+ unsigned long start,
+ unsigned long stop,
+ ScreenPtr pScreen);
+extern void dmxPointerPutMotionEvent(DeviceIntPtr pDevice,
+ int firstAxis, int axesCount, int *v,
+ unsigned long time);
+#endif
diff --git a/hw/dmx/input/dmxsigio.c b/hw/dmx/input/dmxsigio.c
new file mode 100644
index 0000000..03c3070
--- /dev/null
+++ b/hw/dmx/input/dmxsigio.c
@@ -0,0 +1,233 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * Provides an interface for handling SIGIO signals for input devices. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "inputstr.h"
+#include "dmxinputinit.h"
+#include "dmxsigio.h"
+#include "dmxevents.h"
+#include <signal.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+static int dmxFdCount = 0;
+static Bool dmxInputEnabled = TRUE;
+
+/* Define equivalents for non-POSIX systems (e.g., SGI IRIX, Solaris) */
+#ifndef O_ASYNC
+# ifdef FASYNC
+# define O_ASYNC FASYNC
+# else
+# define O_ASYNC 0
+# endif
+#endif
+#ifndef O_NONBLOCK
+#define O_NONBLOCK FNONBLK
+#endif
+
+static void dmxSigioHandler(int sig)
+{
+ int i, j;
+ DMXInputInfo *dmxInput;
+
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++) {
+ if (dmxInput->sigioState == DMX_ACTIVESIGIO) {
+ for (j = 0; j < dmxInput->numDevs; j++) {
+ DMXLocalInputInfoPtr dmxLocal = dmxInput->devs[j];
+ if (dmxLocal->collect_events) {
+ dmxLocal->collect_events(&dmxLocal->pDevice->public,
+ dmxMotion,
+ dmxEnqueue,
+ dmxCheckSpecialKeys,
+ DMX_NO_BLOCK);
+ }
+ }
+ }
+ }
+}
+
+/** Block SIGIO handling. */
+void dmxSigioBlock(void)
+{
+ sigset_t s;
+
+ sigemptyset(&s);
+ sigaddset(&s, SIGIO);
+ sigprocmask(SIG_BLOCK, &s, 0);
+}
+
+/** Unblock SIGIO handling. */
+void dmxSigioUnblock(void)
+{
+ sigset_t s;
+
+ sigemptyset(&s);
+ sigaddset(&s, SIGIO);
+ sigprocmask(SIG_UNBLOCK, &s, 0);
+}
+
+static void dmxSigioHook(void)
+{
+ struct sigaction a;
+ sigset_t s;
+
+ memset(&a, 0, sizeof(a));
+ a.sa_handler = dmxSigioHandler;
+ sigemptyset(&a.sa_mask);
+ sigaddset(&a.sa_mask, SIGIO);
+ sigaddset(&a.sa_mask, SIGALRM);
+ sigaddset(&a.sa_mask, SIGVTALRM);
+ sigaction(SIGIO, &a, 0);
+
+ sigemptyset(&s);
+ sigprocmask(SIG_SETMASK, &s, 0);
+}
+
+static void dmxSigioUnhook(void)
+{
+ struct sigaction a;
+
+ memset (&a, 0, sizeof(a));
+ a.sa_handler = SIG_IGN;
+ sigemptyset(&a.sa_mask);
+ sigaction(SIGIO, &a, 0);
+}
+
+static void dmxSigioAdd(DMXInputInfo *dmxInput)
+{
+ int flags;
+ int i;
+
+ switch (dmxInput->sigioState) {
+ case DMX_NOSIGIO: return;
+ case DMX_USESIGIO: dmxInput->sigioState = DMX_ACTIVESIGIO; break;
+ case DMX_ACTIVESIGIO: return;
+ }
+
+ for (i = 0; i < dmxInput->sigioFdCount; i++) {
+ if (!dmxInput->sigioAdded[i]) {
+ int fd = dmxInput->sigioFd[i];
+
+ fcntl(fd, F_SETOWN, getpid());
+ flags = fcntl(fd, F_GETFL);
+ flags |= O_ASYNC|O_NONBLOCK;
+ fcntl(fd, F_SETFL, flags);
+
+ AddEnabledDevice(fd);
+ dmxInput->sigioAdded[i] = TRUE;
+
+ if (++dmxFdCount == 1) dmxSigioHook();
+ }
+ }
+}
+
+static void dmxSigioRemove(DMXInputInfo *dmxInput)
+{
+ int flags;
+ int i;
+
+ switch (dmxInput->sigioState) {
+ case DMX_NOSIGIO: return;
+ case DMX_USESIGIO: return;
+ case DMX_ACTIVESIGIO: dmxInput->sigioState = DMX_USESIGIO; break;
+ }
+
+ for (i = 0; i < dmxInput->sigioFdCount; i++) {
+ if (dmxInput->sigioAdded[i]) {
+ int fd = dmxInput->sigioFd[i];
+
+ dmxInput->sigioAdded[i] = FALSE;
+ RemoveEnabledDevice(fd);
+
+ flags = fcntl(fd, F_GETFL);
+ flags &= ~(O_ASYNC|O_NONBLOCK);
+ fcntl(fd, F_SETFL, flags);
+
+ if (!--dmxFdCount) dmxSigioUnhook();
+ }
+ }
+}
+
+/** Enable SIGIO handling. This instantiates the handler with the OS. */
+void dmxSigioEnableInput(void)
+{
+ int i;
+ DMXInputInfo *dmxInput;
+
+ dmxInputEnabled = TRUE;
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
+ dmxSigioAdd(dmxInput);
+}
+
+/** Disable SIGIO handling. This removes the hanlder from the OS. */
+void dmxSigioDisableInput(void)
+{
+ int i;
+ DMXInputInfo *dmxInput;
+
+ dmxInputEnabled = FALSE;
+ for (i = 0, dmxInput = &dmxInputs[0]; i < dmxNumInputs; i++, dmxInput++)
+ dmxSigioRemove(dmxInput);
+}
+
+/** Make a note that the input device described in \a dmxInput will be
+ * using the file descriptor \a fd for SIGIO signals. Calls
+ * AddEnabledDevice ifi SIGIO handling has been enabled with
+ * #dmxSigioEnableInput(). */
+void dmxSigioRegister(DMXInputInfo *dmxInput, int fd)
+{
+ dmxInput->sigioState = DMX_USESIGIO;
+ if (dmxInput->sigioFdCount >= DMX_MAX_SIGIO_FDS)
+ dmxLog(dmxFatal, "Too many SIGIO file descriptors (%d >= %d)\n",
+ dmxInput->sigioFdCount, DMX_MAX_SIGIO_FDS);
+
+ dmxInput->sigioFd[dmxInput->sigioFdCount++] = fd;
+ if (dmxInputEnabled) dmxSigioAdd(dmxInput);
+}
+
+/** Remove the notes that \a dmxInput is using any file descriptors for
+ * SIGIO signals. Calls RemoveEnabledDevice. */
+void dmxSigioUnregister(DMXInputInfo *dmxInput)
+{
+ if (dmxInput->sigioState == DMX_NOSIGIO) return;
+ dmxSigioRemove(dmxInput);
+ dmxInput->sigioState = DMX_NOSIGIO;
+ dmxInput->sigioFdCount = 0;
+}
diff --git a/hw/dmx/input/dmxsigio.h b/hw/dmx/input/dmxsigio.h
new file mode 100644
index 0000000..83f8060
--- /dev/null
+++ b/hw/dmx/input/dmxsigio.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to SIGIO handling support. \see dmxsigio.c */
+
+#ifndef _DMXSIGIO_H_
+#define _DMXSIGIO_H_
+extern void dmxSigioBlock(void);
+extern void dmxSigioUnblock(void);
+extern void dmxSigioEnableInput(void);
+extern void dmxSigioDisableInput(void);
+extern void dmxSigioRegister(DMXInputInfo *dmxInput, int fd);
+extern void dmxSigioUnregister(DMXInputInfo *dmxInput);
+#endif
diff --git a/hw/dmx/input/dmxxinput.c b/hw/dmx/input/dmxxinput.c
new file mode 100644
index 0000000..54381b2
--- /dev/null
+++ b/hw/dmx/input/dmxxinput.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This file implements support required by the XINPUT extension.
+ */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "inputstr.h"
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include "XIstubs.h"
+
+#include "mipointer.h"
+#include "dmxinputinit.h"
+#include "exevents.h"
+
+/** Set device mode to \a mode. This is not implemented. */
+int SetDeviceMode(ClientPtr client, DeviceIntPtr dev, int mode)
+{
+ return BadMatch;
+}
+
+/** Set device valuators. This is not implemented. */
+int SetDeviceValuators (ClientPtr client,
+ DeviceIntPtr dev,
+ int *valuators,
+ int first_valuator,
+ int num_valuators)
+{
+ return BadMatch;
+}
+
+/** Change device control. This is not implemented. */
+int ChangeDeviceControl(ClientPtr client,
+ DeviceIntPtr dev,
+ xDeviceCtl *control)
+{
+ return BadMatch;
+}
diff --git a/hw/dmx/input/lnx-keyboard.c b/hw/dmx/input/lnx-keyboard.c
new file mode 100644
index 0000000..5bfb881
--- /dev/null
+++ b/hw/dmx/input/lnx-keyboard.c
@@ -0,0 +1,990 @@
+/* Portions of this file were derived from the following files:
+ *
+ **********************************************************************
+ *
+ * xfree86/common/{xf86Io.c,xf86Kbd.c,xf86Events.c}
+ *
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the 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 Thomas Roell not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Thomas Roell makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THOMAS ROELL 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.
+ *
+ **********************************************************************
+ *
+ * xfree86/common/xf86KbdLnx.c
+ *
+ * Linux version of keymapping setup. The kernel (since 0.99.14) has support
+ * for fully remapping the keyboard, but there are some differences between
+ * the Linux map and the SVR4 map (esp. in the extended keycodes). We also
+ * remove the restriction on what keycodes can be remapped.
+ * Orest Zborowski.
+ *
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the 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 Thomas Roell not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Thomas Roell makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THOMAS ROELL 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.
+ *
+ **********************************************************************
+ *
+ * xfree86/os-support/linux/lnx_io.c
+ *
+ * Copyright 1992 by Orest Zborowski <obz@Kodak.com>
+ * Copyright 1993 by David Dawes <dawes@xfree86.org>
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the names of Orest Zborowski and David Dawes
+ * not be used in advertising or publicity pertaining to distribution of
+ * the software without specific, written prior permission. Orest Zborowski
+ * and David Dawes make no representations about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ *
+ * OREST ZBOROWSKI AND DAVID DAWES DISCLAIMS ALL WARRANTIES WITH REGARD
+ * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL OREST ZBOROWSKI OR DAVID DAWES 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.
+ *
+ */
+
+/*
+ * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This code implements a low-level device driver for the Linux
+ * keyboard. The code is derived from code by Thomas Roell, Orest
+ * Zborowski, and David Dawes (see the source code for complete
+ * references). */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "dmxinputinit.h"
+#include "lnx-keyboard.h"
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define SWITCHRETPROC dmxVTSwitchReturnProcPtr
+#define BLOCK DMXBlockType
+#define MESSAGE "\033c\n\n\nDMX taking input from this console..."
+#define FINALMESSAGE "\033cDMX terminated."
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+#include "inputstr.h"
+#include <X11/Xos.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+#include <signal.h>
+#include <sys/vt.h>
+#include <sys/kd.h>
+#include <termios.h>
+#include "atKeynames.h"
+#if 00
+#include "xf86Keymap.h"
+#endif
+#include <linux/keyboard.h>
+#include <xkbsrv.h>
+
+#define NUM_AT2LNX (sizeof(at2lnx) / sizeof(at2lnx[0]))
+#define NUM_STATE_ENTRIES (256/32)
+
+
+/* Private area for Linux-style keyboards. */
+typedef struct _myPrivate {
+ int fd;
+ int vtno;
+ int vtcurrent;
+ int kbdtrans;
+ struct termios kbdtty;
+ int kbdType;
+ CARD32 kbdState[NUM_STATE_ENTRIES];
+ DeviceIntPtr pKeyboard;
+ unsigned char prefix;
+
+ int switched;
+ SWITCHRETPROC switch_return;
+ void *switch_return_data;
+
+ /* For bell */
+ int pitch;
+ unsigned long duration;
+} myPrivate;
+
+static myPrivate *PRIV = NULL;
+
+#undef SYSCALL
+#define SYSCALL(call) while(((call) == -1) && (errno == EINTR))
+
+static int kbdLinuxKeyDown(myPrivate *priv, int keyCode)
+{
+ CARD8 byte = keyCode >> 5;
+ CARD32 bit = 1 << (keyCode & 0x1f);
+
+ if (byte > NUM_STATE_ENTRIES) return 0;
+ return priv->kbdState[byte] & bit;
+}
+
+static void kbdLinuxKeyState(myPrivate *priv, int type, int keyCode)
+{
+ CARD8 byte = keyCode >> 5;
+ CARD32 bit = 1 << (keyCode & 0x1f);
+
+ if (byte > NUM_STATE_ENTRIES) return;
+ if (type == KeyPress) priv->kbdState[byte] |= bit;
+ else priv->kbdState[byte] &= ~bit;
+}
+
+static KeySym linux_to_x[256] = {
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ XK_BackSpace, XK_Tab, XK_Linefeed, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, XK_Escape,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ XK_space, XK_exclam, XK_quotedbl, XK_numbersign,
+ XK_dollar, XK_percent, XK_ampersand, XK_apostrophe,
+ XK_parenleft, XK_parenright, XK_asterisk, XK_plus,
+ XK_comma, XK_minus, XK_period, XK_slash,
+ XK_0, XK_1, XK_2, XK_3,
+ XK_4, XK_5, XK_6, XK_7,
+ XK_8, XK_9, XK_colon, XK_semicolon,
+ XK_less, XK_equal, XK_greater, XK_question,
+ XK_at, XK_A, XK_B, XK_C,
+ XK_D, XK_E, XK_F, XK_G,
+ XK_H, XK_I, XK_J, XK_K,
+ XK_L, XK_M, XK_N, XK_O,
+ XK_P, XK_Q, XK_R, XK_S,
+ XK_T, XK_U, XK_V, XK_W,
+ XK_X, XK_Y, XK_Z, XK_bracketleft,
+ XK_backslash, XK_bracketright,XK_asciicircum, XK_underscore,
+ XK_grave, XK_a, XK_b, XK_c,
+ XK_d, XK_e, XK_f, XK_g,
+ XK_h, XK_i, XK_j, XK_k,
+ XK_l, XK_m, XK_n, XK_o,
+ XK_p, XK_q, XK_r, XK_s,
+ XK_t, XK_u, XK_v, XK_w,
+ XK_x, XK_y, XK_z, XK_braceleft,
+ XK_bar, XK_braceright, XK_asciitilde, XK_BackSpace,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ XK_nobreakspace,XK_exclamdown, XK_cent, XK_sterling,
+ XK_currency, XK_yen, XK_brokenbar, XK_section,
+ XK_diaeresis, XK_copyright, XK_ordfeminine, XK_guillemotleft,
+ XK_notsign, XK_hyphen, XK_registered, XK_macron,
+ XK_degree, XK_plusminus, XK_twosuperior, XK_threesuperior,
+ XK_acute, XK_mu, XK_paragraph, XK_periodcentered,
+ XK_cedilla, XK_onesuperior, XK_masculine, XK_guillemotright,
+ XK_onequarter, XK_onehalf, XK_threequarters,XK_questiondown,
+ XK_Agrave, XK_Aacute, XK_Acircumflex, XK_Atilde,
+ XK_Adiaeresis, XK_Aring, XK_AE, XK_Ccedilla,
+ XK_Egrave, XK_Eacute, XK_Ecircumflex, XK_Ediaeresis,
+ XK_Igrave, XK_Iacute, XK_Icircumflex, XK_Idiaeresis,
+ XK_ETH, XK_Ntilde, XK_Ograve, XK_Oacute,
+ XK_Ocircumflex, XK_Otilde, XK_Odiaeresis, XK_multiply,
+ XK_Ooblique, XK_Ugrave, XK_Uacute, XK_Ucircumflex,
+ XK_Udiaeresis, XK_Yacute, XK_THORN, XK_ssharp,
+ XK_agrave, XK_aacute, XK_acircumflex, XK_atilde,
+ XK_adiaeresis, XK_aring, XK_ae, XK_ccedilla,
+ XK_egrave, XK_eacute, XK_ecircumflex, XK_ediaeresis,
+ XK_igrave, XK_iacute, XK_icircumflex, XK_idiaeresis,
+ XK_eth, XK_ntilde, XK_ograve, XK_oacute,
+ XK_ocircumflex, XK_otilde, XK_odiaeresis, XK_division,
+ XK_oslash, XK_ugrave, XK_uacute, XK_ucircumflex,
+ XK_udiaeresis, XK_yacute, XK_thorn, XK_ydiaeresis
+};
+
+/*
+ * Maps the AT keycodes to Linux keycodes
+ */
+static unsigned char at2lnx[NUM_KEYCODES] =
+{
+ 0x01, /* KEY_Escape */ 0x02, /* KEY_1 */
+ 0x03, /* KEY_2 */ 0x04, /* KEY_3 */
+ 0x05, /* KEY_4 */ 0x06, /* KEY_5 */
+ 0x07, /* KEY_6 */ 0x08, /* KEY_7 */
+ 0x09, /* KEY_8 */ 0x0a, /* KEY_9 */
+ 0x0b, /* KEY_0 */ 0x0c, /* KEY_Minus */
+ 0x0d, /* KEY_Equal */ 0x0e, /* KEY_BackSpace */
+ 0x0f, /* KEY_Tab */ 0x10, /* KEY_Q */
+ 0x11, /* KEY_W */ 0x12, /* KEY_E */
+ 0x13, /* KEY_R */ 0x14, /* KEY_T */
+ 0x15, /* KEY_Y */ 0x16, /* KEY_U */
+ 0x17, /* KEY_I */ 0x18, /* KEY_O */
+ 0x19, /* KEY_P */ 0x1a, /* KEY_LBrace */
+ 0x1b, /* KEY_RBrace */ 0x1c, /* KEY_Enter */
+ 0x1d, /* KEY_LCtrl */ 0x1e, /* KEY_A */
+ 0x1f, /* KEY_S */ 0x20, /* KEY_D */
+ 0x21, /* KEY_F */ 0x22, /* KEY_G */
+ 0x23, /* KEY_H */ 0x24, /* KEY_J */
+ 0x25, /* KEY_K */ 0x26, /* KEY_L */
+ 0x27, /* KEY_SemiColon */ 0x28, /* KEY_Quote */
+ 0x29, /* KEY_Tilde */ 0x2a, /* KEY_ShiftL */
+ 0x2b, /* KEY_BSlash */ 0x2c, /* KEY_Z */
+ 0x2d, /* KEY_X */ 0x2e, /* KEY_C */
+ 0x2f, /* KEY_V */ 0x30, /* KEY_B */
+ 0x31, /* KEY_N */ 0x32, /* KEY_M */
+ 0x33, /* KEY_Comma */ 0x34, /* KEY_Period */
+ 0x35, /* KEY_Slash */ 0x36, /* KEY_ShiftR */
+ 0x37, /* KEY_KP_Multiply */ 0x38, /* KEY_Alt */
+ 0x39, /* KEY_Space */ 0x3a, /* KEY_CapsLock */
+ 0x3b, /* KEY_F1 */ 0x3c, /* KEY_F2 */
+ 0x3d, /* KEY_F3 */ 0x3e, /* KEY_F4 */
+ 0x3f, /* KEY_F5 */ 0x40, /* KEY_F6 */
+ 0x41, /* KEY_F7 */ 0x42, /* KEY_F8 */
+ 0x43, /* KEY_F9 */ 0x44, /* KEY_F10 */
+ 0x45, /* KEY_NumLock */ 0x46, /* KEY_ScrollLock */
+ 0x47, /* KEY_KP_7 */ 0x48, /* KEY_KP_8 */
+ 0x49, /* KEY_KP_9 */ 0x4a, /* KEY_KP_Minus */
+ 0x4b, /* KEY_KP_4 */ 0x4c, /* KEY_KP_5 */
+ 0x4d, /* KEY_KP_6 */ 0x4e, /* KEY_KP_Plus */
+ 0x4f, /* KEY_KP_1 */ 0x50, /* KEY_KP_2 */
+ 0x51, /* KEY_KP_3 */ 0x52, /* KEY_KP_0 */
+ 0x53, /* KEY_KP_Decimal */ 0x54, /* KEY_SysReqest */
+ 0x00, /* 0x55 */ 0x56, /* KEY_Less */
+ 0x57, /* KEY_F11 */ 0x58, /* KEY_F12 */
+ 0x66, /* KEY_Home */ 0x67, /* KEY_Up */
+ 0x68, /* KEY_PgUp */ 0x69, /* KEY_Left */
+ 0x5d, /* KEY_Begin */ 0x6a, /* KEY_Right */
+ 0x6b, /* KEY_End */ 0x6c, /* KEY_Down */
+ 0x6d, /* KEY_PgDown */ 0x6e, /* KEY_Insert */
+ 0x6f, /* KEY_Delete */ 0x60, /* KEY_KP_Enter */
+ 0x61, /* KEY_RCtrl */ 0x77, /* KEY_Pause */
+ 0x63, /* KEY_Print */ 0x62, /* KEY_KP_Divide */
+ 0x64, /* KEY_AltLang */ 0x65, /* KEY_Break */
+ 0x00, /* KEY_LMeta */ 0x00, /* KEY_RMeta */
+ 0x7A, /* KEY_Menu/FOCUS_PF11*/0x00, /* 0x6e */
+ 0x7B, /* FOCUS_PF12 */ 0x00, /* 0x70 */
+ 0x00, /* 0x71 */ 0x00, /* 0x72 */
+ 0x59, /* FOCUS_PF2 */ 0x78, /* FOCUS_PF9 */
+ 0x00, /* 0x75 */ 0x00, /* 0x76 */
+ 0x5A, /* FOCUS_PF3 */ 0x5B, /* FOCUS_PF4 */
+ 0x5C, /* FOCUS_PF5 */ 0x5D, /* FOCUS_PF6 */
+ 0x5E, /* FOCUS_PF7 */ 0x5F, /* FOCUS_PF8 */
+ 0x7C, /* JAP_86 */ 0x79, /* FOCUS_PF10 */
+ 0x00, /* 0x7f */
+};
+
+/** Create a private structure for use within this file. */
+pointer kbdLinuxCreatePrivate(DeviceIntPtr pKeyboard)
+{
+ myPrivate *priv = calloc(1, sizeof(*priv));
+ priv->fd = -1;
+ priv->pKeyboard = pKeyboard;
+ return priv;
+}
+
+/** Destroy a private structure. */
+void kbdLinuxDestroyPrivate(pointer priv)
+{
+ free(priv);
+}
+
+/** Ring the bell.
+ *
+ * Note: we completely ignore the \a volume, since Linux's ioctl()
+ * interface does not provide a way to control it. If it did, the XBell
+ * manpage tells how the actual volume is a function of the percent and
+ * the (base) volume.
+ *
+ * Note that most of the other PC-based bell drivers compute the
+ * duration for KDMKTONE as a function of the volume and the duration.
+ * For some drivers, the duration is only measured in mS if the volume
+ * is 50, and is scaled by the volume for other values. This seems
+ * confusing and possibly incorrect (the xset man page says that the
+ * bell will be "as closely as it can to the user's specifications" --
+ * if we ignore the volume and set the duration correctly, then we'll
+ * get one parameter "wrong" -- but if we use the volume to scale the
+ * duration, then we'll get both parameters "wrong"). */
+void kbdLinuxBell(DevicePtr pDev, int percent,
+ int volume, int pitch, int duration)
+{
+ GETPRIV;
+
+ if (duration && pitch) {
+ ioctl(priv->fd,
+ KDMKTONE,
+ ((1193190 / pitch) & 0xffff) /* Low bits specify cycle time */
+ | (duration << 16)); /* High bits are duration in msec */
+ }
+}
+
+/** Set the LEDs. */
+void kbdLinuxCtrl(DevicePtr pDev, KeybdCtrl *ctrl)
+{
+ GETPRIV;
+
+ ioctl(priv->fd, KDSETLED, ctrl->leds & 0x07);
+}
+
+static int kbdLinuxGetFreeVTNumber(void)
+{
+ int fd = -1;
+ int vtno;
+ int i;
+ const char *tty0[] = { "/dev/tty0", "/dev/vc/0", NULL };
+
+ for (i = 0; tty0[i]; i++)
+ if ((fd = open(tty0[i], O_WRONLY, 0)) >= 0) break;
+ if (fd < 0)
+ FATAL1("kbdLinuxGetFreeVTNumber: Cannot open tty0 (%s)\n",
+ strerror(errno));
+ if (ioctl(fd, VT_OPENQRY, &vtno) < 0 || vtno < 0)
+ FATAL0("kbdLinuxGetFreeVTNumber: Cannot find a free VT\n");
+ return vtno;
+}
+
+static int kbdLinuxOpenVT(int vtno)
+{
+ int fd = -1;
+ int i;
+ const char *vcs[] = { "/dev/vc/%d", "/dev/tty%d", NULL };
+ char name[64]; /* RATS: Only used in XmuSnprintf */
+
+ for (i = 0; vcs[i]; i++) {
+ XmuSnprintf(name, sizeof(name), vcs[i], vtno);
+ if ((fd = open(name, O_RDWR | O_NONBLOCK, 0)) >= 0) break;
+ }
+ if (fd < 0)
+ FATAL2("kbdLinuxOpenVT: Cannot open VT %d (%s)\n",
+ vtno, strerror(errno));
+ return fd;
+}
+
+static int kbdLinuxGetCurrentVTNumber(int fd)
+{
+ struct vt_stat vts;
+
+ if (!ioctl(fd, VT_GETSTATE, &vts)) return vts.v_active;
+ return -1;
+}
+
+static int kbdLinuxActivate(int fd, int vtno, int setSig);
+
+/** Currently unused hook called prior to an VT switch. */
+void kbdLinuxVTPreSwitch(pointer p)
+{
+}
+
+/** Currently unused hook called after returning from a VT switch. */
+void kbdLinuxVTPostSwitch(pointer p)
+{
+}
+
+/** Tell the operating system to switch to \a vt. The \a switch_return
+ * function is called with the \a switch_return_data when the VT is
+ * switched back to the pre-switch VT (i.e., the user returns to the DMX
+ * session). */
+int kbdLinuxVTSwitch(pointer p, int vt,
+ void (*switch_return)(pointer),
+ pointer switch_return_data)
+{
+ myPrivate *priv = p;
+
+ if (priv->switched) FATAL0("kbdLinuxVTSwitch: already switched...\n");
+ if (priv->vtno == vt) return 0;
+
+ PRIV = priv;
+ priv->switched = 0; /* Will switch to 1 in handler */
+ priv->switch_return = switch_return;
+ priv->switch_return_data = switch_return_data;
+ kbdLinuxActivate(priv->fd, vt, 0);
+ return 1;
+}
+
+/* RATS: This function is only ever used to handle SIGUSR1. */
+static void kbdLinuxVTSignalHandler(int sig)
+{
+ myPrivate *priv = PRIV;
+
+ signal(sig, kbdLinuxVTSignalHandler);
+ if (priv) {
+ ioctl(priv->fd, VT_RELDISP, VT_ACKACQ);
+ priv->switched = !priv->switched;
+ LOG2("kbdLinuxVTSignalHandler: got signal %d, switched = %d\n",
+ sig, priv->switched);
+ if (!priv->switched && priv->switch_return)
+ priv->switch_return(priv->switch_return_data);
+ }
+}
+
+static int kbdLinuxActivate(int fd, int vtno, int setSig)
+{
+ int result;
+ struct vt_mode VT;
+
+ SYSCALL(result = ioctl(fd, VT_ACTIVATE, vtno));
+ if (result) FATAL0("kbdLinuxActivate: VT_ACTIVATE failed\n");
+ SYSCALL(result = ioctl(fd, VT_WAITACTIVE, vtno));
+ if (result) FATAL0("kbdLinuxActivate: VT_WAITACTIVE failed\n");
+ if (setSig) {
+ SYSCALL(result = ioctl(fd, VT_GETMODE, &VT));
+ if (result < 0) FATAL0("kbdLinuxActivate: VT_GETMODE failed\n");
+ VT.mode = VT_PROCESS;
+ VT.relsig = SIGUSR1;
+ VT.acqsig = SIGUSR1;
+ if (ioctl(fd, VT_SETMODE, &VT))
+ FATAL0("kbdLinuxActivate: VT_SETMODE VT_PROCESS failed\n");
+ signal(SIGUSR1, kbdLinuxVTSignalHandler);
+ }
+ return Success;
+}
+
+static void kbdLinuxOpenConsole(DevicePtr pDev)
+{
+ GETPRIV;
+ const char *msg = MESSAGE;
+
+ if (priv->fd >= 0) return;
+ priv->vtno = kbdLinuxGetFreeVTNumber();
+ priv->fd = kbdLinuxOpenVT(priv->vtno);
+ priv->vtcurrent = kbdLinuxGetCurrentVTNumber(priv->fd);
+ LOG2("kbdLinuxOpenConsole: current VT %d; using free VT %d\n",
+ priv->vtcurrent, priv->vtno);
+ kbdLinuxActivate(priv->fd, priv->vtno, 1);
+ ioctl(priv->fd, KDSETMODE, KD_GRAPHICS); /* To turn off gpm */
+ if (msg) write(priv->fd, msg, strlen(msg));
+}
+
+static void kbdLinuxCloseConsole(DevicePtr pDev)
+{
+ GETPRIV;
+ struct vt_mode VT;
+ const char *msg = FINALMESSAGE;
+
+ if (priv->fd < 0) return;
+
+ ioctl(priv->fd, KDSETMODE, KD_TEXT);
+ if (msg) write(priv->fd, msg, strlen(msg));
+ if (ioctl(priv->fd, VT_GETMODE, &VT) != -1) {
+ VT.mode = VT_AUTO;
+ ioctl(priv->fd, VT_SETMODE, &VT);
+ }
+
+ LOG1("kbdLinuxCloseConsole: switching to VT %d\n", priv->vtcurrent);
+ if (priv->vtcurrent >= 0) kbdLinuxActivate(priv->fd, priv->vtcurrent, 0);
+
+ close(priv->fd);
+ priv->fd = -1;
+}
+
+/** Initialize the \a pDev as a Linux keyboard. */
+void kbdLinuxInit(DevicePtr pDev)
+{
+ GETPRIV;
+
+ if (priv->fd <= 0) kbdLinuxOpenConsole(pDev);
+
+ ioctl(priv->fd, KDGKBMODE, &priv->kbdtrans);
+ if (tcgetattr(priv->fd, &priv->kbdtty) < 0)
+ FATAL1("kbdLinuxInit: tcgetattr failed (%s)\n", strerror(errno));
+}
+
+static int kbdLinuxPrefix0Mapping(unsigned char *scanCode)
+{
+ /* Table from xfree86/common/xf86Events.c */
+ switch (*scanCode) {
+ case KEY_KP_7: *scanCode = KEY_Home; break; /* curs home */
+ case KEY_KP_8: *scanCode = KEY_Up; break; /* curs up */
+ case KEY_KP_9: *scanCode = KEY_PgUp; break; /* curs pgup */
+ case KEY_KP_4: *scanCode = KEY_Left; break; /* curs left */
+ case KEY_KP_5: *scanCode = KEY_Begin; break; /* curs begin */
+ case KEY_KP_6: *scanCode = KEY_Right; break; /* curs right */
+ case KEY_KP_1: *scanCode = KEY_End; break; /* curs end */
+ case KEY_KP_2: *scanCode = KEY_Down; break; /* curs down */
+ case KEY_KP_3: *scanCode = KEY_PgDown; break; /* curs pgdown */
+ case KEY_KP_0: *scanCode = KEY_Insert; break; /* curs insert */
+ case KEY_KP_Decimal: *scanCode = KEY_Delete; break; /* curs delete */
+ case KEY_Enter: *scanCode = KEY_KP_Enter; break; /* keypad enter */
+ case KEY_LCtrl: *scanCode = KEY_RCtrl; break; /* right ctrl */
+ case KEY_KP_Multiply: *scanCode = KEY_Print; break; /* print */
+ case KEY_Slash: *scanCode = KEY_KP_Divide; break; /* keyp divide */
+ case KEY_Alt: *scanCode = KEY_AltLang; break; /* right alt */
+ case KEY_ScrollLock: *scanCode = KEY_Break; break; /* curs break */
+ case 0x5b: *scanCode = KEY_LMeta; break;
+ case 0x5c: *scanCode = KEY_RMeta; break;
+ case 0x5d: *scanCode = KEY_Menu; break;
+ case KEY_F3: *scanCode = KEY_F13; break;
+ case KEY_F4: *scanCode = KEY_F14; break;
+ case KEY_F5: *scanCode = KEY_F15; break;
+ case KEY_F6: *scanCode = KEY_F16; break;
+ case KEY_F7: *scanCode = KEY_F17; break;
+ case KEY_KP_Plus: *scanCode = KEY_KP_DEC; break;
+ /*
+ * Ignore virtual shifts (E0 2A, E0 AA, E0 36, E0 B6)
+ */
+ case 0x2A:
+ case 0x36:
+ return 1;
+ default:
+ /*
+ * "Internet" keyboards are generating lots of new codes.
+ * Let them pass. There is little consistency between them,
+ * so don't bother with symbolic names at this level.
+ */
+ scanCode += 0x78;
+ }
+ return 0;
+}
+
+static int kbdLinuxPrefixMapping(myPrivate *priv, unsigned char *scanCode)
+{
+ int pressed = *scanCode & 0x80;
+ unsigned char code = *scanCode & 0x7f;
+
+ /* If we don't have a prefix, check for one */
+ if (!priv->prefix) {
+ switch (code) {
+ case KEY_Prefix0:
+ case KEY_Prefix1:
+ priv->prefix = code;
+ return 1;
+ }
+ return 0; /* No change */
+ }
+
+ /* We have a prefix from the last scanCode */
+ switch (priv->prefix) {
+ case KEY_Prefix0:
+ priv->prefix = 0;
+ if (kbdLinuxPrefix0Mapping(&code)) return 1; /* Skip sequence */
+ break;
+ case KEY_Prefix1:
+ priv->prefix = (code = KEY_LCtrl) ? KEY_LCtrl : 0;
+ return 1; /* Use new prefix */
+ case KEY_LCtrl:
+ priv->prefix = 0;
+ if (code != KEY_NumLock) return 1; /* Skip sequence*/
+ code = KEY_Pause;
+ break;
+ }
+
+ *scanCode = code | (pressed ? 0x80 : 0x00);
+ return 0; /* Use old scanCode */
+}
+
+static void kbdLinuxConvert(DevicePtr pDev,
+ unsigned char scanCode,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ GETPRIV;
+ XkbSrvInfoPtr xkbi = priv->pKeyboard->key->xkbInfo;
+ int type;
+ KeySym keySym = NoSymbol;
+ int keyCode;
+ int switching;
+
+ /* Do special PC/AT prefix mapping -- may change scanCode! */
+ if (kbdLinuxPrefixMapping(priv, &scanCode)) return;
+
+ type = (scanCode & 0x80) ? KeyRelease : KeyPress;
+ keyCode = (scanCode & 0x7f) + MIN_KEYCODE;
+
+ /* Handle repeats */
+
+ if (keyCode >= xkbi->desc->min_key_code &&
+ keyCode <= xkbi->desc->max_key_code) {
+
+ int effectiveGroup = XkbGetEffectiveGroup(xkbi,
+ &xkbi->state,
+ scanCode);
+ keySym = XkbKeySym(xkbi->desc, scanCode, effectiveGroup);
+#if 0
+ switch (keySym) {
+ case XK_Num_Lock:
+ case XK_Scroll_Lock:
+ case XK_Shift_Lock:
+ case XK_Caps_Lock:
+ /* Ignore releases and all but first press */
+ if (kbdLinuxModIgnore(priv, &xE, keySym)) return;
+ if (kbdLinuxKeyDown(priv, &xE)) xE.u.u.type = KeyRelease;
+ else xE.u.u.type = KeyPress;
+ break;
+ }
+#endif
+
+ /* If key is already down, ignore or autorepeat */
+ if (type == KeyPress && kbdLinuxKeyDown(priv, keyCode)) {
+ KbdFeedbackClassRec *feed = priv->pKeyboard->kbdfeed;
+
+ /* No auto-repeat? */
+ if ((feed && !feed->ctrl.autoRepeat)
+ || priv->pKeyboard->key->xkbInfo->desc->map->modmap[keyCode]
+ || (feed
+ && !(feed->ctrl.autoRepeats[keyCode >> 3]
+ & (1 << (keyCode & 7))))) return; /* Ignore */
+
+ /* Do auto-repeat */
+ enqueue(pDev, KeyRelease, keyCode, keySym, NULL, block);
+ type = KeyPress;
+ }
+
+ /* If key is already up, ignore */
+ if (type == KeyRelease && !kbdLinuxKeyDown(priv, keyCode)) return;
+ }
+
+ switching = 0;
+ if (checkspecial && type == KeyPress)
+ switching = checkspecial(pDev, keySym);
+ if (!switching) {
+ if (enqueue)
+ enqueue(pDev, type, keyCode, keySym, NULL, block);
+ kbdLinuxKeyState(priv, type, keyCode); /* Update our state bitmap */
+ }
+}
+
+/** Read an event from the \a pDev device. If the event is a motion
+ * event, enqueue it with the \a motion function. Otherwise, check for
+ * special keys with the \a checkspecial function and enqueue the event
+ * with the \a enqueue function. The \a block type is passed to the
+ * functions so that they may block SIGIO handling as appropriate to the
+ * caller of this function. */
+void kbdLinuxRead(DevicePtr pDev,
+ MOTIONPROC motion,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ GETPRIV;
+ unsigned char buf[256]; /* RATS: Only used in length-limited call */
+ unsigned char *pt;
+ int n;
+
+ while ((n = read(priv->fd, buf, sizeof(buf))) > 0)
+ for (pt = buf; n; --n, ++pt)
+ kbdLinuxConvert(pDev, *pt, enqueue, checkspecial, block);
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int kbdLinuxOn(DevicePtr pDev)
+{
+ GETPRIV;
+ struct termios nTty;
+
+ ioctl(priv->fd, KDSKBMODE, K_RAW);
+
+ nTty = priv->kbdtty;
+ nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
+ nTty.c_oflag = 0;
+ nTty.c_cflag = CREAD | CS8;
+ nTty.c_lflag = 0;
+ nTty.c_cc[VTIME] = 0;
+ nTty.c_cc[VMIN] = 1;
+ cfsetispeed(&nTty, B9600);
+ cfsetospeed(&nTty, B9600);
+ if (tcsetattr(priv->fd, TCSANOW, &nTty) < 0)
+ FATAL1("kbdLinuxOn: tcsetattr failed (%s)\n", strerror(errno));
+ return priv->fd;
+}
+
+/** Turn \a pDev off (i.e., stop taking input from \a pDev). */
+void kbdLinuxOff(DevicePtr pDev)
+{
+ GETPRIV;
+
+ ioctl(priv->fd, KDSKBMODE, priv->kbdtrans);
+ tcsetattr(priv->fd, TCSANOW, &priv->kbdtty);
+ kbdLinuxCloseConsole(pDev);
+}
+
+
+static void kbdLinuxReadKernelMapping(int fd, KeySymsPtr pKeySyms)
+{
+ KeySym *k;
+ int i;
+ int maxkey;
+ static unsigned char tbl[GLYPHS_PER_KEY] = { /* RATS: Use ok */
+ 0, /* unshifted */
+ 1, /* shifted */
+ 0, /* modeswitch unshifted */
+ 0 /* modeswitch shifted */
+ };
+
+ /*
+ * Read the mapping from the kernel.
+ * Since we're still using the XFree86 scancode->AT keycode mapping
+ * routines, we need to convert the AT keycodes to Linux keycodes,
+ * then translate the Linux keysyms into X keysyms.
+ *
+ * First, figure out which tables to use for the modeswitch columns
+ * above, from the XF86Config fields.
+ */
+ tbl[2] = 8; /* alt */
+ tbl[3] = tbl[2] | 1;
+
+#if 00/*BP*/
+ k = map+GLYPHS_PER_KEY;
+#else
+ ErrorF("kbdLinuxReadKernelMapping() is broken/no-op'd\n");
+ return;
+#endif
+ maxkey = NUM_AT2LNX;
+
+ for (i = 0; i < maxkey; ++i) {
+ struct kbentry kbe;
+ int j;
+
+ kbe.kb_index = at2lnx[i];
+
+ for (j = 0; j < GLYPHS_PER_KEY; ++j, ++k) {
+ unsigned short kval;
+
+ *k = NoSymbol;
+
+ kbe.kb_table = tbl[j];
+ if (kbe.kb_index == 0 || ioctl(fd, KDGKBENT, &kbe)) continue;
+
+ kval = KVAL(kbe.kb_value);
+ switch (KTYP(kbe.kb_value)) {
+ case KT_LATIN:
+ case KT_LETTER: *k = linux_to_x[kval]; break;
+ case KT_FN:
+ if (kval <= 19) *k = XK_F1 + kval;
+ else switch (kbe.kb_value) {
+ case K_FIND: *k = XK_Home; /* or XK_Find */ break;
+ case K_INSERT: *k = XK_Insert; break;
+ case K_REMOVE: *k = XK_Delete; break;
+ case K_SELECT: *k = XK_End; /* or XK_Select */ break;
+ case K_PGUP: *k = XK_Prior; break;
+ case K_PGDN: *k = XK_Next; break;
+ case K_HELP: *k = XK_Help; break;
+ case K_DO: *k = XK_Execute; break;
+ case K_PAUSE: *k = XK_Pause; break;
+ case K_MACRO: *k = XK_Menu; break;
+ default: break;
+ }
+ break;
+ case KT_SPEC:
+ switch (kbe.kb_value) {
+ case K_ENTER: *k = XK_Return; break;
+ case K_BREAK: *k = XK_Break; break;
+ case K_CAPS: *k = XK_Caps_Lock; break;
+ case K_NUM: *k = XK_Num_Lock; break;
+ case K_HOLD: *k = XK_Scroll_Lock; break;
+ case K_COMPOSE: *k = XK_Multi_key; break;
+ default: break;
+ }
+ break;
+ case KT_PAD:
+ switch (kbe.kb_value) {
+ case K_PPLUS: *k = XK_KP_Add; break;
+ case K_PMINUS: *k = XK_KP_Subtract; break;
+ case K_PSTAR: *k = XK_KP_Multiply; break;
+ case K_PSLASH: *k = XK_KP_Divide; break;
+ case K_PENTER: *k = XK_KP_Enter; break;
+ case K_PCOMMA: *k = XK_KP_Separator; break;
+ case K_PDOT: *k = XK_KP_Decimal; break;
+ case K_PPLUSMINUS: *k = XK_KP_Subtract; break;
+ default: if (kval <= 9) *k = XK_KP_0 + kval; break;
+ }
+ break;
+ case KT_DEAD:
+ /* KT_DEAD keys are for accelerated diacritical creation. */
+ switch (kbe.kb_value) {
+ case K_DGRAVE: *k = XK_dead_grave; break;
+ case K_DACUTE: *k = XK_dead_acute; break;
+ case K_DCIRCM: *k = XK_dead_circumflex; break;
+ case K_DTILDE: *k = XK_dead_tilde; break;
+ case K_DDIERE: *k = XK_dead_diaeresis; break;
+ }
+ break;
+ case KT_CUR:
+ switch (kbe.kb_value) {
+ case K_DOWN: *k = XK_Down; break;
+ case K_LEFT: *k = XK_Left; break;
+ case K_RIGHT: *k = XK_Right; break;
+ case K_UP: *k = XK_Up; break;
+ }
+ break;
+ case KT_SHIFT:
+ switch (kbe.kb_value) {
+ case K_ALTGR: *k = XK_Alt_R; break;
+ case K_ALT:
+ *k = (kbe.kb_index == 0x64 ? XK_Alt_R : XK_Alt_L);
+ break;
+ case K_CTRL:
+ *k = (kbe.kb_index == 0x61 ? XK_Control_R : XK_Control_L);
+ break;
+ case K_CTRLL: *k = XK_Control_L; break;
+ case K_CTRLR: *k = XK_Control_R; break;
+ case K_SHIFT:
+ *k = (kbe.kb_index == 0x36 ? XK_Shift_R : XK_Shift_L);
+ break;
+ case K_SHIFTL: *k = XK_Shift_L; break;
+ case K_SHIFTR: *k = XK_Shift_R; break;
+ default: break;
+ }
+ break;
+ case KT_ASCII:
+ /* KT_ASCII keys accumulate a 3 digit decimal number that
+ * gets emitted when the shift state changes. We can't
+ * emulate that.
+ */
+ break;
+ case KT_LOCK:
+ if (kbe.kb_value == K_SHIFTLOCK) *k = XK_Shift_Lock;
+ break;
+ default: break;
+ }
+ }
+
+ if (k[-1] == k[-2]) k[-1] = NoSymbol;
+ if (k[-2] == k[-3]) k[-2] = NoSymbol;
+ if (k[-3] == k[-4]) k[-3] = NoSymbol;
+ if (k[-4] == k[-2] && k[-3] == k[-1]) k[-2] = k[-1] = NoSymbol;
+ if (k[-1] == k[-4] && k[-2] == k[-3]
+ && k[-2] == NoSymbol) k[-1] = NoSymbol;
+ }
+}
+
+static void kbdLinuxGetMap(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)
+{
+ GETPRIV;
+ KeySym *k, *mapCopy;
+ char type;
+ int i;
+
+#if 00/*BP*/
+ mapCopy = malloc(sizeof(map));
+ memcpy(mapCopy, map, sizeof(map));
+#else
+ ErrorF("kbdLinuxGetMap() is broken/no-op'd\n");
+ return;
+#endif
+
+ kbdLinuxReadKernelMapping(priv->fd, pKeySyms);
+
+ /* compute the modifier map */
+ for (i = 0; i < MAP_LENGTH; i++)
+ pModMap[i] = NoSymbol; /* make sure it is restored */
+
+ for (k = mapCopy, i = MIN_KEYCODE;
+ i < NUM_KEYCODES + MIN_KEYCODE;
+ i++, k += 4) {
+ switch(*k) {
+ case XK_Shift_L:
+ case XK_Shift_R: pModMap[i] = ShiftMask; break;
+ case XK_Control_L:
+ case XK_Control_R: pModMap[i] = ControlMask; break;
+ case XK_Caps_Lock: pModMap[i] = LockMask; break;
+ case XK_Alt_L:
+ case XK_Alt_R: pModMap[i] = AltMask; break;
+ case XK_Num_Lock: pModMap[i] = NumLockMask; break;
+ case XK_Scroll_Lock: pModMap[i] = ScrollLockMask; break;
+ case XK_Kana_Lock:
+ case XK_Kana_Shift: pModMap[i] = KanaMask; break;
+ case XK_Mode_switch: pModMap[i] = AltLangMask; break;
+ }
+ }
+
+ priv->kbdType = (ioctl(priv->fd, KDGKBTYPE, &type) < 0) ? KB_101 : type;
+
+ pKeySyms->map = mapCopy; /* Must be XFree'able */
+ pKeySyms->mapWidth = GLYPHS_PER_KEY;
+ pKeySyms->minKeyCode = MIN_KEYCODE;
+ pKeySyms->maxKeyCode = MAX_KEYCODE;
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void kbdLinuxGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ info->keyboard = 1;
+ info->keyClass = 1;
+ kbdLinuxGetMap(pDev, &info->keySyms, info->modMap);
+ info->focusClass = 1;
+ info->kbdFeedbackClass = 1;
+}
diff --git a/hw/dmx/input/lnx-keyboard.h b/hw/dmx/input/lnx-keyboard.h
new file mode 100644
index 0000000..e36a504
--- /dev/null
+++ b/hw/dmx/input/lnx-keyboard.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to Linux keyboard driver. \see lnx-keyboard.c */
+
+#ifndef _LNX_KEYBOARD_H_
+#define _LNX_KEYBOARD_H_
+
+extern pointer kbdLinuxCreatePrivate(DeviceIntPtr pKeyboard);
+extern void kbdLinuxDestroyPrivate(pointer private);
+
+extern void kbdLinuxInit(DevicePtr pDev);
+extern void kbdLinuxGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern int kbdLinuxOn(DevicePtr pDev);
+extern void kbdLinuxOff(DevicePtr pDev);
+
+extern void kbdLinuxVTPreSwitch(pointer p);
+extern void kbdLinuxVTPostSwitch(pointer p);
+extern int kbdLinuxVTSwitch(pointer p, int vt,
+ dmxVTSwitchReturnProcPtr switch_return,
+ pointer switch_return_data);
+
+extern void kbdLinuxRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+
+extern void kbdLinuxCtrl(DevicePtr pDev, KeybdCtrl *ctrl);
+extern void kbdLinuxBell(DevicePtr pDev, int percent,
+ int volume, int pitch, int duration);
+#endif
diff --git a/hw/dmx/input/lnx-ms.c b/hw/dmx/input/lnx-ms.c
new file mode 100644
index 0000000..ee18707
--- /dev/null
+++ b/hw/dmx/input/lnx-ms.c
@@ -0,0 +1,321 @@
+/* Portions of this file were derived from the following files:
+ *
+ **********************************************************************
+ *
+ * Xserver/hw/kdrive/linux/ms.c
+ *
+ * Copyright (c) 2001 by Juliusz Chroboczek
+ * Copyright (c) 1999 by Keith Packard
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+/*
+ * Copyright 2001-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This code implements a low-level device driver for a serial MS mouse.
+ * The code is derived from code by Juliusz Chroboczek and Keith Packard
+ * (see the source code for complete references). */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "inputstr.h"
+#include <X11/Xos.h>
+#include <errno.h>
+#include <termios.h>
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "dmxinputinit.h"
+#include "lnx-ms.h"
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define BLOCK DMXBlockType
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+/* Private area for MS mouse devices. */
+typedef struct _myPrivate {
+ DeviceIntPtr pMouse;
+ int fd;
+ struct termios tty;
+ enum {
+ button1 = 0x0001,
+ button2 = 0x0002,
+ button3 = 0x0004,
+ button4 = 0x0008,
+ button5 = 0x0010
+ } buttons;
+} myPrivate;
+
+static int msLinuxReadBytes(int fd, unsigned char *buf, int len, int min)
+{
+ int n, tot;
+ fd_set set;
+ struct timeval tv;
+
+ tot = 0;
+ while (len) {
+ n = read(fd, buf, len);
+ if (n > 0) {
+ tot += n;
+ buf += n;
+ len -= n;
+ }
+ if (tot % min == 0) break;
+ FD_ZERO(&set);
+ FD_SET(fd, &set);
+ tv.tv_sec = 0;
+ tv.tv_usec = 100 * 1000;
+ n = select(fd + 1, &set, 0, 0, &tv);
+ if (n <= 0) break;
+ }
+ return tot;
+}
+
+static void msLinuxButton(DevicePtr pDev, ENQUEUEPROC enqueue, int buttons,
+ BLOCK block)
+{
+ GETPRIV;
+
+#define PRESS(b) \
+ do { \
+ enqueue(pDev, ButtonPress, 0, 0, NULL, block); \
+ } while (0)
+
+#define RELEASE(b) \
+ do { \
+ enqueue(pDev, ButtonRelease, 0, 0, NULL, block); \
+ } while (0)
+
+ if ((buttons & button1) && !(priv->buttons & button1)) PRESS(1);
+ if (!(buttons & button1) && (priv->buttons & button1)) RELEASE(1);
+
+ if ((buttons & button2) && !(priv->buttons & button2)) PRESS(2);
+ if (!(buttons & button2) && (priv->buttons & button2)) RELEASE(2);
+
+ if ((buttons & button3) && !(priv->buttons & button3)) PRESS(3);
+ if (!(buttons & button3) && (priv->buttons & button3)) RELEASE(3);
+
+ if ((buttons & button4) && !(priv->buttons & button4)) PRESS(4);
+ if (!(buttons & button4) && (priv->buttons & button4)) RELEASE(4);
+
+ if ((buttons & button5) && !(priv->buttons & button5)) PRESS(5);
+ if (!(buttons & button5) && (priv->buttons & button5)) RELEASE(5);
+
+ priv->buttons = buttons;
+}
+
+/** Read an event from the \a pDev device. If the event is a motion
+ * event, enqueue it with the \a motion function. Otherwise, check for
+ * special keys with the \a checkspecial function and enqueue the event
+ * with the \a enqueue function. The \a block type is passed to the
+ * functions so that they may block SIGIO handling as appropriate to the
+ * caller of this function. */
+void msLinuxRead(DevicePtr pDev,
+ MOTIONPROC motion,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ GETPRIV;
+ unsigned char buf[3 * 200]; /* RATS: Use ok */
+ unsigned char *b;
+ int n;
+ int dx, dy, v[2];
+
+ while ((n = msLinuxReadBytes(priv->fd, buf, sizeof(buf), 3)) > 0) {
+ b = buf;
+ while (n >= 3) {
+ dx = (char)(((b[0] & 0x03) << 6) | (b[1] & 0x3f));
+ dy = (char)(((b[0] & 0x0c) << 4) | (b[2] & 0x3f));
+ v[0] = -dx;
+ v[1] = -dy;
+
+ motion(pDev, v, 0, 2, 1, block);
+ msLinuxButton(pDev, enqueue, (((b[0] & 0x10) ? button3 : 0)
+ | ((b[0] & 0x20) ? button1 : 0)),
+ block);
+ n -= 3;
+ b += 3;
+ }
+ }
+}
+
+/** Initialize \a pDev. */
+void msLinuxInit(DevicePtr pDev)
+{
+ GETPRIV;
+ const char *names[] = { "/dev/serialmouse", "/dev/mouse", NULL };
+ int i;
+
+ if (priv->fd >=0) return;
+
+ for (i = 0; names[i]; i++) {
+ if ((priv->fd = open(names[i], O_RDWR | O_NONBLOCK, 0)) >= 0) break;
+ }
+ if (priv->fd < 0)
+ FATAL1("msLinuxInit: Cannot open mouse port (%s)\n",
+ strerror(errno));
+
+ if (!isatty(priv->fd))
+ FATAL1("msLinuxInit: Mouse port %s is not a tty\n", names[i]);
+
+ if (tcgetattr(priv->fd, &priv->tty) < 0)
+ FATAL1("msLinuxInit: tcgetattr failed (%s)\n", strerror(errno));
+
+ write(priv->fd, "*n", 2); /* 1200 baud */
+ usleep(100000);
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int msLinuxOn(DevicePtr pDev)
+{
+ GETPRIV;
+ struct termios nTty;
+
+ if (priv->fd < 0) msLinuxInit(pDev);
+
+ nTty = priv->tty;
+ nTty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR
+ | IGNCR | ICRNL | IXON | IXOFF);
+ nTty.c_oflag &= ~OPOST;
+ nTty.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
+ nTty.c_cflag &= ~(CSIZE | PARENB);
+ nTty.c_cflag |= CS8 | CLOCAL | CSTOPB;
+ nTty.c_cc[VTIME] = 0;
+ nTty.c_cc[VMIN] = 1;
+ cfsetispeed (&nTty, B1200);
+ cfsetospeed (&nTty, B1200);
+ if (tcsetattr(priv->fd, TCSANOW, &nTty) < 0)
+ FATAL1("msLinuxInit: tcsetattr failed (%s)\n", strerror(errno));
+ write(priv->fd, "*V", 2); /* 2 button 3 byte protocol */
+ return priv->fd;
+}
+
+/** Turn \a pDev off (i.e., stop taking input from \a pDev). */
+void msLinuxOff(DevicePtr pDev)
+{
+ GETPRIV;
+
+ tcsetattr(priv->fd, TCSANOW, &priv->tty);
+ close(priv->fd);
+ priv->fd = -1;
+}
+
+static void msLinuxGetMap(DevicePtr pDev, unsigned char *map, int *nButtons)
+{
+ int i;
+
+ if (nButtons) *nButtons = 3;
+ if (map) for (i = 0; i <= *nButtons; i++) map[i] = i;
+}
+
+/** Currently unused hook called prior to an VT switch. */
+void msLinuxVTPreSwitch(pointer p)
+{
+}
+
+/** Currently unused hook called after returning from a VT switch. */
+void msLinuxVTPostSwitch(pointer p)
+{
+}
+
+/** Create a private structure for use within this file. */
+pointer msLinuxCreatePrivate(DeviceIntPtr pMouse)
+{
+ myPrivate *priv = calloc(1, sizeof(*priv));
+ priv->fd = -1;
+ priv->pMouse = pMouse;
+ return priv;
+}
+
+/** Destroy a private structure. */
+void msLinuxDestroyPrivate(pointer priv)
+{
+ free(priv);
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void msLinuxGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ info->buttonClass = 1;
+ msLinuxGetMap(pDev, info->map, &info->numButtons);
+ info->valuatorClass = 1;
+ info->numRelAxes = 2;
+ info->minval[0] = 0;
+ info->maxval[0] = 0;
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ info->ptrFeedbackClass = 1;
+}
diff --git a/hw/dmx/input/lnx-ms.h b/hw/dmx/input/lnx-ms.h
new file mode 100644
index 0000000..9042fc2
--- /dev/null
+++ b/hw/dmx/input/lnx-ms.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to Linux MS mouse driver. \see lnx-ms.c */
+
+#ifndef _LNX_MS_H_
+#define _LNX_MS_H_
+
+extern pointer msLinuxCreatePrivate(DeviceIntPtr pMouse);
+extern void msLinuxDestroyPrivate(pointer priv);
+extern void msLinuxRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern void msLinuxInit(DevicePtr pDev);
+extern void msLinuxGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern int msLinuxOn(DevicePtr pDev);
+extern void msLinuxOff(DevicePtr pDev);
+extern void msLinuxCtrl(DevicePtr pDev, PtrCtrl *ctrl);
+extern void msLinuxVTPreSwitch(pointer p);
+extern void msLinuxVTPostSwitch(pointer p);
+
+#endif
diff --git a/hw/dmx/input/lnx-ps2.c b/hw/dmx/input/lnx-ps2.c
new file mode 100644
index 0000000..3a220cf
--- /dev/null
+++ b/hw/dmx/input/lnx-ps2.c
@@ -0,0 +1,289 @@
+/* Portions of this file were derived from the following files:
+ *
+ **********************************************************************
+ *
+ * Xserver/hw/kdrive/linux/ps2.c
+ *
+ * Copyright (c) 1999 by Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the 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 Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/*
+ * Copyright 2001,2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This code implements a low-level device driver for a serial MS mouse.
+ * The code is derived from code by Keith Packard (see the source code
+ * for complete references). */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "inputstr.h"
+#include <X11/Xos.h>
+#include <errno.h>
+#include <termios.h>
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "dmxinputinit.h"
+#include "lnx-ps2.h"
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define BLOCK DMXBlockType
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+/* Private area for PS/2 devices. */
+typedef struct _myPrivate {
+ DeviceIntPtr pMouse;
+ int fd;
+ enum {
+ button1 = 0x0001,
+ button2 = 0x0002,
+ button3 = 0x0004,
+ button4 = 0x0008,
+ button5 = 0x0010
+ } buttons;
+} myPrivate;
+
+static int ps2LinuxReadBytes(int fd, unsigned char *buf, int len, int min)
+{
+ int n, tot;
+ fd_set set;
+ struct timeval tv;
+
+ tot = 0;
+ while (len) {
+ n = read(fd, buf, len);
+ if (n > 0) {
+ tot += n;
+ buf += n;
+ len -= n;
+ }
+ if (tot % min == 0) break;
+ FD_ZERO(&set);
+ FD_SET(fd, &set);
+ tv.tv_sec = 0;
+ tv.tv_usec = 100 * 1000;
+ n = select(fd + 1, &set, 0, 0, &tv);
+ if (n <= 0) break;
+ }
+ return tot;
+}
+
+static void ps2LinuxButton(DevicePtr pDev, ENQUEUEPROC enqueue,
+ int buttons, BLOCK block)
+{
+ GETPRIV;
+
+#define PRESS(b) \
+ do { \
+ enqueue(pDev, ButtonPress, 0, 0, NULL, block); \
+ } while (0)
+
+#define RELEASE(b) \
+ do { \
+ enqueue(pDev, ButtonRelease, 0, 0, NULL, block); \
+ } while (0)
+
+ if ((buttons & button1) && !(priv->buttons & button1)) PRESS(1);
+ if (!(buttons & button1) && (priv->buttons & button1)) RELEASE(1);
+
+ if ((buttons & button2) && !(priv->buttons & button2)) PRESS(2);
+ if (!(buttons & button2) && (priv->buttons & button2)) RELEASE(2);
+
+ if ((buttons & button3) && !(priv->buttons & button3)) PRESS(3);
+ if (!(buttons & button3) && (priv->buttons & button3)) RELEASE(3);
+
+ if ((buttons & button4) && !(priv->buttons & button4)) PRESS(4);
+ if (!(buttons & button4) && (priv->buttons & button4)) RELEASE(4);
+
+ if ((buttons & button5) && !(priv->buttons & button5)) PRESS(5);
+ if (!(buttons & button5) && (priv->buttons & button5)) RELEASE(5);
+
+ priv->buttons = buttons;
+}
+
+/** Read an event from the \a pDev device. If the event is a motion
+ * event, enqueue it with the \a motion function. Otherwise, check for
+ * special keys with the \a checkspecial function and enqueue the event
+ * with the \a enqueue function. The \a block type is passed to the
+ * functions so that they may block SIGIO handling as appropriate to the
+ * caller of this function. */
+void ps2LinuxRead(DevicePtr pDev, MOTIONPROC motion,
+ ENQUEUEPROC enqueue, CHECKPROC checkspecial, BLOCK block)
+{
+ GETPRIV;
+ unsigned char buf[3 * 200]; /* RATS: Use ok */
+ unsigned char *b;
+ int n;
+ int dx, dy, v[2];
+
+ while ((n = ps2LinuxReadBytes(priv->fd, buf, sizeof(buf), 3)) > 0) {
+ b = buf;
+ while (n >= 3) {
+ dx = b[1] - ((b[0] & 0x10) ? 256 : 0);
+ dy = -b[2] + ((b[0] & 0x20) ? 256 : 0);
+ v[0] = -dx;
+ v[1] = -dy;
+
+ motion(pDev, v, 0, 2, 1, block);
+ ps2LinuxButton(pDev, enqueue, (((b[0] & 4) ? button2 : 0)
+ | ((b[0] & 2) ? button3 : 0)
+ | ((b[0] & 1) ? button1 : 0)),
+ block);
+ n -= 3;
+ b += 3;
+ }
+ }
+}
+
+/** Initialize \a pDev. */
+void ps2LinuxInit(DevicePtr pDev)
+{
+ GETPRIV;
+ const char *names[] = { "/dev/mouse", "/dev/psaux", NULL };
+ int i;
+
+ if (priv->fd >=0) return;
+
+ for (i = 0; names[i]; i++) {
+ if ((priv->fd = open(names[i], O_RDWR | O_NONBLOCK, 0)) >= 0) break;
+ }
+ if (priv->fd < 0)
+ FATAL1("ps2LinuxInit: Cannot open mouse port (%s)\n",
+ strerror(errno));
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int ps2LinuxOn(DevicePtr pDev)
+{
+ GETPRIV;
+
+ if (priv->fd < 0) ps2LinuxInit(pDev);
+ return priv->fd;
+}
+
+/** Turn \a pDev off (i.e., stop taking input from \a pDev). */
+void ps2LinuxOff(DevicePtr pDev)
+{
+ GETPRIV;
+
+ close(priv->fd);
+ priv->fd = -1;
+}
+
+static void ps2LinuxGetMap(DevicePtr pDev, unsigned char *map, int *nButtons)
+{
+ int i;
+
+ if (nButtons) *nButtons = 3;
+ if (map) for (i = 0; i <= *nButtons; i++) map[i] = i;
+}
+
+/** Currently unused hook called prior to an VT switch. */
+void ps2LinuxVTPreSwitch(pointer p)
+{
+}
+
+/** Currently unused hook called after returning from a VT switch. */
+void ps2LinuxVTPostSwitch(pointer p)
+{
+}
+
+/** Create a private structure for use within this file. */
+pointer ps2LinuxCreatePrivate(DeviceIntPtr pMouse)
+{
+ myPrivate *priv = calloc(1, sizeof(*priv));
+ priv->fd = -1;
+ priv->pMouse = pMouse;
+ return priv;
+}
+
+/** Destroy a private structure. */
+void ps2LinuxDestroyPrivate(pointer priv)
+{
+ free(priv);
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void ps2LinuxGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ info->buttonClass = 1;
+ ps2LinuxGetMap(pDev, info->map, &info->numButtons);
+ info->valuatorClass = 1;
+ info->numRelAxes = 2;
+ info->minval[0] = 0;
+ info->maxval[0] = 0;
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ info->ptrFeedbackClass = 1;
+}
diff --git a/hw/dmx/input/lnx-ps2.h b/hw/dmx/input/lnx-ps2.h
new file mode 100644
index 0000000..5772e03
--- /dev/null
+++ b/hw/dmx/input/lnx-ps2.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2001 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to Linux PS/2 mouse driver. \see lnx-ps2.c */
+
+#ifndef _LNX_PS2_H_
+#define _LNX_PS2_H_
+
+extern pointer ps2LinuxCreatePrivate(DeviceIntPtr pMouse);
+extern void ps2LinuxDestroyPrivate(pointer priv);
+extern void ps2LinuxRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern void ps2LinuxInit(DevicePtr pDev);
+extern void ps2LinuxGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern int ps2LinuxOn(DevicePtr pDev);
+extern void ps2LinuxOff(DevicePtr pDev);
+extern void ps2LinuxCtrl(DevicePtr pDev, PtrCtrl *ctrl);
+extern void ps2LinuxVTPreSwitch(pointer p);
+extern void ps2LinuxVTPostSwitch(pointer p);
+
+#endif
diff --git a/hw/dmx/input/usb-common.c b/hw/dmx/input/usb-common.c
new file mode 100644
index 0000000..25479ae
--- /dev/null
+++ b/hw/dmx/input/usb-common.c
@@ -0,0 +1,381 @@
+/*
+ * Copyright 2002-2003 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * Routines that are common between \a usb-keyboard.c, \a usb-mouse.c, and
+ * \a usb-other.c */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "usb-private.h"
+
+#define USB_COMMON_DEBUG 1
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "usb-mouse.h"
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define GETNAME ((DMXLocalInputInfoPtr)(pDevice->public.devicePrivate)) \
+ ->name
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define LOG1INPUT(p,f,a) dmxLogInput(p->dmxInput,f,a)
+#define LOG3INPUT(p,f,a,b,c) dmxLogInput(p->dmxInput,f,a,b,c)
+#define LOG5INPUT(p,f,a,b,c,d,e) dmxLogInput(p->dmxInput,f,a,b,c,d,e)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define BLOCK DMXBlockType
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+
+/** Read an event from the \a pDev device. If the event is a motion
+ * event, enqueue it with the \a motion function. Otherwise, enqueue
+ * the event with the \a enqueue function. The \a block type is passed
+ * to the functions so that they may block SIGIO handling as appropriate
+ * to the caller of this function.
+ *
+ * Since USB devices return EV_KEY events for buttons and keys, \a
+ * minButton is used to decide if a Button or Key event should be
+ * queued.*/
+void usbRead(DevicePtr pDev,
+ MOTIONPROC motion,
+ ENQUEUEPROC enqueue,
+ int minButton,
+ BLOCK block)
+{
+ GETPRIV;
+ struct input_event raw;
+ int v[DMX_MAX_AXES];
+ int axis;
+
+#define PRESS(b) \
+ do { \
+ enqueue(pDev, ButtonPress, 0, 0, NULL, block); \
+ } while (0)
+
+#define RELEASE(b) \
+ do { \
+ enqueue(pDev, ButtonRelease, 0, 0, NULL, block); \
+ } while (0)
+
+ while (read(priv->fd, &raw, sizeof(raw)) > 0) {
+#if USB_COMMON_DEBUG > 1
+ LOG3("USB: type = %d, code = 0x%02x, value = %d\n",
+ raw.type, raw.code, raw.value);
+#endif
+ switch (raw.type) {
+ case EV_KEY:
+ /* raw.value = 1 for first, 2 for repeat */
+ if (raw.code > minButton) {
+ if (raw.value) PRESS((raw.code & 0x0f) + 1);
+ else RELEASE((raw.code & 0x0f) + 1);
+ } else {
+ enqueue(pDev, raw.value ? KeyPress : KeyRelease,
+ 0, 0, NULL, block);
+ }
+ break;
+ case EV_REL:
+ switch (raw.code) {
+ case REL_X:
+ v[0] = -raw.value;
+ v[1] = 0;
+ motion(pDev, v, 0, 2, DMX_RELATIVE, block);
+ break;
+ case REL_Y:
+ v[0] = 0;
+ v[1] = -raw.value;
+ motion(pDev, v, 0, 2, DMX_RELATIVE, block);
+ break;
+ case REL_WHEEL:
+ if ((int)raw.value > 0) {
+ PRESS(4);
+ RELEASE(4);
+ } else if ((int)raw.value < 0) {
+ PRESS(5);
+ RELEASE(5);
+ }
+ break;
+ default:
+ memset(v, 0, sizeof(v));
+ axis = priv->relmap[raw.code];
+ v[axis] = raw.value;
+ motion(pDev, v, axis, 1, DMX_RELATIVE, block);
+ }
+ break;
+ case EV_ABS:
+ memset(v, 0, sizeof(v));
+ axis = priv->absmap[raw.code];
+ v[axis] = raw.value;
+ motion(pDev, v, axis, 1, DMX_ABSOLUTE, block);
+ break;
+ }
+ }
+}
+
+#define test_bit(bit) (priv->mask[(bit)/8] & (1 << ((bit)%8)))
+#define test_bits(bit) (bits[(bit)/8] & (1 << ((bit)%8)))
+
+static void usbPrint(myPrivate *priv,
+ const char *filename, const char *devname, int fd)
+{
+ int j, k;
+ DeviceIntPtr pDevice = priv->pDevice;
+ unsigned char bits[KEY_MAX/8 + 1]; /* RATS: Use ok assuming that
+ * KEY_MAX is greater than
+ * REL_MAX, ABS_MAX, SND_MAX, and
+ * LED_MAX. */
+
+ LOG3INPUT(priv, "%s (%s) using %s\n", pDevice->name, GETNAME, filename);
+ LOG1INPUT(priv, " %s\n", devname);
+ for (j = 0; j < EV_MAX; j++) {
+ if (test_bit(j)) {
+ const char *type = "unknown";
+ char extra[256]; /* FIXME: may cause buffer overflow */
+ extra[0] = '\0';
+ switch(j) {
+ case EV_KEY: type = "keys/buttons"; break;
+ case EV_REL: type = "relative";
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_REL, sizeof(bits)), bits);
+ for (k = 0; k < REL_MAX; k++) {
+ if (test_bits(k)) switch (k) {
+ case REL_X: strcat(extra, " X"); break;
+ case REL_Y: strcat(extra, " Y"); break;
+ case REL_Z: strcat(extra, " Z"); break;
+ case REL_HWHEEL: strcat(extra, " HWheel"); break;
+ case REL_DIAL: strcat(extra, " Dial"); break;
+ case REL_WHEEL: strcat(extra, " Wheel"); break;
+ case REL_MISC: strcat(extra, " Misc"); break;
+ }
+ }
+ break;
+ case EV_ABS: type = "absolute";
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_ABS, sizeof(bits)), bits);
+ for (k = 0; k < ABS_MAX; k++) {
+ if (test_bits(k)) switch (k) {
+ case ABS_X: strcat(extra," X"); break;
+ case ABS_Y: strcat(extra," Y"); break;
+ case ABS_Z: strcat(extra," Z"); break;
+ case ABS_RX: strcat(extra," RX"); break;
+ case ABS_RY: strcat(extra," RY"); break;
+ case ABS_RZ: strcat(extra," RZ"); break;
+ case ABS_THROTTLE: strcat(extra," Throttle");break;
+ case ABS_RUDDER: strcat(extra," Rudder"); break;
+ case ABS_WHEEL: strcat(extra," Wheel"); break;
+ case ABS_GAS: strcat(extra," Gas"); break;
+ case ABS_BRAKE: strcat(extra," Break"); break;
+ case ABS_HAT0X: strcat(extra," Hat0X"); break;
+ case ABS_HAT0Y: strcat(extra," Hat0Y"); break;
+ case ABS_HAT1X: strcat(extra," Hat1X"); break;
+ case ABS_HAT1Y: strcat(extra," Hat1Y"); break;
+ case ABS_HAT2X: strcat(extra," Hat2X"); break;
+ case ABS_HAT2Y: strcat(extra," Hat2Y"); break;
+ case ABS_HAT3X: strcat(extra," Hat3X"); break;
+ case ABS_HAT3Y: strcat(extra," Hat3Y"); break;
+ case ABS_PRESSURE: strcat(extra," Pressure");break;
+ case ABS_DISTANCE: strcat(extra," Distance");break;
+ case ABS_TILT_X: strcat(extra," TiltX"); break;
+ case ABS_TILT_Y: strcat(extra," TiltY"); break;
+ case ABS_MISC: strcat(extra," Misc"); break;
+ }
+ }
+ break;
+ case EV_MSC: type = "reserved"; break;
+ case EV_LED: type = "leds";
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_LED, sizeof(bits)), bits);
+ for (k = 0; k < LED_MAX; k++) {
+ if (test_bits(k)) switch (k) {
+ case LED_NUML: strcat(extra," NumLock"); break;
+ case LED_CAPSL: strcat(extra," CapsLock"); break;
+ case LED_SCROLLL: strcat(extra," ScrlLock"); break;
+ case LED_COMPOSE: strcat(extra," Compose"); break;
+ case LED_KANA: strcat(extra," Kana"); break;
+ case LED_SLEEP: strcat(extra," Sleep"); break;
+ case LED_SUSPEND: strcat(extra," Suspend"); break;
+ case LED_MUTE: strcat(extra," Mute"); break;
+ case LED_MISC: strcat(extra," Misc"); break;
+ }
+ }
+ break;
+ case EV_SND: type = "sound";
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_SND, sizeof(bits)), bits);
+ for (k = 0; k < SND_MAX; k++) {
+ if (test_bits(k)) switch (k) {
+ case SND_CLICK: strcat(extra," Click"); break;
+ case SND_BELL: strcat(extra," Bell"); break;
+ }
+ }
+ break;
+ case EV_REP: type = "repeat"; break;
+ case EV_FF: type = "feedback"; break;
+ }
+ LOG5INPUT(priv, " Feature 0x%02x = %s%s%s%s\n", j, type,
+ extra[0] ? " [" : "",
+ extra[0] ? extra+1 : "",
+ extra[0] ? "]" : "");
+ }
+ }
+}
+
+/** Initialized \a pDev as a \a usbMouse, \a usbKeyboard, or \a usbOther
+device. */
+void usbInit(DevicePtr pDev, usbType type)
+{
+ GETPRIV;
+ char name[64]; /* RATS: Only used in XmuSnprintf */
+ int i, j, k;
+ char buf[256] = { 0, }; /* RATS: Use ok */
+ int version;
+ unsigned char bits[KEY_MAX/8 + 1]; /* RATS: Use ok assuming that
+ * KEY_MAX is greater than
+ * REL_MAX, ABS_MAX, SND_MAX, and
+ * LED_MAX. */
+
+ if (priv->fd >=0) return;
+
+ for (i = 0; i < 32; i++) {
+ XmuSnprintf(name, sizeof(name), "/dev/input/event%d", i);
+ if ((priv->fd = open(name, O_RDWR | O_NONBLOCK, 0)) >= 0) {
+ ioctl(priv->fd, EVIOCGVERSION, &version);
+ ioctl(priv->fd, EVIOCGNAME(sizeof(buf)), buf);
+ memset(priv->mask, 0, sizeof(priv->mask));
+ ioctl(priv->fd, EVIOCGBIT(0, sizeof(priv->mask)), priv->mask);
+
+ for (j = 0; j < EV_MAX; j++) {
+ if (test_bit(j)) {
+ switch(j) {
+ case EV_REL:
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_REL, sizeof(bits)), bits);
+ for (k = 0; k < REL_MAX; k++) {
+ if (test_bits(k)) {
+ if (k == REL_X) priv->relmap[k] = 0;
+ else if (k == REL_Y) priv->relmap[k] = 1;
+ else priv->relmap[k] = 2 + priv->numAbs;
+ ++priv->numRel;
+ }
+ }
+ break;
+ case EV_ABS:
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_ABS, sizeof(bits)), bits);
+ for (k = 0; k < ABS_MAX; k++) {
+ if (test_bits(k)) {
+ priv->absmap[k] = priv->numAbs;
+ ++priv->numAbs;
+ }
+ }
+ break;
+ case EV_LED:
+ memset(bits, 0, sizeof(bits));
+ ioctl(priv->fd, EVIOCGBIT(EV_LED, sizeof(bits)), bits);
+ for (k = 0; k < LED_MAX; k++) {
+ if (test_bits(k)) ++priv->numLeds;
+ }
+ break;
+ }
+ }
+ }
+ switch (type) {
+ case usbMouse:
+ if (test_bit(EV_REL) && test_bit(EV_KEY))
+ goto found;
+ break;
+ case usbKeyboard:
+ if (test_bit(EV_KEY) && test_bit(EV_LED) && !test_bit(EV_ABS))
+ goto found;
+ break;
+ case usbOther:
+ if (!(test_bit(EV_REL) && test_bit(EV_KEY))
+ && !(test_bit(EV_KEY) && test_bit(EV_LED)
+ && !test_bit(EV_ABS)))
+ goto found;
+ break;
+ }
+ close(priv->fd);
+ priv->fd = -1;
+ }
+ }
+ if (priv->fd < 0)
+ FATAL1("usbInit: Cannot open /dev/input/event* port (%s)\n"
+ " If you have not done so, you may need to:\n"
+ " rmmod mousedev; rmmod keybdev\n"
+ " modprobe evdev\n",
+ strerror(errno));
+ found:
+ usbPrint(priv, name, buf, priv->fd);
+}
+
+/** Turn \a pDev off (i.e., stop taking input from \a pDev). */
+void usbOff(DevicePtr pDev)
+{
+ GETPRIV;
+
+ if (priv->fd >= 0) close(priv->fd);
+ priv->fd = -1;
+}
+
+/** Create a private structure for use within this file. */
+pointer usbCreatePrivate(DeviceIntPtr pDevice)
+{
+ myPrivate *priv = calloc(1, sizeof(*priv));
+ priv->fd = -1;
+ priv->pDevice = pDevice;
+ return priv;
+}
+
+/** Destroy a private structure. */
+void usbDestroyPrivate(pointer priv)
+{
+ free(priv);
+}
diff --git a/hw/dmx/input/usb-common.h b/hw/dmx/input/usb-common.h
new file mode 100644
index 0000000..5ebfd1e
--- /dev/null
+++ b/hw/dmx/input/usb-common.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to common USB support. \see usb-common.c \see usb-mouse.c
+ * \see usb-keyboard.c \see usb-other.c */
+
+#ifndef _USB_COMMON_H_
+#define _USB_COMMON_H_
+typedef enum {
+ usbMouse,
+ usbKeyboard,
+ usbOther
+} usbType;
+
+extern pointer usbCreatePrivate(DeviceIntPtr pDevice);
+extern void usbDestroyPrivate(pointer priv);
+extern void usbRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ int minButton,
+ DMXBlockType block);
+extern void usbInit(DevicePtr pDev, usbType type);
+extern void usbOff(DevicePtr pDev);
+#endif
diff --git a/hw/dmx/input/usb-keyboard.c b/hw/dmx/input/usb-keyboard.c
new file mode 100644
index 0000000..9db1adb
--- /dev/null
+++ b/hw/dmx/input/usb-keyboard.c
@@ -0,0 +1,444 @@
+/* Portions of this file were derived from the following files:
+ *
+ **********************************************************************
+ *
+ * xfree86/common/xf86KbdLnx.c
+ *
+ * Linux version of keymapping setup. The kernel (since 0.99.14) has support
+ * for fully remapping the keyboard, but there are some differences between
+ * the Linux map and the SVR4 map (esp. in the extended keycodes). We also
+ * remove the restriction on what keycodes can be remapped.
+ * Orest Zborowski.
+ *
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the 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 Thomas Roell not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Thomas Roell makes no representations
+ * about the suitability of this software for any purpose. It is provided
+ * "as is" without express or implied warranty.
+ *
+ * THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THOMAS ROELL 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.
+ *
+ */
+
+/*
+ * Copyright 2001,2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This code implements a low-level device driver for a USB keyboard
+ * under Linux. The keymap description is derived from code by Thomas
+ * Roell, Orest Zborowski. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "atKeynames.h"
+#include "usb-private.h"
+
+#define USB_KEYBOARD_DEBUG 0
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "usb-keyboard.h"
+#include <xkbsrv.h>
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define BLOCK DMXBlockType
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+#define GLYPHS_PER_KEY 4
+#define NUM_KEYCODES 248
+#define MIN_KEYCODE 8
+#define MAX_KEYCODE (NUM_KEYCODES + MIN_KEYCODE - 1)
+
+static KeySym map[NUM_KEYCODES * GLYPHS_PER_KEY] = {
+/* Table modified from xc/programs/Xserver/hw/xfree86/common/xf86Keymap.h */
+ /* 0x00 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x01 */ XK_Escape, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x02 */ XK_1, XK_exclam, NoSymbol, NoSymbol,
+ /* 0x03 */ XK_2, XK_at, NoSymbol, NoSymbol,
+ /* 0x04 */ XK_3, XK_numbersign, NoSymbol, NoSymbol,
+ /* 0x05 */ XK_4, XK_dollar, NoSymbol, NoSymbol,
+ /* 0x06 */ XK_5, XK_percent, NoSymbol, NoSymbol,
+ /* 0x07 */ XK_6, XK_asciicircum, NoSymbol, NoSymbol,
+ /* 0x08 */ XK_7, XK_ampersand, NoSymbol, NoSymbol,
+ /* 0x09 */ XK_8, XK_asterisk, NoSymbol, NoSymbol,
+ /* 0x0a */ XK_9, XK_parenleft, NoSymbol, NoSymbol,
+ /* 0x0b */ XK_0, XK_parenright, NoSymbol, NoSymbol,
+ /* 0x0c */ XK_minus, XK_underscore, NoSymbol, NoSymbol,
+ /* 0x0d */ XK_equal, XK_plus, NoSymbol, NoSymbol,
+ /* 0x0e */ XK_BackSpace, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x0f */ XK_Tab, XK_ISO_Left_Tab,NoSymbol, NoSymbol,
+ /* 0x10 */ XK_Q, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x11 */ XK_W, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x12 */ XK_E, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x13 */ XK_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x14 */ XK_T, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x15 */ XK_Y, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x16 */ XK_U, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x17 */ XK_I, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x18 */ XK_O, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x19 */ XK_P, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1a */ XK_bracketleft, XK_braceleft, NoSymbol, NoSymbol,
+ /* 0x1b */ XK_bracketright,XK_braceright, NoSymbol, NoSymbol,
+ /* 0x1c */ XK_Return, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1d */ XK_Control_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1e */ XK_A, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x1f */ XK_S, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x20 */ XK_D, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x21 */ XK_F, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x22 */ XK_G, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x23 */ XK_H, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x24 */ XK_J, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x25 */ XK_K, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x26 */ XK_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x27 */ XK_semicolon, XK_colon, NoSymbol, NoSymbol,
+ /* 0x28 */ XK_quoteright, XK_quotedbl, NoSymbol, NoSymbol,
+ /* 0x29 */ XK_quoteleft, XK_asciitilde, NoSymbol, NoSymbol,
+ /* 0x2a */ XK_Shift_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2b */ XK_backslash, XK_bar, NoSymbol, NoSymbol,
+ /* 0x2c */ XK_Z, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2d */ XK_X, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2e */ XK_C, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x2f */ XK_V, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x30 */ XK_B, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x31 */ XK_N, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x32 */ XK_M, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x33 */ XK_comma, XK_less, NoSymbol, NoSymbol,
+ /* 0x34 */ XK_period, XK_greater, NoSymbol, NoSymbol,
+ /* 0x35 */ XK_slash, XK_question, NoSymbol, NoSymbol,
+ /* 0x36 */ XK_Shift_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x37 */ XK_KP_Multiply, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x38 */ XK_Alt_L, XK_Meta_L, NoSymbol, NoSymbol,
+ /* 0x39 */ XK_space, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3a */ XK_Caps_Lock, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3b */ XK_F1, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3c */ XK_F2, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3d */ XK_F3, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3e */ XK_F4, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x3f */ XK_F5, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x40 */ XK_F6, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x41 */ XK_F7, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x42 */ XK_F8, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x43 */ XK_F9, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x44 */ XK_F10, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x45 */ XK_Num_Lock, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x46 */ XK_Scroll_Lock, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x47 */ XK_KP_Home, XK_KP_7, NoSymbol, NoSymbol,
+ /* 0x48 */ XK_KP_Up, XK_KP_8, NoSymbol, NoSymbol,
+ /* 0x49 */ XK_KP_Prior, XK_KP_9, NoSymbol, NoSymbol,
+ /* 0x4a */ XK_KP_Subtract, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x4b */ XK_KP_Left, XK_KP_4, NoSymbol, NoSymbol,
+ /* 0x4c */ XK_KP_Begin, XK_KP_5, NoSymbol, NoSymbol,
+ /* 0x4d */ XK_KP_Right, XK_KP_6, NoSymbol, NoSymbol,
+ /* 0x4e */ XK_KP_Add, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x4f */ XK_KP_End, XK_KP_1, NoSymbol, NoSymbol,
+ /* 0x50 */ XK_KP_Down, XK_KP_2, NoSymbol, NoSymbol,
+ /* 0x51 */ XK_KP_Next, XK_KP_3, NoSymbol, NoSymbol,
+ /* 0x52 */ XK_KP_Insert, XK_KP_0, NoSymbol, NoSymbol,
+ /* 0x53 */ XK_KP_Delete, XK_KP_Decimal, NoSymbol, NoSymbol,
+ /* 0x54 */ XK_Sys_Req, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x55 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x56 */ XK_less, XK_greater, NoSymbol, NoSymbol,
+ /* 0x57 */ XK_F11, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x58 */ XK_F12, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x59 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5a */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5d */ XK_Begin, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5e */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x5f */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x60 */ XK_KP_Enter, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x61 */ XK_Control_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x62 */ XK_KP_Divide, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x63 */ XK_Print, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x64 */ XK_Alt_R, XK_Meta_R, NoSymbol, NoSymbol,
+ /* 0x65 */ XK_Break, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x66 */ XK_Home, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x67 */ XK_Up, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x68 */ XK_Prior, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x69 */ XK_Left, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6a */ XK_Right, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6b */ XK_End, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6c */ XK_Down, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6d */ XK_Next, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6e */ XK_Insert, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x6f */ XK_Delete, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x70 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x71 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x72 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x73 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x74 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x75 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x76 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x77 */ XK_Pause, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x78 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x79 */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7a */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7b */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7c */ NoSymbol, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7d */ XK_Super_L, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7e */ XK_Super_R, NoSymbol, NoSymbol, NoSymbol,
+ /* 0x7f */ XK_Menu, NoSymbol, NoSymbol, NoSymbol,
+};
+
+static int kbdUSBKeyDown(myPrivate *priv, int keyCode)
+{
+ CARD8 byte = keyCode >> 5;
+ CARD32 bit = 1 << (keyCode & 0x1f);
+
+ if (byte > NUM_STATE_ENTRIES) return 0;
+ return priv->kbdState[byte] & bit;
+}
+
+static void kbdUSBKeyState(myPrivate *priv, int type, int keyCode)
+{
+ CARD8 byte = keyCode >> 5;
+ CARD32 bit = 1 << (keyCode & 0x1f);
+
+ if (byte > NUM_STATE_ENTRIES) return;
+ if (type == KeyPress) priv->kbdState[byte] |= bit;
+ else priv->kbdState[byte] &= ~bit;
+}
+
+/** Set the LEDs. */
+void kbdUSBCtrl(DevicePtr pDev, KeybdCtrl *ctrl)
+{
+ GETPRIV;
+ struct timeval tv;
+ struct input_event event;
+ int i, led;
+
+ gettimeofday(&tv, NULL);
+ for (i = 0; i < 5; i++) {
+ event.time.tv_sec = tv.tv_sec;
+ event.time.tv_usec = tv.tv_usec;
+ event.type = EV_LED;
+ if (i == 0) led = 1; /* LED_CAPSL == 0x01 */
+ else if (i == 1) led = 0; /* LED_NUML == 0x00 */
+ else led = i;
+ event.code = led;
+ event.value = !!(ctrl->leds & (1 << led));
+ write(priv->fd, &event, sizeof(event));
+ }
+}
+
+/** Initialize \a pDev using #usbInit. */
+void kbdUSBInit(DevicePtr pDev)
+{
+ usbInit(pDev, usbKeyboard);
+}
+
+static void kbdUSBConvert(DevicePtr pDev,
+ unsigned int scanCode,
+ int value,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ GETPRIV;
+ XkbSrvInfoPtr xkbi = priv->pKeyboard->key->xkbInfo;
+ int type;
+ int keyCode;
+ KeySym keySym = NoSymbol;
+ int switching;
+
+ /* Set up xEvent information */
+ type = value ? KeyPress : KeyRelease;
+ keyCode = (scanCode & 0xff) + MIN_KEYCODE;
+
+ /* Handle repeats */
+
+ if (keyCode >= xkbi->desc->min_key_code &&
+ keyCode <= xkbi->desc->max_key_code) {
+
+ int effectiveGroup = XkbGetEffectiveGroup(xkbi,
+ &xkbi->state,
+ scanCode);
+ keySym = XkbKeySym(xkbi->desc, scanCode, effectiveGroup);
+#if 0
+ switch (keySym) {
+ case XK_Num_Lock:
+ case XK_Scroll_Lock:
+ case XK_Shift_Lock:
+ case XK_Caps_Lock:
+ /* Ignore releases and all but first press */
+ if (kbdLinuxModIgnore(priv, &xE, keySym)) return;
+ if (kbdLinuxKeyDown(priv, &xE)) xE.u.u.type = KeyRelease;
+ else xE.u.u.type = KeyPress;
+ break;
+ }
+#endif
+
+ /* If key is already down, ignore or autorepeat */
+ if (type == KeyPress && kbdUSBKeyDown(priv, keyCode)) {
+ KbdFeedbackClassRec *feed = priv->pDevice->kbdfeed;
+
+ /* No auto-repeat? */
+ if ((feed && !feed->ctrl.autoRepeat)
+ || priv->pDevice->key->xkbInfo->desc->map->modmap[keyCode]
+ || (feed
+ && !(feed->ctrl.autoRepeats[keyCode >> 3]
+ & (1 << (keyCode & 7))))) return; /* Ignore */
+
+ /* Do auto-repeat */
+ enqueue(pDev, KeyRelease, keyCode, keySym, NULL, block);
+ type = KeyPress;
+ }
+
+ /* If key is already up, ignore */
+ if (type == KeyRelease && !kbdUSBKeyDown(priv, keyCode)) return;
+ }
+
+ switching = 0;
+ if (checkspecial && type == KeyPress)
+ switching = checkspecial(pDev, keySym);
+ if (!switching) {
+ if (enqueue)
+ enqueue(pDev, type, keyCode, keySym, NULL, block);
+ kbdUSBKeyState(priv, type, keyCode); /* Update our state bitmap */
+ }
+}
+
+/** Read an event from the \a pDev device. If the event is a motion
+ * event, enqueue it with the \a motion function. Otherwise, check for
+ * special keys with the \a checkspecial function and enqueue the event
+ * with the \a enqueue function. The \a block type is passed to the
+ * functions so that they may block SIGIO handling as appropriate to the
+ * caller of this function. */
+void kbdUSBRead(DevicePtr pDev,
+ MOTIONPROC motion,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ GETPRIV;
+ struct input_event raw;
+
+ while (read(priv->fd, &raw, sizeof(raw)) > 0) {
+#if USB_KEYBOARD_DEBUG
+ LOG3("KBD: type = %d, code = 0x%02x, value = %d\n",
+ raw.type, raw.code, raw.value);
+#endif
+ kbdUSBConvert(pDev, raw.code, raw.value, enqueue, checkspecial, block);
+ }
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int kbdUSBOn(DevicePtr pDev)
+{
+ GETPRIV;
+
+ if (priv->fd < 0) kbdUSBInit(pDev);
+ return priv->fd;
+}
+
+static void kbdUSBGetMap(DevicePtr pDev, KeySymsPtr pKeySyms, CARD8 *pModMap)
+{
+ KeySym *k, *mapCopy;
+ int i;
+
+ mapCopy = malloc(sizeof(map));
+ memcpy(mapCopy, map, sizeof(map));
+
+ /* compute the modifier map */
+ for (i = 0; i < MAP_LENGTH; i++)
+ pModMap[i] = NoSymbol; /* make sure it is restored */
+
+ for (k = mapCopy, i = MIN_KEYCODE;
+ i < NUM_KEYCODES + MIN_KEYCODE;
+ i++, k += 4) {
+ switch(*k) {
+ case XK_Shift_L:
+ case XK_Shift_R: pModMap[i] = ShiftMask; break;
+ case XK_Control_L:
+ case XK_Control_R: pModMap[i] = ControlMask; break;
+ case XK_Caps_Lock: pModMap[i] = LockMask; break;
+ case XK_Alt_L:
+ case XK_Alt_R: pModMap[i] = AltMask; break;
+ case XK_Num_Lock: pModMap[i] = NumLockMask; break;
+ case XK_Scroll_Lock: pModMap[i] = ScrollLockMask; break;
+ case XK_Kana_Lock:
+ case XK_Kana_Shift: pModMap[i] = KanaMask; break;
+ case XK_Mode_switch: pModMap[i] = AltLangMask; break;
+ }
+ }
+
+ pKeySyms->map = mapCopy; /* Must be XFree'able */
+ pKeySyms->mapWidth = GLYPHS_PER_KEY;
+ pKeySyms->minKeyCode = MIN_KEYCODE;
+ pKeySyms->maxKeyCode = MAX_KEYCODE;
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void kbdUSBGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ info->keyboard = 1;
+ info->keyClass = 1;
+ kbdUSBGetMap(pDev, &info->keySyms, info->modMap);
+ info->focusClass = 1;
+ info->kbdFeedbackClass = 1;
+ info->names.keycodes = strdup("powerpcps2");
+ info->force = 1;
+}
diff --git a/hw/dmx/input/usb-keyboard.h b/hw/dmx/input/usb-keyboard.h
new file mode 100644
index 0000000..1f9614e
--- /dev/null
+++ b/hw/dmx/input/usb-keyboard.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to USB keyboard driver. \see usb-keyboard.c \see usb-common.c */
+
+#ifndef _USB_KEYBOARD_H_
+#define _USB_KEYBOARD_H_
+extern void kbdUSBInit(DevicePtr pDev);
+extern void kbdUSBGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern int kbdUSBOn(DevicePtr pDev);
+extern void kbdUSBRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern void kbdUSBCtrl(DevicePtr pDev, KeybdCtrl *ctrl);
+#endif
diff --git a/hw/dmx/input/usb-mouse.c b/hw/dmx/input/usb-mouse.c
new file mode 100644
index 0000000..efa9d00
--- /dev/null
+++ b/hw/dmx/input/usb-mouse.c
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This code implements a low-level device driver for a USB mouse. */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "usb-private.h"
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "usb-mouse.h"
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define BLOCK DMXBlockType
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+/** Read the USB device using #usbRead. */
+void mouUSBRead(DevicePtr pDev,
+ MOTIONPROC motion,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ usbRead(pDev, motion, enqueue, BTN_MISC, block);
+}
+
+/** Initialize \a pDev using #usbInit. */
+void mouUSBInit(DevicePtr pDev)
+{
+ usbInit(pDev, usbMouse);
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int mouUSBOn(DevicePtr pDev)
+{
+ GETPRIV;
+
+ if (priv->fd < 0) mouUSBInit(pDev);
+ return priv->fd;
+}
+
+static void mouUSBGetMap(DevicePtr pDev, unsigned char *map, int *nButtons)
+{
+ int i;
+
+ if (nButtons) *nButtons = 5;
+ if (map) for (i = 0; i <= *nButtons; i++) map[i] = i;
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void mouUSBGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ static KeySym keyboard_mapping = NoSymbol;
+
+ info->buttonClass = 1;
+ mouUSBGetMap(pDev, info->map, &info->numButtons);
+ info->valuatorClass = 1;
+ info->numRelAxes = 2;
+ info->minval[0] = 0;
+ info->maxval[0] = 0;
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ info->ptrFeedbackClass = 1;
+
+ /* Some USB mice devices return key
+ * events from their pair'd
+ * keyboard... */
+ info->keyClass = 1;
+ info->keySyms.minKeyCode = 8;
+ info->keySyms.maxKeyCode = 8;
+ info->keySyms.mapWidth = 1;
+ info->keySyms.map = &keyboard_mapping;
+}
diff --git a/hw/dmx/input/usb-mouse.h b/hw/dmx/input/usb-mouse.h
new file mode 100644
index 0000000..918bf64
--- /dev/null
+++ b/hw/dmx/input/usb-mouse.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to USB mouse driver. \see usb-mouse.c \see usb-common.c */
+
+#ifndef _USB_MOU_H_
+#define _USB_MOU_H_
+extern void mouUSBRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern void mouUSBInit(DevicePtr pDev);
+extern void mouUSBGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern int mouUSBOn(DevicePtr pDev);
+extern void mouUSBCtrl(DevicePtr pDev, PtrCtrl *ctrl);
+#endif
diff --git a/hw/dmx/input/usb-other.c b/hw/dmx/input/usb-other.c
new file mode 100644
index 0000000..d1074b8
--- /dev/null
+++ b/hw/dmx/input/usb-other.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ *
+ * This code implements a low-level device driver for a non-keyboard,
+ * non-mouse USB device (e.g., a joystick or gamepad). */
+
+#ifdef HAVE_DMX_CONFIG_H
+#include <dmx-config.h>
+#endif
+
+#include "usb-private.h"
+
+/*****************************************************************************/
+/* Define some macros to make it easier to move this file to another
+ * part of the Xserver tree. All calls to the dmx* layer are #defined
+ * here for the .c file. The .h file will also have to be edited. */
+#include "dmxinputinit.h"
+#include "usb-other.h"
+
+#define GETPRIV myPrivate *priv \
+ = ((DMXLocalInputInfoPtr)(pDev->devicePrivate))->private
+
+#define LOG0(f) dmxLog(dmxDebug,f)
+#define LOG1(f,a) dmxLog(dmxDebug,f,a)
+#define LOG2(f,a,b) dmxLog(dmxDebug,f,a,b)
+#define LOG3(f,a,b,c) dmxLog(dmxDebug,f,a,b,c)
+#define FATAL0(f) dmxLog(dmxFatal,f)
+#define FATAL1(f,a) dmxLog(dmxFatal,f,a)
+#define FATAL2(f,a,b) dmxLog(dmxFatal,f,a,b)
+#define MOTIONPROC dmxMotionProcPtr
+#define ENQUEUEPROC dmxEnqueueProcPtr
+#define CHECKPROC dmxCheckSpecialProcPtr
+#define BLOCK DMXBlockType
+
+/* End of interface definitions. */
+/*****************************************************************************/
+
+/** Read the USB device using #usbRead. */
+void othUSBRead(DevicePtr pDev,
+ MOTIONPROC motion,
+ ENQUEUEPROC enqueue,
+ CHECKPROC checkspecial,
+ BLOCK block)
+{
+ usbRead(pDev, motion, enqueue, 0xffff, block);
+}
+
+/** Initialize \a pDev using #usbInit. */
+void othUSBInit(DevicePtr pDev)
+{
+ usbInit(pDev, usbOther);
+}
+
+/** Turn \a pDev on (i.e., take input from \a pDev). */
+int othUSBOn(DevicePtr pDev)
+{
+ GETPRIV;
+
+ if (priv->fd < 0) othUSBInit(pDev);
+ return priv->fd;
+}
+
+/** Fill the \a info structure with information needed to initialize \a
+ * pDev. */
+void othUSBGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info)
+{
+ GETPRIV;
+ int i, j;
+ static KeySym keyboard_mapping = NoSymbol;
+ int absolute[5];
+
+#define test_bit(bit) (priv->mask[(bit)/8] & (1 << ((bit)%8)))
+
+ /* Some USB mice devices return key
+ * events from their pair'd
+ * keyboard... */
+ info->keyClass = 1;
+ info->keySyms.minKeyCode = 8;
+ info->keySyms.maxKeyCode = 8;
+ info->keySyms.mapWidth = 1;
+ info->keySyms.map = &keyboard_mapping;
+
+ for (i = 0; i < EV_MAX; i++) {
+ if (test_bit(i)) {
+ switch (i) {
+ case EV_KEY:
+ /* See above */
+ break;
+ case EV_REL:
+ info->valuatorClass = 1;
+ if (info->numRelAxes + info->numAbsAxes > DMX_MAX_AXES - 1) {
+ info->numRelAxes = DMX_MAX_AXES - info->numAbsAxes - 1;
+ dmxLog(dmxWarning, "Can only use %d relative axes\n",
+ info->numRelAxes);
+ } else
+ info->numRelAxes = priv->numRel;
+ info->minval[0] = 0;
+ info->maxval[0] = 0;
+ info->res[0] = 1;
+ info->minres[0] = 0;
+ info->maxres[0] = 1;
+ break;
+ case EV_ABS:
+ info->valuatorClass = 1;
+ if (info->numRelAxes + info->numAbsAxes > DMX_MAX_AXES - 1) {
+ info->numAbsAxes = DMX_MAX_AXES - info->numRelAxes - 1;
+ dmxLog(dmxWarning, "Can only use %d absolute axes\n",
+ info->numAbsAxes);
+ } else
+ info->numAbsAxes = priv->numAbs;
+ for (j = 0; j < info->numAbsAxes; j++) {
+ ioctl(priv->fd, EVIOCGABS(j), absolute);
+ info->minval[1+j] = absolute[1];
+ info->maxval[1+j] = absolute[2];
+ info->res[1+j] = absolute[3];
+ info->minres[1+j] = absolute[3];
+ info->maxres[1+j] = absolute[3];
+ }
+ break;
+ case EV_LED:
+ info->ledFeedbackClass = 0; /* Not supported at this time */
+ break;
+ case EV_SND:
+ info->belFeedbackClass = 0; /* Not supported at this time */
+ break;
+ }
+ }
+ }
+}
diff --git a/hw/dmx/input/usb-other.h b/hw/dmx/input/usb-other.h
new file mode 100644
index 0000000..b69e659
--- /dev/null
+++ b/hw/dmx/input/usb-other.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Interface to USB generic driver. \see usb-other.c \see usb-common.c */
+
+#ifndef _USB_OTHER_H_
+#define _USB_OTHER_H_
+extern void othUSBRead(DevicePtr pDev,
+ dmxMotionProcPtr motion,
+ dmxEnqueueProcPtr enqueue,
+ dmxCheckSpecialProcPtr checkspecial,
+ DMXBlockType block);
+extern void othUSBInit(DevicePtr pDev);
+extern void othUSBGetInfo(DevicePtr pDev, DMXLocalInitInfoPtr info);
+extern int othUSBOn(DevicePtr pDev);
+extern void othUSBCtrl(DevicePtr pDev, PtrCtrl *ctrl);
+#endif
diff --git a/hw/dmx/input/usb-private.h b/hw/dmx/input/usb-private.h
new file mode 100644
index 0000000..c70668c
--- /dev/null
+++ b/hw/dmx/input/usb-private.h
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2002 Red Hat Inc., Durham, North Carolina.
+ *
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation on the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * Authors:
+ * Rickard E. (Rik) Faith <faith@redhat.com>
+ *
+ */
+
+/** \file
+ * Private header file for USB support. This file provides
+ * Linux-specific include files and the definition of the private
+ * structure. \see usb-common.c \see usb-keyboard.c \see usb-mouse.c
+ * \see usb-other.c */
+
+#ifndef _USB_PRIVATE_H_
+#define _USB_PRIVATE_H_
+
+#include "dmxinputinit.h"
+#include "inputstr.h"
+#include <X11/Xos.h>
+#include <errno.h>
+#include <linux/input.h>
+#include "usb-common.h"
+
+ /* Support for force feedback was
+ * introduced in Linxu 2.4.10 */
+#ifndef EV_MSC
+#define EV_MSC 0x04
+#endif
+#ifndef EV_FF
+#define EV_FF 0x15
+#endif
+#ifndef LED_SLEEP
+#define LED_SLEEP 0x05
+#endif
+#ifndef LED_SUSPEND
+#define LED_SUSPEND 0x06
+#endif
+#ifndef LED_MUTE
+#define LED_MUTE 0x07
+#endif
+#ifndef LED_MISC
+#define LED_MISC 0x08
+#endif
+#ifndef BTN_DEAD
+#define BTN_DEAD 0x12f
+#endif
+#ifndef BTN_THUMBL
+#define BTN_THUMBL 0x13d
+#endif
+#ifndef BTN_THUMBR
+#define BTN_THUMBR 0x13e
+#endif
+#ifndef MSC_SERIAL
+#define MSC_SERIAL 0x00
+#endif
+#ifndef MSC_MAX
+#define MSC_MAX 0x07
+#endif
+
+ /* Support for older kernels. */
+#ifndef ABS_WHEEL
+#define ABS_WHEEL 0x08
+#endif
+#ifndef ABS_GAS
+#define ABS_GAS 0x09
+#endif
+#ifndef ABS_BRAKE
+#define ABS_BRAKE 0x0a
+#endif
+
+#define NUM_STATE_ENTRIES (256/32)
+
+/* Private area for USB devices. */
+typedef struct _myPrivate {
+ DeviceIntPtr pDevice; /**< Device (mouse or other) */
+ int fd; /**< File descriptor */
+ unsigned char mask[EV_MAX/8 + 1]; /**< Mask */
+ int numRel, numAbs, numLeds; /**< Counts */
+ int relmap[DMX_MAX_AXES]; /**< Relative axis map */
+ int absmap[DMX_MAX_AXES]; /**< Absolute axis map */
+
+ CARD32 kbdState[NUM_STATE_ENTRIES]; /**< Keyboard state */
+ DeviceIntPtr pKeyboard; /** Keyboard device */
+
+ int pitch; /**< Bell pitch */
+ unsigned long duration; /**< Bell duration */
+
+ /* FIXME: dmxInput is never initialized */
+ DMXInputInfo *dmxInput; /**< For pretty-printing */
+} myPrivate;
+#endif
diff --git a/hw/dmx/man/Makefile.am b/hw/dmx/man/Makefile.am
new file mode 100644
index 0000000..e717aef
--- /dev/null
+++ b/hw/dmx/man/Makefile.am
@@ -0,0 +1,2 @@
+include $(top_srcdir)/manpages.am
+appman_PRE = Xdmx.man
diff --git a/hw/dmx/man/Makefile.in b/hw/dmx/man/Makefile.in
new file mode 100644
index 0000000..1b3de76
--- /dev/null
+++ b/hw/dmx/man/Makefile.in
@@ -0,0 +1,698 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/manpages.am
+subdir = hw/dmx/man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \
+ $(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/do-not-use-config.h \
+ $(top_builddir)/include/xorg-server.h \
+ $(top_builddir)/include/dix-config.h \
+ $(top_builddir)/include/xorg-config.h \
+ $(top_builddir)/include/xkb-config.h \
+ $(top_builddir)/include/xwin-config.h \
+ $(top_builddir)/include/kdrive-config.h \
+ $(top_builddir)/include/version-config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(appmandir)" "$(DESTDIR)$(drivermandir)" \
+ "$(DESTDIR)$(filemandir)"
+DATA = $(appman_DATA) $(driverman_DATA) $(fileman_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
+ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_APPLICATIONS_DIR = @APPLE_APPLICATIONS_DIR@
+APPLE_APPLICATION_NAME = @APPLE_APPLICATION_NAME@
+APP_MAN_DIR = @APP_MAN_DIR@
+APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
+AR = @AR@
+ARM_BACKTRACE_CFLAGS = @ARM_BACKTRACE_CFLAGS@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASE_FONT_PATH = @BASE_FONT_PATH@
+BUILD_DATE = @BUILD_DATE@
+BUILD_TIME = @BUILD_TIME@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CHANGELOG_CMD = @CHANGELOG_CMD@
+COMPILEDDEFAULTFONTPATH = @COMPILEDDEFAULTFONTPATH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CWARNFLAGS = @CWARNFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DARWIN_LIBS = @DARWIN_LIBS@
+DBUS_CFLAGS = @DBUS_CFLAGS@
+DBUS_LIBS = @DBUS_LIBS@
+DEFAULT_LIBRARY_PATH = @DEFAULT_LIBRARY_PATH@
+DEFAULT_LOGDIR = @DEFAULT_LOGDIR@
+DEFAULT_LOGPREFIX = @DEFAULT_LOGPREFIX@
+DEFAULT_MODULE_PATH = @DEFAULT_MODULE_PATH@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DGA_CFLAGS = @DGA_CFLAGS@
+DGA_LIBS = @DGA_LIBS@
+DIX_CFLAGS = @DIX_CFLAGS@
+DIX_LIB = @DIX_LIB@
+DLLTOOL = @DLLTOOL@
+DLOPEN_LIBS = @DLOPEN_LIBS@
+DMXEXAMPLES_DEP_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@
+DMXEXAMPLES_DEP_LIBS = @DMXEXAMPLES_DEP_LIBS@
+DMXMODULES_CFLAGS = @DMXMODULES_CFLAGS@
+DMXMODULES_LIBS = @DMXMODULES_LIBS@
+DMXXIEXAMPLES_DEP_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@
+DMXXIEXAMPLES_DEP_LIBS = @DMXXIEXAMPLES_DEP_LIBS@
+DMXXMUEXAMPLES_DEP_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@
+DMXXMUEXAMPLES_DEP_LIBS = @DMXXMUEXAMPLES_DEP_LIBS@
+DOXYGEN = @DOXYGEN@
+DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
+DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
+DRIPROTO_CFLAGS = @DRIPROTO_CFLAGS@
+DRIPROTO_LIBS = @DRIPROTO_LIBS@
+DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
+DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
+DRI_CFLAGS = @DRI_CFLAGS@
+DRI_DRIVER_PATH = @DRI_DRIVER_PATH@
+DRI_LIBS = @DRI_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DTRACE = @DTRACE@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILE_MAN_DIR = @FILE_MAN_DIR@
+FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
+FONT100DPIDIR = @FONT100DPIDIR@
+FONT75DPIDIR = @FONT75DPIDIR@
+FONTMISCDIR = @FONTMISCDIR@
+FONTOTFDIR = @FONTOTFDIR@
+FONTROOTDIR = @FONTROOTDIR@
+FONTTTFDIR = @FONTTTFDIR@
+FONTTYPE1DIR = @FONTTYPE1DIR@
+FOP = @FOP@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_LIBS = @GLIB_LIBS@
+GLX_ARCH_DEFINES = @GLX_ARCH_DEFINES@
+GLX_DEFINES = @GLX_DEFINES@
+GLX_TLS = @GLX_TLS@
+GL_CFLAGS = @GL_CFLAGS@
+GL_LIBS = @GL_LIBS@
+GREP = @GREP@
+HAL_CFLAGS = @HAL_CFLAGS@
+HAL_LIBS = @HAL_LIBS@
+INSTALL = @INSTALL@
+INSTALL_CMD = @INSTALL_CMD@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KDRIVE_CFLAGS = @KDRIVE_CFLAGS@
+KDRIVE_INCS = @KDRIVE_INCS@
+KDRIVE_LIBS = @KDRIVE_LIBS@
+KDRIVE_LOCAL_LIBS = @KDRIVE_LOCAL_LIBS@
+KDRIVE_PURE_INCS = @KDRIVE_PURE_INCS@
+KDRIVE_PURE_LIBS = @KDRIVE_PURE_LIBS@
+LAUNCHD_ID_PREFIX = @LAUNCHD_ID_PREFIX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LD_EXPORT_SYMBOLS_FLAG = @LD_EXPORT_SYMBOLS_FLAG@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
+LIBDRM_LIBS = @LIBDRM_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
+LIBSHA1_LIBS = @LIBSHA1_LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MAN_DIR = @LIB_MAN_DIR@
+LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAIN_LIB = @MAIN_LIB@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+
+# Add server specific man pages string substitution from XORG_MANPAGE_SECTIONS
+# 's|/,|/, |g' will add a space to help font path formatting
+MAN_SUBSTS = @MAN_SUBSTS@ -e 's|__logdir__|$(logdir)|g' -e \
+ 's|__datadir__|$(datadir)|g' -e 's|__mandir__|$(mandir)|g' -e \
+ 's|__sysconfdir__|$(sysconfdir)|g' -e \
+ 's|__xconfigdir__|$(__XCONFIGDIR__)|g' -e \
+ 's|__xkbdir__|$(XKB_BASE_DIRECTORY)|g' -e \
+ 's|__laucnd_id_prefix__|$(LAUNCHD_ID_PREFIX)|g' -e \
+ 's|__modulepath__|$(DEFAULT_MODULE_PATH)|g' -e \
+ 's|__default_font_path__|$(COMPILEDDEFAULTFONTPATH)|g' -e \
+ '\|$(COMPILEDDEFAULTFONTPATH)| s|/,|/, |g'
+MISC_MAN_DIR = @MISC_MAN_DIR@
+MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCCLD = @OBJCCLD@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJCLINK = @OBJCLINK@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
+OPENSSL_LIBS = @OPENSSL_LIBS@
+OS_LIB = @OS_LIB@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
+PCIACCESS_LIBS = @PCIACCESS_LIBS@
+PCI_TXT_IDS_PATH = @PCI_TXT_IDS_PATH@
+PERL = @PERL@
+PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
+PIXMAN_LIBS = @PIXMAN_LIBS@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PROJECTROOT = @PROJECTROOT@
+RANLIB = @RANLIB@
+RAWCPP = @RAWCPP@
+RAWCPPFLAGS = @RAWCPPFLAGS@
+RELEASE_DATE = @RELEASE_DATE@
+SDK_REQUIRED_MODULES = @SDK_REQUIRED_MODULES@
+SED = @SED@
+SELINUX_CFLAGS = @SELINUX_CFLAGS@
+SELINUX_LIBS = @SELINUX_LIBS@
+SERVER_MISC_CONFIG_PATH = @SERVER_MISC_CONFIG_PATH@
+SET_MAKE = @SET_MAKE@
+SHA1_CFLAGS = @SHA1_CFLAGS@
+SHA1_LIBS = @SHA1_LIBS@
+SHELL = @SHELL@
+SOLARIS_ASM_CFLAGS = @SOLARIS_ASM_CFLAGS@
+SOLARIS_INOUT_ARCH = @SOLARIS_INOUT_ARCH@
+STRIP = @STRIP@
+STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@
+SYSCONFDIR = @SYSCONFDIR@
+TSLIB_CFLAGS = @TSLIB_CFLAGS@
+TSLIB_LIBS = @TSLIB_LIBS@
+UDEV_CFLAGS = @UDEV_CFLAGS@
+UDEV_LIBS = @UDEV_LIBS@
+UTILS_SYS_LIBS = @UTILS_SYS_LIBS@
+VENDOR_NAME_SHORT = @VENDOR_NAME_SHORT@
+VERSION = @VERSION@
+WINDOWSWM_CFLAGS = @WINDOWSWM_CFLAGS@
+WINDOWSWM_LIBS = @WINDOWSWM_LIBS@
+WINDRES = @WINDRES@
+X11EXAMPLES_DEP_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@
+X11EXAMPLES_DEP_LIBS = @X11EXAMPLES_DEP_LIBS@
+XDMCP_CFLAGS = @XDMCP_CFLAGS@
+XDMCP_LIBS = @XDMCP_LIBS@
+XDMXCONFIG_DEP_CFLAGS = @XDMXCONFIG_DEP_CFLAGS@
+XDMXCONFIG_DEP_LIBS = @XDMXCONFIG_DEP_LIBS@
+XDMX_CFLAGS = @XDMX_CFLAGS@
+XDMX_LIBS = @XDMX_LIBS@
+XDMX_SYS_LIBS = @XDMX_SYS_LIBS@
+XEPHYR_CFLAGS = @XEPHYR_CFLAGS@
+XEPHYR_INCS = @XEPHYR_INCS@
+XEPHYR_LIBS = @XEPHYR_LIBS@
+XF86CONFIGDIR = @XF86CONFIGDIR@
+XF86CONFIGFILE = @XF86CONFIGFILE@
+XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
+XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
+XKB_BASE_DIRECTORY = @XKB_BASE_DIRECTORY@
+XKB_BIN_DIRECTORY = @XKB_BIN_DIRECTORY@
+XKB_COMPILED_DIR = @XKB_COMPILED_DIR@
+XKM_OUTPUT_DIR = @XKM_OUTPUT_DIR@
+XLIB_CFLAGS = @XLIB_CFLAGS@
+XLIB_LIBS = @XLIB_LIBS@
+XMLTO = @XMLTO@
+XNESTMODULES_CFLAGS = @XNESTMODULES_CFLAGS@
+XNESTMODULES_LIBS = @XNESTMODULES_LIBS@
+XNEST_LIBS = @XNEST_LIBS@
+XNEST_SYS_LIBS = @XNEST_SYS_LIBS@
+XORG_CFLAGS = @XORG_CFLAGS@
+XORG_INCS = @XORG_INCS@
+XORG_LIBS = @XORG_LIBS@
+XORG_MAN_PAGE = @XORG_MAN_PAGE@
+XORG_MODULES_CFLAGS = @XORG_MODULES_CFLAGS@
+XORG_MODULES_LIBS = @XORG_MODULES_LIBS@
+XORG_OS = @XORG_OS@
+XORG_OS_SUBDIR = @XORG_OS_SUBDIR@
+XORG_SGML_PATH = @XORG_SGML_PATH@
+XORG_SYS_LIBS = @XORG_SYS_LIBS@
+XPBPROXY_CFLAGS = @XPBPROXY_CFLAGS@
+XPBPROXY_LIBS = @XPBPROXY_LIBS@
+XQUARTZ_SPARKLE = @XQUARTZ_SPARKLE@
+XRESEXAMPLES_DEP_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@
+XRESEXAMPLES_DEP_LIBS = @XRESEXAMPLES_DEP_LIBS@
+XSERVERCFLAGS_CFLAGS = @XSERVERCFLAGS_CFLAGS@
+XSERVERCFLAGS_LIBS = @XSERVERCFLAGS_LIBS@
+XSERVERLIBS_CFLAGS = @XSERVERLIBS_CFLAGS@
+XSERVERLIBS_LIBS = @XSERVERLIBS_LIBS@
+XSERVER_LIBS = @XSERVER_LIBS@
+XSERVER_SYS_LIBS = @XSERVER_SYS_LIBS@
+XSL_STYLESHEET = @XSL_STYLESHEET@
+XTSTEXAMPLES_DEP_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@
+XTSTEXAMPLES_DEP_LIBS = @XTSTEXAMPLES_DEP_LIBS@
+XVFB_LIBS = @XVFB_LIBS@
+XVFB_SYS_LIBS = @XVFB_SYS_LIBS@
+XWINMODULES_CFLAGS = @XWINMODULES_CFLAGS@
+XWINMODULES_LIBS = @XWINMODULES_LIBS@
+XWIN_LIBS = @XWIN_LIBS@
+XWIN_SERVER_NAME = @XWIN_SERVER_NAME@
+XWIN_SYS_LIBS = @XWIN_SYS_LIBS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+__XCONFIGDIR__ = @__XCONFIGDIR__@
+__XCONFIGFILE__ = @__XCONFIGFILE__@
+abi_ansic = @abi_ansic@
+abi_extension = @abi_extension@
+abi_videodrv = @abi_videodrv@
+abi_xinput = @abi_xinput@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+driverdir = @driverdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+extdir = @extdir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+logdir = @logdir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+moduledir = @moduledir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sdkdir = @sdkdir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+symbol_visibility = @symbol_visibility@
+sysconfdir = @sysconfdir@
+sysconfigdir = @sysconfigdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+appmandir = $(APP_MAN_DIR)
+#appman_PRE = list of application man page files set by calling Makefile.am
+appman_DATA = $(appman_PRE:man=$(APP_MAN_SUFFIX))
+drivermandir = $(DRIVER_MAN_DIR)
+#driverman_PRE = list of driver man page files set by calling Makefile.am
+driverman_DATA = $(driverman_PRE:man=$(DRIVER_MAN_SUFFIX))
+filemandir = $(FILE_MAN_DIR)
+#fileman_PRE = list of file man page files set by calling Makefile.am
+fileman_DATA = $(fileman_PRE:man=$(FILE_MAN_SUFFIX))
+
+# The calling Makefile should only contain man page targets
+# Otherwise the following three global variables may conflict
+EXTRA_DIST = $(appman_PRE) $(driverman_PRE) $(fileman_PRE)
+CLEANFILES = $(appman_DATA) $(driverman_DATA) $(fileman_DATA)
+SUFFIXES = .$(APP_MAN_SUFFIX) .$(DRIVER_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man
+appman_PRE = Xdmx.man
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .$(APP_MAN_SUFFIX) .$(DRIVER_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/manpages.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign hw/dmx/man/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign hw/dmx/man/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appmanDATA: $(appman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appmandir)" || $(MKDIR_P) "$(DESTDIR)$(appmandir)"
+ @list='$(appman_DATA)'; test -n "$(appmandir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appmandir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appmandir)" || exit $$?; \
+ done
+
+uninstall-appmanDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(appman_DATA)'; test -n "$(appmandir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appmandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appmandir)" && rm -f $$files
+install-drivermanDATA: $(driverman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(drivermandir)" || $(MKDIR_P) "$(DESTDIR)$(drivermandir)"
+ @list='$(driverman_DATA)'; test -n "$(drivermandir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(drivermandir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(drivermandir)" || exit $$?; \
+ done
+
+uninstall-drivermanDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(driverman_DATA)'; test -n "$(drivermandir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(drivermandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(drivermandir)" && rm -f $$files
+install-filemanDATA: $(fileman_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(filemandir)" || $(MKDIR_P) "$(DESTDIR)$(filemandir)"
+ @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(filemandir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(filemandir)" || exit $$?; \
+ done
+
+uninstall-filemanDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(filemandir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(filemandir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(appmandir)" "$(DESTDIR)$(drivermandir)" "$(DESTDIR)$(filemandir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-appmanDATA install-drivermanDATA \
+ install-filemanDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-appmanDATA uninstall-drivermanDATA \
+ uninstall-filemanDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-appmanDATA install-data install-data-am \
+ install-drivermanDATA install-dvi install-dvi-am install-exec \
+ install-exec-am install-filemanDATA install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-appmanDATA \
+ uninstall-drivermanDATA uninstall-filemanDATA
+
+
+.man.$(APP_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+.man.$(DRIVER_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+.man.$(FILE_MAN_SUFFIX):
+ $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/hw/dmx/man/Xdmx.man b/hw/dmx/man/Xdmx.man
new file mode 100644
index 0000000..9c8bdea
--- /dev/null
+++ b/hw/dmx/man/Xdmx.man
@@ -0,0 +1,741 @@
+.\" $XFree86$
+.\"
+.\" Copyright 2001-2004 Red Hat Inc., Durham, North Carolina.
+.\" All Rights Reserved.
+.\"
+.\" Permission is hereby granted, free of charge, to any person obtaining
+.\" a copy of this software and associated documentation files (the
+.\" "Software"), to deal in the Software without restriction, including
+.\" without limitation on the rights to use, copy, modify, merge,
+.\" publish, distribute, sublicense, and/or sell copies of the Software,
+.\" and to permit persons to whom the Software is furnished to do so,
+.\" subject to the following conditions:
+.\"
+.\" he above copyright notice and this permission notice (including the
+.\" next paragraph) shall be included in all copies or substantial
+.\" portions of the Software.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+.\" NON-INFRINGEMENT. IN NO EVENT SHALL RED HAT AND/OR THEIR SUPPLIERS
+.\" BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+.\" ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+.\" CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+.\" SOFTWARE.
+.TH Xdmx 1 __vendorversion__
+.SH NAME
+Xdmx - Distributed Multi-head X server
+.SH SYNOPSIS
+.B Xdmx
+[:display] [option ...]
+.SH DESCRIPTION
+.I Xdmx
+is a proxy X server that uses one or more other X servers as its display
+devices. It provides multi-head X functionality for displays that might
+be located on different machines.
+.I Xdmx
+functions as a front-end X server that acts as a proxy to a set of
+back-end X servers. All of the visible rendering is passed to the
+back-end X servers. Clients connect to the
+.I Xdmx
+front-end, and everything appears as it would in a regular multi-head
+configuration. If Xinerama is enabled (e.g., with
+.B +xinerama
+on the command line), the clients see a single large screen.
+.PP
+.I Xdmx
+communicates to the back-end X servers using the standard X11 protocol,
+and standard and/or commonly available X server extensions.
+.SH OPTIONS
+In addition to the normal X server options described in the
+.I Xserver(1)
+manual page,
+.I Xdmx
+accepts the following command line switches:
+.TP 8
+.BI "\-display " display-name
+This specifies the name(s) of the back-end X server display(s) to connect
+to. This option may be specified multiple times to connect to more than
+one back-end display. The first is used as screen 0, the second as screen 1,
+etc. If this option is omitted, the
+.B $DISPLAY
+environment variable is used as the single back-end X server display.
+.sp
+.TP 8
+.BI "\-xinput " input-source
+This specifies the source to use for XInput extension devices. The
+choices are the same as for
+.BR "\-input " ,
+described below, except that core devices on backend servers cannot be
+treated as XInput extension devices. (Although extension devices on
+backend and console servers are supported as extension devices under
+.IR Xdmx ).
+.sp
+.TP 8
+.BI "\-input " input-source
+This specifies the source to use for the core input devices. The choices are:
+.RS
+.TP 4
+.B dummy
+A set of dummy core input drivers are used. These never generate any
+input events.
+.sp
+.TP 4
+.B local
+The raw keyboard and pointer from the local computer are used. A
+comma-separated list of driver names can be appended. For example, to
+select the example Linux keyboard and PS/2 mouse driver use:
+.BR "-input local,kbd,ps2" .
+The following drivers have been implemented for Linux: kbd, ms (a
+two-button Microsoft mouse driver), ps2 (a PS/2 mouse driver), usb-mou
+(a USB mouse driver), usb-kbd (a USB keyboard driver), and usb-oth (a
+USB non-keyboard, non-mouse driver). Additional drivers may be
+implemented in the future. Appropriate defaults will be used if no
+comma-separated list is provided.
+.sp
+.TP 4
+.I display-name
+If the display-name is a back-end server, then core input events are
+taken from the server specified. Otherwise, a console window will be
+opened on the specified display.
+.sp
+If the
+.I display-name
+is followed by ",xi" then XInput extension devices on the display will
+be used as
+.I Xdmx
+XInput extension devices. If the
+.I display-name
+is followed by ",noxi" then XInput extension devices on the display will
+.B not
+be used as
+.I Xdmx
+XInput extension devices. Currently, the default is ",xi".
+.sp
+If the
+.I display-name
+is followed by ",console" and the
+.I display-name
+refers to a display that is used as a backend display, then a console
+window will be opened on that display
+.B and
+that display will be treated as a backend display. Otherwise (or if
+",noconsole" is used), the display will be treated purely as a backend
+or a console display, as described above.
+.sp
+If the
+.I display-name
+is followed by ",windows", then outlines of the windows on the backend
+will be displayed inside the console window. Otherwise (or if
+",nowindows" is used), the console window will not display the outlines
+of backend windows. (This option only applies to console input.)
+.sp
+If the
+.I display-name
+is followed by ",xkb", then the next 1 to 3 comma-separated parameters
+will specify the keycodes, symbols, and geometry of the keyboard for
+this input device. For example, ",xkb,xfree86,pc104" will specify that
+the "xfree86" keycodes and the "pc104" symbols should be used to
+initialize the keyboard. For an SGI keyboard, ",xkb,sgi/indy(pc102)"
+might be useful. A list of keycodes, symbols, and geometries can be
+found in
+.IR /usr/X11R6/lib/X11/xkb .
+If this option is not specified, the input device will be queried,
+perhaps using the XKEYBOARD extension.
+.RE
+.sp
+.RS
+If this option isn't specified, the default input source is the first
+back-end server (the one used for screen 0). The console window shows
+the layout of the back-end display(s) and pointer movements and key
+presses within the console window will be used as core input devices.
+.sp
+Several special function keys are active, depending on the input
+source:
+.sp
+.RS
+.B Ctrl-Alt-q
+will terminate the
+.I Xdmx
+server in all modes.
+.sp
+.B Ctrl-Alt-g
+will toggle a
+server grab in console mode (a special cursor, currently a spider, is
+used to indicate an active server grab).
+.sp
+.B Ctrl-Alt-f
+will toggle fine-grain motion in console mode (a special cursor,
+currently a cross hair, is used to indicate this mode). If this mode is
+combined with a server grab, then the cursor will have 4 lines instead
+of only 2.
+.sp
+.BR Ctrl-Alt-F1 " through " Ctrl-Alt-F12
+will switch to another VC in local (raw) mode.
+.RE
+.RE
+.sp
+.TP 8
+.BI "-shadowfb"
+This option turns on (legacy) support for the shadow frame buffer.
+.sp
+.TP 8
+.BI "-noshadowfb"
+This option turns off (legacy) support for the shadow frame buffer.
+Note that this option has been deprecated and will be removed in the
+next release.
+.sp
+.TP 8
+.BI "-nomulticursor"
+This option turns off support for displaying multiple cursors on
+overlapped back-end displays. This option is available for testing and
+benchmarking purposes.
+.sp
+.TP 8
+.BI "-fontpath"
+This option sets the
+.I Xdmx
+server's default font path. This option can be specified multiple times
+to accommodate multiple font paths. See the
+.B "FONT PATHS"
+section below for very important information regarding setting the
+default font path.
+.sp
+.TP 8
+.BI "-configfile " filename
+Specify the configuration file that should be read. Note that if the
+.B \-display
+command-line option is used, then the configuration file will be
+ignored.
+.sp
+.TP 8
+.BI "-config " name
+Specify a configuration to use. The
+.I name
+will be the name following the
+.B virtual
+keyword in the configuration file.
+.sp
+.TP 8
+.BI "-stat " "interval screens"
+This option enables the display of performance statistics. The interval
+is in seconds. The screens is a count of the number of back-end screens
+for which data is printed each interval. Specifying 0 for screens will
+display data for all screens.
+.sp
+For each screen, the following information is printed: the screen
+number, an absolute count of the number of XSync() calls made
+(SyncCount), the rate of these calls during the previous interval
+(Sync/s), the average round-trip time (in microseconds) of the last 10
+XSync() calls (avSync), the maximum round-trip time (in microseconds) of
+the last 10 XSync calls (mxSync), the average number of XSync() requests
+that were pending but not yet processed for each of the last 10
+processed XSync() calls, the maximum number of XSync() requests that
+were pending but not yet processed for each of the last 10 processed
+XSync() calls, and a histogram showing the distribution of the times of
+all of the XSync() calls that were made during the previous interval.
+.sp
+(The length of the moving average and the number and value of histogram
+bins are configurable at compile time in the
+.B dmxstat.h
+header file.)
+.sp
+.TP 8
+.BI "-syncbatch " interval
+This option sets the
+.I interval
+in milliseconds for XSync() batching. An
+.I interval
+less than or equal to 0 will disable XSync() batching. The default
+.I interval
+is 100 ms.
+.sp
+.TP 8
+.BI "-nooffscreenopt"
+This option disables the offscreen optimization. Since the lazy window
+creation optimization requires the offscreen optimization to be enabled,
+this option will also disable the lazy window creation optimization.
+.sp
+.TP 8
+.BI "-nowindowopt"
+This option disables the lazy window creation optimization.
+.sp
+.TP 8
+.BI "-nosubdivprims"
+This option disables the primitive subdivision optimization.
+.sp
+.TP 8
+.BI "-noxkb"
+Disable use of the XKB extension for communication with the back end
+displays. (Combine with
+.B "-kb"
+to disable all use of XKB.)
+.sp
+.TP 8
+.BI "-depth " int
+This option sets the root window's default depth. When choosing a
+default visual from those available on the back-end X server, the first
+visual with that matches the depth specified is used.
+.sp
+This option can be combined with the
+.BI "-cc"
+option, which specifies the default color visual class, to force the use
+of a specific depth and color class for the root window.
+.sp
+.TP 8
+.BI "-norender"
+This option disables the RENDER extension.
+.sp
+.TP 8
+.BI "-noglxproxy"
+This option disables GLX proxy -- the build-in GLX extension
+implementation that is DMX aware.
+.sp
+.TP 8
+.BI "-noglxswapgroup"
+This option disables the swap group and swap barrier extensions in GLX
+proxy.
+.sp
+.TP 8
+.BI "-glxsyncswap"
+This option enables synchronization after a swap buffers call by waiting
+until all X protocol has been processed. When a client issues a
+glXSwapBuffers request, Xdmx relays that request to each back-end X
+server, and those requests are buffered along with all other protocol
+requests. However, in systems that have large network buffers, this
+buffering can lead to the set of back-end X servers handling the swap
+buffers request asynchronously. With this option, an XSync() request is
+issued to each back-end X server after sending the swap buffers request.
+The XSync() requests will flush all buffered protocol (including the
+swap buffers requests) and wait until the back-end X servers have
+processed those requests before continuing. This option does not wait
+until all GL commands have been processed so there might be previously
+issued commands that are still being processed in the GL pipe when the
+XSync() request returns. See the
+.BI "-glxfinishswap"
+option below if Xdmx should wait until the GL commands have been
+processed.
+.sp
+.TP 8
+.BI "-glxfinishswap"
+This option enables synchronization after a swap buffers call by waiting
+until all GL commands have been completed. It is similar to the
+.BI "-glxsyncswap"
+option above; however, instead of issuing an XSync(), it issues a
+glFinish() request to each back-end X server after sending the swap
+buffers requests. The glFinish() request will flush all buffered
+protocol requests, process both X and GL requests, and wait until all
+previously called GL commands are complete before returning.
+.sp
+.TP 8
+.BI "-ignorebadfontpaths"
+This option ignores font paths that are not available on all back-end
+servers by removing the bad font path(s) from the default font path
+list. If no valid font paths are left after removing the bad paths, an
+error to that effect is printed in the log.
+.sp
+.TP 8
+.BI "-addremovescreens"
+This option enables the dynamic addition and removal of screens, which
+is disabled by default. Note that GLXProxy and Render do not yet
+support dynamic addition and removal of screens, and must be disabled
+via the
+.BI "-noglxproxy"
+and
+.BI "-norender"
+command line options described above.
+.sp
+.TP 8
+.BI "-param"
+This option specifies parameters on the command line. Currently, only
+parameters dealing with XKEYBOARD configuration are supported. These
+parameters apply only to the core keyboard. Parameter values are
+installation-dependent. Please see
+.I /usr/X11R6/lib/X11/xkb
+or a similar directory for complete information.
+.RS
+.TP 8
+.B XkbRules
+Defaults to "xfree86". Other values may include "sgi" and "sun".
+.sp
+.TP 8
+.B XkbModel
+Defaults to "pc101". When used with "xfree86" rules, other values may
+include "pc102", "pc104", "pc105", "microsoft", and many others. When
+used with "sun" rules, other values may include "type4" and "type5".
+.sp
+.TP 8
+.B XkbLayout
+Defaults to "us". Other country codes and "dvorak" are usually
+available.
+.sp
+.TP 8
+.B XkbVariant
+Defaults to "".
+.sp
+.TP 8
+.B XkbOptions
+Defaults to "".
+.RE
+.SH "CONFIGURATION FILE GRAMMAR"
+The following words and tokens are reserved:
+.RS
+.B virtual
+.B display
+.B wall
+.B option
+.B param
+.B {
+.B }
+.B ;
+.B #
+.RE
+.PP
+Comments start with a
+.B #
+mark and extend to the end of the line. They may appear anywhere. If a
+configuration file is read into
+.BR xdmxconfig ,
+the comments in that file will be preserved, but will not be editable.
+.PP
+The grammar is as follows:
+.RS
+virtual-list ::= [ virtual-list ] | virtual
+
+virtual ::=
+.B virtual
+[ name ] [ dim ]
+.B {
+dw-list
+.B }
+
+dw-list ::= [ dw-list ] | dw
+
+dw ::= display | wall | option
+
+display ::=
+.B display
+name [ geometry ] [ / geometry ] [ origin ]
+.B ;
+
+wall ::=
+.B wall
+[ dim ] [ dim ] name-list
+.B ;
+
+option ::=
+.B option
+name-list
+.B ;
+
+param ::=
+.B param
+name-list
+.B ;
+
+param ::=
+.B param {
+param-list
+.B }
+
+param-list ::= [ param-list ] | name-list
+.B ;
+
+name-list ::= [ name-list ] | name
+
+name ::= string | double-quoted-string
+
+dim ::= integer
+.B x
+integer
+
+geometry ::= [ integer
+.B x
+integer ] [ signed-integer signed-integer ]
+
+origin ::=
+.B @
+integer
+.B x
+integer
+.RE
+.PP
+The name following
+.B virtual
+is used as an identifier for the configuration, and may be passed to
+.B Xdmx
+using the
+.B \-config
+command line option. The name of a display should be standard X display
+name, although no checking is performed (e.g., "machine:0").
+.PP
+For names, double quotes are optional unless the name is reserved or
+contains spaces.
+.PP
+The first dimension following
+.B wall
+is the dimension for tiling (e.g., 2x4 or 4x4). The second dimension
+following
+.B wall
+is the dimension of each display in the wall (e.g., 1280x1024).
+.PP
+The first geometry following
+.B display
+is the geometry of the screen window on the backend server. The second
+geometry, which is always preceeded by a slash, is the geometry of the
+root window. By default, the root window has the same geometry as the
+screen window.
+.PP
+The
+.B option
+line can be used to specify any command-line options (e.g.,
+.BR \-input ).
+(It cannot be used to specify the name of the front-end display.) The
+option line is processed once at server startup, just line command line
+options. This behavior may be unexpected.
+.SH "CONFIGURATION FILE EXAMPLES"
+Two displays being used for a desktop may be specified in any of the
+following formats:
+.RS
+.nf
+virtual example0 {
+ display d0:0 1280x1024 @0x0;
+ display d1:0 1280x1024 @1280x0;
+}
+.sp
+virtual example1 {
+ display d0:0 1280x1024;
+ display d1:0 @1280x0;
+}
+.sp
+virtual example2 {
+ display "d0:0";
+ display "d1:0" @1280x0;
+}
+.sp
+virtual example3 { wall 2x1 d0:0 d1:0; }
+.fi
+.RE
+A 4x4 wall of 16 total displays could be specified as follows (if no
+tiling dimension is specified, an approximate square is used):
+.RS
+.nf
+virtual example4 {
+ wall d0:0 d1:0 d2:0 d3:0
+ d4:0 d5:0 d6:0 d7:0
+ d8:0 d9:0 da:0 db:0
+ dc:0 dd:0 de:0 df:0;
+}
+.fi
+.RE
+.SH "FONT PATHS"
+The font path used by the
+.I Xdmx
+front-end server will be propagated to each back-end server,which
+requires that each back-end server have access to the exact same font
+paths as the front-end server. This can be most easily handled by
+either using a font server (e.g., xfs) or by remotely mounting the font
+paths on each back-end server, and then setting the
+.I Xdmx
+server's default font path with the
+-I "-fontpath"
+command line option described above.
+.PP
+For example, if you specify a font path with the following command line:
+.RS
+Xdmx :1 -display d0:0 -fontpath /usr/fonts/75dpi/ -fontpath /usr/fonts/Type1/ +xinerama
+.RE
+Then, /usr/fonts/75dpi/ and /usr/fonts/Type1/ must be valid font paths
+on the
+.I Xdmx
+server and all back-end server, which is d0 in this example.
+.PP
+Font servers can also be specified with the
+.I "-fontpath"
+option. For example, let's assume that a properly configured font
+server is running on host d0. Then, the following command line
+.RS
+Xdmx :1 -display d0:0 -display d1:0 -fontpath tcp/d0:7100 +xinerama
+.RE
+will initialize the front-end
+.I Xdmx
+server and each of the back-end servers to use the font server on d0.
+.PP
+Some fonts might not be supported by either the front-end or the
+back-end servers. For example, let's assume the front-end
+.I Xdmx
+server includes support Type1 fonts, but one of the back-end servers
+does not. Let's also assume that the default font path for
+.I Xdmx
+includes Type1 fonts in its font path. Then, when
+.I Xdmx
+initializes the default font path to load the default font, the font
+path that includes Type1 fonts (along with the other default font paths
+that are used by the
+.I Xdmx
+server) is sent to the back-end server that cannot handle Type1 fonts.
+That back-end server then rejects the font path and sends an error back
+to the
+.I Xdmx
+server.
+.I Xdmx
+then prints an error message and exits because it failed to set the
+default font path and was unable load the default font.
+.PP
+To fix this error, the offending font path must be removed from the
+default font path by using a different
+.I "-fontpath"
+command line option.
+.PP
+The
+.I "-fontpath"
+option can also be added to the configuration file as described above.
+.SH "COMMAND-LINE EXAMPLES"
+The back-end machines are d0 and d1, core input is from the pointer and
+keyboard attached to d0, clients will refer to :1 when opening windows:
+.RS
+Xdmx :1 -display d0:0 -display d1:0 +xinerama
+.RE
+.PP
+As above, except with core input from d1:
+.RS
+Xdmx :1 -display d0:0 -display d1:0 -input d1:0 +xinerama
+.RE
+.PP
+As above, except with core input from a console window on the local
+display:
+.RS
+Xdmx :1 -display d0:0 -display d1:0 -input :0 +xinerama
+.RE
+.PP
+As above, except with core input from the local keyboard and mouse:
+.RS
+Xdmx :1 -display d0:0 -display d1:0 -input local,kbd,ps2 +xinerama
+.RE
+Note that local input can be used under Linux while another X session is
+running on :0 (assuming the user can access the Linux console tty and
+mouse devices): a new (blank) VC will be used for keyboard input on the
+local machine and the Ctrl-Alt-F* sequence will be available to change
+to another VC (possibly back to another X session running on the local
+machine). Using Ctrl-Alt-Backspace on the blank VC will terminate the
+Xdmx session and return to the original VC.
+.PP
+This example uses the configuration file shown in the previous section:
+.RS
+Xdmx :1 -input :0 +xinerama -configfile filename -config example2
+.RE
+With this configuration file line:
+.RS
+option -input :0 +xinerama;
+.RE
+the command line can be shortened to:
+.RS
+Xdmx :1 -configfile filename -config example2
+.RE
+.SH "USING THE USB DEVICE DRIVERS"
+.P
+The USB device drivers use the devices called
+.IR /dev/input/event0 ", " /dev/input/event1 ", etc."
+under Linux. These devices are driven using the
+.I evdev
+Linux kernel module, which is part of the hid suite. Please note that
+if you load the
+.I mousedev
+or
+.I kbddev
+Linux kernel modules, then USB devices will appear as core Linux input
+devices and you will not be able to select between using the device only
+as an
+.I Xdmx
+core device or an
+.I Xdmx
+XInput extension device. Further, you may be unable to unload the
+.I mousedev
+Linux kernel module if
+.I XFree86
+is configured to use
+.I /dev/input/mice
+as an input device (this is quite helpful for laptop users and is set up
+by default under some Linux distributions, but should be changed if USB
+devices are to be used with
+.IR Xdmx ).
+.PP
+The USB device drivers search through the Linux devices for the first
+mouse, keyboard, or non-mouse-non-keyboard Linux device and use that
+device.
+.SH "KEYBOARD INITIALIZATION"
+.PP
+If
+.I Xdmx
+was invoked with
+.I \-xkb
+or was
+.B not
+compiled to use the XKEYBOARD extension, then a keyboard on a backend or
+console will be initialized using the map that the host X server
+provides.
+.PP
+If the XKEYBOARD extension is used for both
+.I Xdmx
+and the host X server for the keyboard (i.e., the backend or console X
+server), then the type of the keyboard will
+be obtained from the host X server and the keyboard under
+.I Xdmx
+will be initialized with that information. Otherwise, the default type
+of keyboard will be initialized. In both cases, the map from the host X
+server will
+.B not
+be used. This means that different initial behavior may be noted with
+and without XKEYBOARD. Consistent and expected results will be obtained
+by running XKEYBOARD on all servers and by avoiding the use of
+.I xmodmap
+on the backend or console X servers prior to starting
+.IR Xdmx .
+.PP
+If
+.I \-xkbmap
+is specified on the
+.I Xdmx
+command line, then that map will currently be used for all keyboards.
+.SH "MULTIPLE CORE KEYBOARDS"
+X was not designed to support multiple core keyboards. However,
+.I Xdmx
+provides some support for multiple core keyboards. Best results will be
+obtained if all of the keyboards are of the same type and are using the
+same keyboard map. Because the X server passes raw key code information
+to the X client, key symbols for keyboards with different key maps would
+be different if the key code for each keyboard was sent without
+translation to the client. Therefore,
+.I Xdmx
+will attempt to translate the key code from a core keyboard to the key
+code for the key with the same key symbol of the
+.B first
+core keyboard that was loaded. If the key symbol appears in both maps,
+the results will be expected. Otherwise, the second core keyboard will
+return a NoSymbol key symbol for some keys that would have been
+translated if it was the first core keyboard.
+.ig
+.SH ENVIRONMENT
+..
+.ig
+.SH FILES
+..
+.SH "SEE ALSO"
+.BR DMX "(3X), " X "(__miscmansuffix__), " Xserver "(1), " xdmxconfig "(1), "
+.BR vdltodmx "(1), " xfs "(1), " xkbcomp (1)
+.SH AUTHORS
+Kevin E. Martin
+.I <kem@redhat.com>,
+David H. Dawes
+.I <dawes@xfree86.org>,
+and
+Rickard E. (Rik) Faith
+.IR <faith@redhat.com> .
+.PP
+Portions of
+.I Xdmx
+are based on code from The XFree86 Project
+.RI ( http://www.xfree86.org )
+and X.Org
+.RI ( http://www.x.org ).
contact: Jan Huwald // Impressum