commit
757fdc2454
@ -0,0 +1,369 @@
|
|||||||
|
main.o: main.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h /usr/include/errno.h /usr/include/bits/errno.h \
|
||||||
|
/usr/include/linux/errno.h /usr/include/asm/errno.h \
|
||||||
|
/usr/include/sys/socket.h /usr/include/bits/socket.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h \
|
||||||
|
/usr/include/asm/socket.h /usr/include/asm/sockios.h \
|
||||||
|
/usr/include/netinet/in.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h /usr/include/unistd.h \
|
||||||
|
/usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
|
||||||
|
/usr/include/getopt.h /usr/include/signal.h \
|
||||||
|
/usr/include/bits/signum.h /usr/include/bits/siginfo.h \
|
||||||
|
/usr/include/bits/sigaction.h /usr/include/bits/sigcontext.h \
|
||||||
|
/usr/include/asm/sigcontext.h /usr/include/bits/sigstack.h rfb.h \
|
||||||
|
include/Xserver/scrnintstr.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h
|
||||||
|
rfbserver.o: rfbserver.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h /usr/include/unistd.h \
|
||||||
|
/usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
|
||||||
|
/usr/include/getopt.h /usr/include/pwd.h /usr/include/sys/socket.h \
|
||||||
|
/usr/include/bits/socket.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h \
|
||||||
|
/usr/include/asm/socket.h /usr/include/asm/sockios.h \
|
||||||
|
/usr/include/netinet/in.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h /usr/include/arpa/inet.h rfb.h \
|
||||||
|
include/Xserver/scrnintstr.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h
|
||||||
|
miregion.o: miregion.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h include/Xserver/miscstruct.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/X11/Xprotostr.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/gc.h include/X11/Xproto.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/pixmap.h
|
||||||
|
auth.o: auth.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h rfb.h include/Xserver/scrnintstr.h \
|
||||||
|
include/Xserver/screenint.h include/Xserver/misc.h \
|
||||||
|
include/X11/Xosdefs.h include/X11/Xfuncproto.h include/X11/Xmd.h \
|
||||||
|
include/X11/X.h include/Xserver/os.h include/X11/Xalloca.h \
|
||||||
|
/usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/socket.h \
|
||||||
|
/usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
|
||||||
|
/usr/include/asm/sockios.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h
|
||||||
|
sockets.o: sockets.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \
|
||||||
|
/usr/include/bits/endian.h /usr/include/sys/select.h \
|
||||||
|
/usr/include/bits/select.h /usr/include/bits/sigset.h \
|
||||||
|
/usr/include/sys/sysmacros.h /usr/include/sys/time.h \
|
||||||
|
/usr/include/bits/time.h /usr/include/sys/socket.h \
|
||||||
|
/usr/include/bits/socket.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h \
|
||||||
|
/usr/include/asm/socket.h /usr/include/asm/sockios.h \
|
||||||
|
/usr/include/netinet/in.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h /usr/include/netinet/tcp.h \
|
||||||
|
/usr/include/netdb.h /usr/include/rpc/netdb.h /usr/include/fcntl.h \
|
||||||
|
/usr/include/bits/fcntl.h /usr/include/errno.h \
|
||||||
|
/usr/include/bits/errno.h /usr/include/linux/errno.h \
|
||||||
|
/usr/include/asm/errno.h /usr/include/unistd.h \
|
||||||
|
/usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
|
||||||
|
/usr/include/getopt.h /usr/include/pthread.h /usr/include/sched.h \
|
||||||
|
/usr/include/bits/sched.h /usr/include/signal.h \
|
||||||
|
/usr/include/bits/pthreadtypes.h /usr/include/bits/sigthread.h rfb.h \
|
||||||
|
include/Xserver/scrnintstr.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h
|
||||||
|
xalloc.o: xalloc.c include/X11/Xos.h include/X11/Xosdefs.h \
|
||||||
|
/usr/include/sys/types.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/include/bits/types.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/string.h /usr/include/fcntl.h /usr/include/bits/fcntl.h \
|
||||||
|
/usr/include/unistd.h /usr/include/bits/posix_opt.h \
|
||||||
|
/usr/include/bits/confname.h /usr/include/getopt.h \
|
||||||
|
/usr/include/sys/time.h /usr/include/bits/time.h /usr/include/stdio.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/libio.h /usr/include/_G_config.h \
|
||||||
|
/usr/include/bits/stdio_lim.h include/Xserver/misc.h \
|
||||||
|
include/X11/Xfuncproto.h include/X11/Xmd.h include/X11/X.h \
|
||||||
|
include/Xserver/os.h include/X11/Xalloca.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/input.h include/Xserver/screenint.h \
|
||||||
|
include/X11/Xproto.h include/X11/Xprotostr.h include/Xserver/window.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/miscstruct.h include/Xserver/opaque.h \
|
||||||
|
/usr/include/signal.h /usr/include/bits/signum.h \
|
||||||
|
/usr/include/bits/siginfo.h /usr/include/bits/sigaction.h \
|
||||||
|
/usr/include/bits/sigcontext.h /usr/include/asm/sigcontext.h \
|
||||||
|
/usr/include/bits/sigstack.h /usr/include/sys/resource.h \
|
||||||
|
/usr/include/bits/resource.h /usr/include/sys/stat.h \
|
||||||
|
/usr/include/bits/stat.h /usr/include/ctype.h /usr/include/stdlib.h \
|
||||||
|
/usr/include/alloca.h
|
||||||
|
stats.o: stats.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h rfb.h include/Xserver/scrnintstr.h \
|
||||||
|
include/Xserver/screenint.h include/Xserver/misc.h \
|
||||||
|
include/X11/Xosdefs.h include/X11/Xfuncproto.h include/X11/Xmd.h \
|
||||||
|
include/X11/X.h include/Xserver/os.h include/X11/Xalloca.h \
|
||||||
|
/usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/socket.h \
|
||||||
|
/usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
|
||||||
|
/usr/include/asm/sockios.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h
|
||||||
|
corre.o: corre.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h rfb.h include/Xserver/scrnintstr.h \
|
||||||
|
include/Xserver/screenint.h include/Xserver/misc.h \
|
||||||
|
include/X11/Xosdefs.h include/X11/Xfuncproto.h include/X11/Xmd.h \
|
||||||
|
include/X11/X.h include/Xserver/os.h include/X11/Xalloca.h \
|
||||||
|
/usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/socket.h \
|
||||||
|
/usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
|
||||||
|
/usr/include/asm/sockios.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h
|
||||||
|
hextile.o: hextile.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h rfb.h \
|
||||||
|
include/Xserver/scrnintstr.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/sys/types.h \
|
||||||
|
/usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/bits/socket.h /usr/include/bits/sockaddr.h \
|
||||||
|
/usr/include/asm/socket.h /usr/include/asm/sockios.h \
|
||||||
|
/usr/include/bits/in.h /usr/include/bits/byteswap.h
|
||||||
|
rre.o: rre.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h rfb.h \
|
||||||
|
include/Xserver/scrnintstr.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/sys/types.h \
|
||||||
|
/usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/bits/socket.h /usr/include/bits/sockaddr.h \
|
||||||
|
/usr/include/asm/socket.h /usr/include/asm/sockios.h \
|
||||||
|
/usr/include/bits/in.h /usr/include/bits/byteswap.h
|
||||||
|
translate.o: translate.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h \
|
||||||
|
/usr/include/stdlib.h /usr/include/sys/types.h /usr/include/time.h \
|
||||||
|
/usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/alloca.h rfb.h include/Xserver/scrnintstr.h \
|
||||||
|
include/Xserver/screenint.h include/Xserver/misc.h \
|
||||||
|
include/X11/Xosdefs.h include/X11/Xfuncproto.h include/X11/Xmd.h \
|
||||||
|
include/X11/X.h include/Xserver/os.h include/X11/Xalloca.h \
|
||||||
|
/usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/bits/socket.h \
|
||||||
|
/usr/include/bits/sockaddr.h /usr/include/asm/socket.h \
|
||||||
|
/usr/include/asm/sockios.h /usr/include/bits/in.h \
|
||||||
|
/usr/include/bits/byteswap.h tableinittctemplate.c \
|
||||||
|
tabletranstemplate.c
|
||||||
|
cutpaste.o: cutpaste.c /usr/include/stdio.h /usr/include/features.h \
|
||||||
|
/usr/include/sys/cdefs.h /usr/include/gnu/stubs.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stddef.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/stdarg.h \
|
||||||
|
/usr/include/bits/types.h /usr/include/libio.h \
|
||||||
|
/usr/include/_G_config.h /usr/include/bits/stdio_lim.h rfb.h \
|
||||||
|
include/Xserver/scrnintstr.h include/Xserver/screenint.h \
|
||||||
|
include/Xserver/misc.h include/X11/Xosdefs.h include/X11/Xfuncproto.h \
|
||||||
|
include/X11/Xmd.h include/X11/X.h include/Xserver/os.h \
|
||||||
|
include/X11/Xalloca.h /usr/include/string.h include/X11/Xfuncs.h \
|
||||||
|
include/Xserver/miscstruct.h include/X11/Xprotostr.h \
|
||||||
|
include/Xserver/region.h include/Xserver/regionstr.h \
|
||||||
|
include/Xserver/pixmap.h include/Xserver/gc.h include/X11/Xproto.h \
|
||||||
|
include/Xserver/colormap.h include/Xserver/window.h \
|
||||||
|
include/Xserver/cursor.h include/Xserver/validate.h \
|
||||||
|
include/Xserver/dix.h include/Xserver/input.h rfbproto.h \
|
||||||
|
libvncauth/vncauth.h /usr/include/netinet/in.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/limits.h \
|
||||||
|
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/include/syslimits.h \
|
||||||
|
/usr/include/limits.h /usr/include/bits/posix1_lim.h \
|
||||||
|
/usr/include/bits/local_lim.h /usr/include/linux/limits.h \
|
||||||
|
/usr/include/bits/posix2_lim.h /usr/include/stdint.h \
|
||||||
|
/usr/include/bits/wordsize.h /usr/include/sys/types.h \
|
||||||
|
/usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \
|
||||||
|
/usr/include/sys/select.h /usr/include/bits/select.h \
|
||||||
|
/usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \
|
||||||
|
/usr/include/bits/socket.h /usr/include/bits/sockaddr.h \
|
||||||
|
/usr/include/asm/socket.h /usr/include/asm/sockios.h \
|
||||||
|
/usr/include/bits/in.h /usr/include/bits/byteswap.h
|
@ -0,0 +1,21 @@
|
|||||||
|
set args -desktop 'foobie bletch'
|
||||||
|
r
|
||||||
|
quit
|
||||||
|
where
|
||||||
|
info thread
|
||||||
|
info threads
|
||||||
|
thr 1
|
||||||
|
where
|
||||||
|
quit
|
||||||
|
quit
|
||||||
|
r
|
||||||
|
where
|
||||||
|
info threads
|
||||||
|
thr 2
|
||||||
|
where
|
||||||
|
f 31
|
||||||
|
kill
|
||||||
|
r
|
||||||
|
r
|
||||||
|
r
|
||||||
|
quit
|
@ -0,0 +1,63 @@
|
|||||||
|
CC=gcc
|
||||||
|
CFLAGS=-g -Wall
|
||||||
|
#CFLAGS=-O2 -Wall
|
||||||
|
RANLIB=ranlib
|
||||||
|
|
||||||
|
INCLUDES=-I. -Ilibvncauth -Iinclude -Iinclude/X11 -Iinclude/Xserver
|
||||||
|
VNCAUTHLIB=-Llibvncauth -lvncauth
|
||||||
|
VNCSERVERLIB=-L. -lvncserver -lz -ljpeg
|
||||||
|
|
||||||
|
# These two lines enable useage of PThreads
|
||||||
|
CFLAGS += -DHAVE_PTHREADS
|
||||||
|
VNCSERVERLIB += -lpthread
|
||||||
|
|
||||||
|
LIBS=$(VNCSERVERLIB) $(VNCAUTHLIB)
|
||||||
|
|
||||||
|
# for Mac OS X
|
||||||
|
OSX_LIBS = -framework ApplicationServices -framework Carbon
|
||||||
|
|
||||||
|
# for Example
|
||||||
|
PTHREAD_LIBS = -lpthread
|
||||||
|
|
||||||
|
SOURCES=main.c rfbserver.c miregion.c auth.c sockets.c xalloc.c \
|
||||||
|
stats.c corre.c hextile.c rre.c translate.c cutpaste.c \
|
||||||
|
zlib.c tight.c
|
||||||
|
OBJS=main.o rfbserver.o miregion.o auth.o sockets.o xalloc.o \
|
||||||
|
stats.o corre.o hextile.o rre.o translate.o cutpaste.o \
|
||||||
|
zlib.o tight.o
|
||||||
|
|
||||||
|
all: example storepasswd
|
||||||
|
|
||||||
|
install_OSX: OSXvnc-server
|
||||||
|
cp OSXvnc-server storepasswd ../OSXvnc/build/OSXvnc.app/Contents/MacOS
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(CC) $(CFLAGS) $(INCLUDES) -c $<
|
||||||
|
|
||||||
|
libvncserver.a: $(OBJS)
|
||||||
|
$(AR) cru $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
example: example.o libvncauth/libvncauth.a libvncserver.a
|
||||||
|
$(CC) -o example example.o $(LIBS) $(PTHREAD_LIBS)
|
||||||
|
|
||||||
|
OSXvnc-server: mac.o libvncauth/libvncauth.a libvncserver.a
|
||||||
|
$(CC) -o OSXvnc-server mac.o $(LIBS) $(OSX_LIBS)
|
||||||
|
|
||||||
|
storepasswd: storepasswd.o libvncauth/libvncauth.a
|
||||||
|
$(CC) -o storepasswd storepasswd.o $(VNCAUTHLIB)
|
||||||
|
|
||||||
|
libvncauth/libvncauth.a:
|
||||||
|
(cd libvncauth; make)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJS) *~ core "#"* *.bak *.orig storepasswd.o *.a example.o \
|
||||||
|
libvncauth/*.o libvncauth/*~ libvncauth/*.a
|
||||||
|
|
||||||
|
realclean: clean
|
||||||
|
rm -f OSXvnc-server storepasswd
|
||||||
|
|
||||||
|
depend:
|
||||||
|
$(CC) -M $(INCLUDES) $(SOURCES) >.depend
|
||||||
|
|
||||||
|
#include .depend
|
@ -0,0 +1,19 @@
|
|||||||
|
OSXvnc: a VNC server for Mac OS X
|
||||||
|
Copyright (C) 2001 Dan McGuirk
|
||||||
|
|
||||||
|
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 2
|
||||||
|
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, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.dfdf
|
||||||
|
|
||||||
|
|
||||||
|
For help with OSXvnc, please visit http://www.osxvnc.com/.
|
@ -0,0 +1,17 @@
|
|||||||
|
.cutpaste
|
||||||
|
|
||||||
|
httpd
|
||||||
|
|
||||||
|
.other encodings
|
||||||
|
|
||||||
|
adapt rdp2vnc (rdesktop)
|
||||||
|
|
||||||
|
udp
|
||||||
|
|
||||||
|
rfbCloseClient, rfbConnect, ConnectToTcpAddr
|
||||||
|
|
||||||
|
CORBA
|
||||||
|
|
||||||
|
translate.c: warning about non 8-bit colourmaps
|
||||||
|
|
||||||
|
cursors
|
@ -0,0 +1,141 @@
|
|||||||
|
/*
|
||||||
|
* auth.c - deal with authentication.
|
||||||
|
*
|
||||||
|
* This file implements the VNC authentication protocol when setting up an RFB
|
||||||
|
* connection.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
|
||||||
|
char *rfbAuthPasswdFile = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbAuthNewClient is called when we reach the point of authenticating
|
||||||
|
* a new client. If authentication isn't being used then we simply send
|
||||||
|
* rfbNoAuth. Otherwise we send rfbVncAuth plus the challenge.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbAuthNewClient(cl)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
char buf[4 + CHALLENGESIZE];
|
||||||
|
int len;
|
||||||
|
|
||||||
|
cl->state = RFB_AUTHENTICATION;
|
||||||
|
|
||||||
|
if (rfbAuthPasswdFile && !cl->reverseConnection) {
|
||||||
|
|
||||||
|
*(CARD32 *)buf = Swap32IfLE(rfbVncAuth);
|
||||||
|
vncRandomBytes(cl->authChallenge);
|
||||||
|
memcpy(&buf[4], (char *)cl->authChallenge, CHALLENGESIZE);
|
||||||
|
len = 4 + CHALLENGESIZE;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
*(CARD32 *)buf = Swap32IfLE(rfbNoAuth);
|
||||||
|
len = 4;
|
||||||
|
cl->state = RFB_INITIALISATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (WriteExact(cl, buf, len) < 0) {
|
||||||
|
rfbLogPerror("rfbAuthNewClient: write");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbAuthProcessClientMessage is called when the client sends its
|
||||||
|
* authentication response.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbAuthProcessClientMessage(cl)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
char *passwd;
|
||||||
|
int i, n;
|
||||||
|
CARD8 response[CHALLENGESIZE];
|
||||||
|
CARD32 authResult;
|
||||||
|
|
||||||
|
if ((n = ReadExact(cl, (char *)response, CHALLENGESIZE)) <= 0) {
|
||||||
|
if (n != 0)
|
||||||
|
rfbLogPerror("rfbAuthProcessClientMessage: read");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
passwd = vncDecryptPasswdFromFile(rfbAuthPasswdFile);
|
||||||
|
|
||||||
|
if (passwd == NULL) {
|
||||||
|
rfbLog("rfbAuthProcessClientMessage: could not get password from %s\n",
|
||||||
|
rfbAuthPasswdFile);
|
||||||
|
|
||||||
|
authResult = Swap32IfLE(rfbVncAuthFailed);
|
||||||
|
|
||||||
|
if (WriteExact(cl, (char *)&authResult, 4) < 0) {
|
||||||
|
rfbLogPerror("rfbAuthProcessClientMessage: write");
|
||||||
|
}
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vncEncryptBytes(cl->authChallenge, passwd);
|
||||||
|
|
||||||
|
/* Lose the password from memory */
|
||||||
|
for (i = strlen(passwd); i >= 0; i--) {
|
||||||
|
passwd[i] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
free((char *)passwd);
|
||||||
|
|
||||||
|
if (memcmp(cl->authChallenge, response, CHALLENGESIZE) != 0) {
|
||||||
|
rfbLog("rfbAuthProcessClientMessage: authentication failed from %s\n",
|
||||||
|
cl->host);
|
||||||
|
|
||||||
|
authResult = Swap32IfLE(rfbVncAuthFailed);
|
||||||
|
|
||||||
|
if (WriteExact(cl, (char *)&authResult, 4) < 0) {
|
||||||
|
rfbLogPerror("rfbAuthProcessClientMessage: write");
|
||||||
|
}
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
authResult = Swap32IfLE(rfbVncAuthOK);
|
||||||
|
|
||||||
|
if (WriteExact(cl, (char *)&authResult, 4) < 0) {
|
||||||
|
rfbLogPerror("rfbAuthProcessClientMessage: write");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
cl->state = RFB_INITIALISATION;
|
||||||
|
}
|
@ -0,0 +1,355 @@
|
|||||||
|
/*
|
||||||
|
* corre.c
|
||||||
|
*
|
||||||
|
* Routines to implement Compact Rise-and-Run-length Encoding (CoRRE). This
|
||||||
|
* code is based on krw's original javatel rfbserver.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rreBeforeBuf contains pixel data in the client's format.
|
||||||
|
* rreAfterBuf contains the RRE encoded version. If the RRE encoded version is
|
||||||
|
* larger than the raw data or if it exceeds rreAfterBufSize then
|
||||||
|
* raw encoding is used instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int rreBeforeBufSize = 0;
|
||||||
|
static char *rreBeforeBuf = NULL;
|
||||||
|
|
||||||
|
static int rreAfterBufSize = 0;
|
||||||
|
static char *rreAfterBuf = NULL;
|
||||||
|
static int rreAfterBufLen;
|
||||||
|
|
||||||
|
static int subrectEncode8(CARD8 *data, int w, int h);
|
||||||
|
static int subrectEncode16(CARD16 *data, int w, int h);
|
||||||
|
static int subrectEncode32(CARD32 *data, int w, int h);
|
||||||
|
static CARD32 getBgColour(char *data, int size, int bpp);
|
||||||
|
static Bool rfbSendSmallRectEncodingCoRRE(rfbClientPtr cl, int x, int y,
|
||||||
|
int w, int h);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSendRectEncodingCoRRE - send an arbitrary size rectangle using CoRRE
|
||||||
|
* encoding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSendRectEncodingCoRRE(cl, x, y, w, h)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int x, y, w, h;
|
||||||
|
{
|
||||||
|
if (h > cl->correMaxHeight) {
|
||||||
|
rfbSendRectEncodingCoRRE(cl, x, y, w, cl->correMaxHeight );
|
||||||
|
rfbSendRectEncodingCoRRE(cl, x, y + cl->correMaxHeight, w,
|
||||||
|
h - cl->correMaxHeight);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (w > cl->correMaxWidth) {
|
||||||
|
rfbSendRectEncodingCoRRE(cl, x, y, cl->correMaxWidth, h);
|
||||||
|
rfbSendRectEncodingCoRRE(cl, x + cl->correMaxWidth, y,
|
||||||
|
w - cl->correMaxWidth, h);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbSendSmallRectEncodingCoRRE(cl, x, y, w, h);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSendSmallRectEncodingCoRRE - send a small (guaranteed < 256x256)
|
||||||
|
* rectangle using CoRRE encoding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
rfbSendSmallRectEncodingCoRRE(cl, x, y, w, h)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int x, y, w, h;
|
||||||
|
{
|
||||||
|
rfbFramebufferUpdateRectHeader rect;
|
||||||
|
rfbRREHeader hdr;
|
||||||
|
int nSubrects;
|
||||||
|
int i;
|
||||||
|
char *fbptr = (cl->screen->frameBuffer + (cl->screen->paddedWidthInBytes * y)
|
||||||
|
+ (x * (cl->screen->bitsPerPixel / 8)));
|
||||||
|
|
||||||
|
int maxRawSize = (cl->screen->width * cl->screen->height
|
||||||
|
* (cl->format.bitsPerPixel / 8));
|
||||||
|
|
||||||
|
if (rreBeforeBufSize < maxRawSize) {
|
||||||
|
rreBeforeBufSize = maxRawSize;
|
||||||
|
if (rreBeforeBuf == NULL)
|
||||||
|
rreBeforeBuf = (char *)xalloc(rreBeforeBufSize);
|
||||||
|
else
|
||||||
|
rreBeforeBuf = (char *)xrealloc(rreBeforeBuf, rreBeforeBufSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rreAfterBufSize < maxRawSize) {
|
||||||
|
rreAfterBufSize = maxRawSize;
|
||||||
|
if (rreAfterBuf == NULL)
|
||||||
|
rreAfterBuf = (char *)xalloc(rreAfterBufSize);
|
||||||
|
else
|
||||||
|
rreAfterBuf = (char *)xrealloc(rreAfterBuf, rreAfterBufSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
(*cl->translateFn)(cl->translateLookupTable,&(cl->screen->rfbServerFormat),
|
||||||
|
&cl->format, fbptr, rreBeforeBuf,
|
||||||
|
cl->screen->paddedWidthInBytes, w, h);
|
||||||
|
|
||||||
|
switch (cl->format.bitsPerPixel) {
|
||||||
|
case 8:
|
||||||
|
nSubrects = subrectEncode8((CARD8 *)rreBeforeBuf, w, h);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
nSubrects = subrectEncode16((CARD16 *)rreBeforeBuf, w, h);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
nSubrects = subrectEncode32((CARD32 *)rreBeforeBuf, w, h);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rfbLog("getBgColour: bpp %d?\n",cl->format.bitsPerPixel);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nSubrects < 0) {
|
||||||
|
|
||||||
|
/* RRE encoding was too large, use raw */
|
||||||
|
|
||||||
|
return rfbSendRectEncodingRaw(cl, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
cl->rfbRectanglesSent[rfbEncodingCoRRE]++;
|
||||||
|
cl->rfbBytesSent[rfbEncodingCoRRE] += (sz_rfbFramebufferUpdateRectHeader
|
||||||
|
+ sz_rfbRREHeader + rreAfterBufLen);
|
||||||
|
|
||||||
|
if (cl->ublen + sz_rfbFramebufferUpdateRectHeader + sz_rfbRREHeader
|
||||||
|
> UPDATE_BUF_SIZE)
|
||||||
|
{
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.r.x = Swap16IfLE(x);
|
||||||
|
rect.r.y = Swap16IfLE(y);
|
||||||
|
rect.r.w = Swap16IfLE(w);
|
||||||
|
rect.r.h = Swap16IfLE(h);
|
||||||
|
rect.encoding = Swap32IfLE(rfbEncodingCoRRE);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&rect,
|
||||||
|
sz_rfbFramebufferUpdateRectHeader);
|
||||||
|
cl->ublen += sz_rfbFramebufferUpdateRectHeader;
|
||||||
|
|
||||||
|
hdr.nSubrects = Swap32IfLE(nSubrects);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&hdr, sz_rfbRREHeader);
|
||||||
|
cl->ublen += sz_rfbRREHeader;
|
||||||
|
|
||||||
|
for (i = 0; i < rreAfterBufLen;) {
|
||||||
|
|
||||||
|
int bytesToCopy = UPDATE_BUF_SIZE - cl->ublen;
|
||||||
|
|
||||||
|
if (i + bytesToCopy > rreAfterBufLen) {
|
||||||
|
bytesToCopy = rreAfterBufLen - i;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], &rreAfterBuf[i], bytesToCopy);
|
||||||
|
|
||||||
|
cl->ublen += bytesToCopy;
|
||||||
|
i += bytesToCopy;
|
||||||
|
|
||||||
|
if (cl->ublen == UPDATE_BUF_SIZE) {
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* subrectEncode() encodes the given multicoloured rectangle as a background
|
||||||
|
* colour overwritten by single-coloured rectangles. It returns the number
|
||||||
|
* of subrectangles in the encoded buffer, or -1 if subrect encoding won't
|
||||||
|
* fit in the buffer. It puts the encoded rectangles in rreAfterBuf. The
|
||||||
|
* single-colour rectangle partition is not optimal, but does find the biggest
|
||||||
|
* horizontal or vertical rectangle top-left anchored to each consecutive
|
||||||
|
* coordinate position.
|
||||||
|
*
|
||||||
|
* The coding scheme is simply [<bgcolour><subrect><subrect>...] where each
|
||||||
|
* <subrect> is [<colour><x><y><w><h>].
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DEFINE_SUBRECT_ENCODE(bpp) \
|
||||||
|
static int \
|
||||||
|
subrectEncode##bpp(data,w,h) \
|
||||||
|
CARD##bpp *data; \
|
||||||
|
int w; \
|
||||||
|
int h; \
|
||||||
|
{ \
|
||||||
|
CARD##bpp cl; \
|
||||||
|
rfbCoRRERectangle subrect; \
|
||||||
|
int x,y; \
|
||||||
|
int i,j; \
|
||||||
|
int hx=0,hy,vx=0,vy; \
|
||||||
|
int hyflag; \
|
||||||
|
CARD##bpp *seg; \
|
||||||
|
CARD##bpp *line; \
|
||||||
|
int hw,hh,vw,vh; \
|
||||||
|
int thex,they,thew,theh; \
|
||||||
|
int numsubs = 0; \
|
||||||
|
int newLen; \
|
||||||
|
CARD##bpp bg = (CARD##bpp)getBgColour((char*)data,w*h,bpp); \
|
||||||
|
\
|
||||||
|
*((CARD##bpp*)rreAfterBuf) = bg; \
|
||||||
|
\
|
||||||
|
rreAfterBufLen = (bpp/8); \
|
||||||
|
\
|
||||||
|
for (y=0; y<h; y++) { \
|
||||||
|
line = data+(y*w); \
|
||||||
|
for (x=0; x<w; x++) { \
|
||||||
|
if (line[x] != bg) { \
|
||||||
|
cl = line[x]; \
|
||||||
|
hy = y-1; \
|
||||||
|
hyflag = 1; \
|
||||||
|
for (j=y; j<h; j++) { \
|
||||||
|
seg = data+(j*w); \
|
||||||
|
if (seg[x] != cl) {break;} \
|
||||||
|
i = x; \
|
||||||
|
while ((seg[i] == cl) && (i < w)) i += 1; \
|
||||||
|
i -= 1; \
|
||||||
|
if (j == y) vx = hx = i; \
|
||||||
|
if (i < vx) vx = i; \
|
||||||
|
if ((hyflag > 0) && (i >= hx)) {hy += 1;} else {hyflag = 0;} \
|
||||||
|
} \
|
||||||
|
vy = j-1; \
|
||||||
|
\
|
||||||
|
/* We now have two possible subrects: (x,y,hx,hy) and (x,y,vx,vy) \
|
||||||
|
* We'll choose the bigger of the two. \
|
||||||
|
*/ \
|
||||||
|
hw = hx-x+1; \
|
||||||
|
hh = hy-y+1; \
|
||||||
|
vw = vx-x+1; \
|
||||||
|
vh = vy-y+1; \
|
||||||
|
\
|
||||||
|
thex = x; \
|
||||||
|
they = y; \
|
||||||
|
\
|
||||||
|
if ((hw*hh) > (vw*vh)) { \
|
||||||
|
thew = hw; \
|
||||||
|
theh = hh; \
|
||||||
|
} else { \
|
||||||
|
thew = vw; \
|
||||||
|
theh = vh; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
subrect.x = thex; \
|
||||||
|
subrect.y = they; \
|
||||||
|
subrect.w = thew; \
|
||||||
|
subrect.h = theh; \
|
||||||
|
\
|
||||||
|
newLen = rreAfterBufLen + (bpp/8) + sz_rfbCoRRERectangle; \
|
||||||
|
if ((newLen > (w * h * (bpp/8))) || (newLen > rreAfterBufSize)) \
|
||||||
|
return -1; \
|
||||||
|
\
|
||||||
|
numsubs += 1; \
|
||||||
|
*((CARD##bpp*)(rreAfterBuf + rreAfterBufLen)) = cl; \
|
||||||
|
rreAfterBufLen += (bpp/8); \
|
||||||
|
memcpy(&rreAfterBuf[rreAfterBufLen],&subrect,sz_rfbCoRRERectangle); \
|
||||||
|
rreAfterBufLen += sz_rfbCoRRERectangle; \
|
||||||
|
\
|
||||||
|
/* \
|
||||||
|
* Now mark the subrect as done. \
|
||||||
|
*/ \
|
||||||
|
for (j=they; j < (they+theh); j++) { \
|
||||||
|
for (i=thex; i < (thex+thew); i++) { \
|
||||||
|
data[j*w+i] = bg; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
return numsubs; \
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_SUBRECT_ENCODE(8)
|
||||||
|
DEFINE_SUBRECT_ENCODE(16)
|
||||||
|
DEFINE_SUBRECT_ENCODE(32)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getBgColour() gets the most prevalent colour in a byte array.
|
||||||
|
*/
|
||||||
|
static CARD32
|
||||||
|
getBgColour(data,size,bpp)
|
||||||
|
char *data;
|
||||||
|
int size;
|
||||||
|
int bpp;
|
||||||
|
{
|
||||||
|
|
||||||
|
#define NUMCLRS 256
|
||||||
|
|
||||||
|
static int counts[NUMCLRS];
|
||||||
|
int i,j,k;
|
||||||
|
|
||||||
|
int maxcount = 0;
|
||||||
|
CARD8 maxclr = 0;
|
||||||
|
|
||||||
|
if (bpp != 8) {
|
||||||
|
if (bpp == 16) {
|
||||||
|
return ((CARD16 *)data)[0];
|
||||||
|
} else if (bpp == 32) {
|
||||||
|
return ((CARD32 *)data)[0];
|
||||||
|
} else {
|
||||||
|
rfbLog("getBgColour: bpp %d?\n",bpp);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<NUMCLRS; i++) {
|
||||||
|
counts[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j=0; j<size; j++) {
|
||||||
|
k = (int)(((CARD8 *)data)[j]);
|
||||||
|
if (k >= NUMCLRS) {
|
||||||
|
rfbLog("getBgColour: unusual colour = %d\n", k);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
counts[k] += 1;
|
||||||
|
if (counts[k] > maxcount) {
|
||||||
|
maxcount = counts[k];
|
||||||
|
maxclr = ((CARD8 *)data)[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxclr;
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* cutpaste.c - routines to deal with cut & paste buffers / selection.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSetXCutText sets the cut buffer to be the given string. We also clear
|
||||||
|
* the primary selection. Ideally we'd like to set it to the same thing, but I
|
||||||
|
* can't work out how to do that without some kind of helper X client.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void rfbGotXCutText(rfbScreenInfoPtr rfbScreen, char *str, int len)
|
||||||
|
{
|
||||||
|
rfbSendServerCutText(rfbScreen, str, len);
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* This is an example of how to use libvncserver.
|
||||||
|
*
|
||||||
|
* libvncserver example
|
||||||
|
* Copyright (C) 2001 Johannes E. Schindelin <Johannes.Schindelin@gmx.de>
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#ifdef __IRIX__
|
||||||
|
#include <netdb.h>
|
||||||
|
#endif
|
||||||
|
#define XK_MISCELLANY
|
||||||
|
#include "rfb.h"
|
||||||
|
#include "keysymdef.h"
|
||||||
|
|
||||||
|
const int maxx=640, maxy=480, bpp=4;
|
||||||
|
|
||||||
|
void doptr(int buttonMask,int x,int y,rfbClientPtr cl)
|
||||||
|
{
|
||||||
|
if(buttonMask && x>=0 && y>=0 && x<maxx && y<maxy) {
|
||||||
|
int i;
|
||||||
|
for(i=0;i<bpp;i++)
|
||||||
|
cl->screen->frameBuffer[y*cl->screen->paddedWidthInBytes+x*bpp+i]^=0xff;
|
||||||
|
rfbMarkRectAsModified(cl->screen,x,y,x+1,y+1);
|
||||||
|
rfbGotXCutText(cl->screen,"Hallo",5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void dokey(Bool down,KeySym key,rfbClientPtr cl)
|
||||||
|
{
|
||||||
|
if(down && key==XK_Escape)
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc,char** argv)
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
rfbScreenInfoPtr rfbScreen = rfbDefaultScreenInit(argc,argv);
|
||||||
|
rfbScreen->desktopName="LibVNCServer Example";
|
||||||
|
rfbScreen->frameBuffer = (char*)malloc(maxx*maxy*bpp);
|
||||||
|
rfbScreen->width=maxx;
|
||||||
|
rfbScreen->height=maxy;
|
||||||
|
rfbScreen->paddedWidthInBytes=maxx*bpp;
|
||||||
|
rfbScreen->ptrAddEvent=doptr;
|
||||||
|
rfbScreen->kbdAddEvent=dokey;
|
||||||
|
|
||||||
|
for(i=0;i<maxx;++i)
|
||||||
|
for(j=0;j<maxy;++j) {
|
||||||
|
rfbScreen->frameBuffer[(j*maxx+i)*bpp]=i*256/maxx;
|
||||||
|
rfbScreen->frameBuffer[(j*maxx+i)*bpp+1]=j*256/maxy;
|
||||||
|
rfbScreen->frameBuffer[(j*maxx+i)*bpp+2]=(i+j)*256/(maxx*maxy);
|
||||||
|
}
|
||||||
|
|
||||||
|
runEventLoop(rfbScreen,40000,FALSE);
|
||||||
|
runEventLoop(rfbScreen,40000,TRUE);
|
||||||
|
while(1);
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
@ -0,0 +1,347 @@
|
|||||||
|
/*
|
||||||
|
* hextile.c
|
||||||
|
*
|
||||||
|
* Routines to implement Hextile Encoding
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
static Bool sendHextiles8(rfbClientPtr cl, int x, int y, int w, int h);
|
||||||
|
static Bool sendHextiles16(rfbClientPtr cl, int x, int y, int w, int h);
|
||||||
|
static Bool sendHextiles32(rfbClientPtr cl, int x, int y, int w, int h);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSendRectEncodingHextile - send a rectangle using hextile encoding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSendRectEncodingHextile(cl, x, y, w, h)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int x, y, w, h;
|
||||||
|
{
|
||||||
|
rfbFramebufferUpdateRectHeader rect;
|
||||||
|
|
||||||
|
if (cl->ublen + sz_rfbFramebufferUpdateRectHeader > UPDATE_BUF_SIZE) {
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.r.x = Swap16IfLE(x);
|
||||||
|
rect.r.y = Swap16IfLE(y);
|
||||||
|
rect.r.w = Swap16IfLE(w);
|
||||||
|
rect.r.h = Swap16IfLE(h);
|
||||||
|
rect.encoding = Swap32IfLE(rfbEncodingHextile);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&rect,
|
||||||
|
sz_rfbFramebufferUpdateRectHeader);
|
||||||
|
cl->ublen += sz_rfbFramebufferUpdateRectHeader;
|
||||||
|
|
||||||
|
cl->rfbRectanglesSent[rfbEncodingHextile]++;
|
||||||
|
cl->rfbBytesSent[rfbEncodingHextile] += sz_rfbFramebufferUpdateRectHeader;
|
||||||
|
|
||||||
|
switch (cl->format.bitsPerPixel) {
|
||||||
|
case 8:
|
||||||
|
return sendHextiles8(cl, x, y, w, h);
|
||||||
|
case 16:
|
||||||
|
return sendHextiles16(cl, x, y, w, h);
|
||||||
|
case 32:
|
||||||
|
return sendHextiles32(cl, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbLog("rfbSendRectEncodingHextile: bpp %d?\n", cl->format.bitsPerPixel);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define PUT_PIXEL8(pix) (cl->updateBuf[cl->ublen++] = (pix))
|
||||||
|
|
||||||
|
#define PUT_PIXEL16(pix) (cl->updateBuf[cl->ublen++] = ((char*)&(pix))[0], \
|
||||||
|
cl->updateBuf[cl->ublen++] = ((char*)&(pix))[1])
|
||||||
|
|
||||||
|
#define PUT_PIXEL32(pix) (cl->updateBuf[cl->ublen++] = ((char*)&(pix))[0], \
|
||||||
|
cl->updateBuf[cl->ublen++] = ((char*)&(pix))[1], \
|
||||||
|
cl->updateBuf[cl->ublen++] = ((char*)&(pix))[2], \
|
||||||
|
cl->updateBuf[cl->ublen++] = ((char*)&(pix))[3])
|
||||||
|
|
||||||
|
|
||||||
|
#define DEFINE_SEND_HEXTILES(bpp) \
|
||||||
|
\
|
||||||
|
\
|
||||||
|
static Bool subrectEncode##bpp(rfbClientPtr cli, CARD##bpp *data, int w, int h, \
|
||||||
|
CARD##bpp bg, CARD##bpp fg, Bool mono); \
|
||||||
|
static void testColours##bpp(CARD##bpp *data, int size, Bool *mono, \
|
||||||
|
Bool *solid, CARD##bpp *bg, CARD##bpp *fg); \
|
||||||
|
\
|
||||||
|
\
|
||||||
|
/* \
|
||||||
|
* rfbSendHextiles \
|
||||||
|
*/ \
|
||||||
|
\
|
||||||
|
static Bool \
|
||||||
|
sendHextiles##bpp(cl, rx, ry, rw, rh) \
|
||||||
|
rfbClientPtr cl; \
|
||||||
|
int rx, ry, rw, rh; \
|
||||||
|
{ \
|
||||||
|
int x, y, w, h; \
|
||||||
|
int startUblen; \
|
||||||
|
char *fbptr; \
|
||||||
|
CARD##bpp bg = 0, fg = 0, newBg, newFg; \
|
||||||
|
Bool mono, solid; \
|
||||||
|
Bool validBg = FALSE; \
|
||||||
|
Bool validFg = FALSE; \
|
||||||
|
CARD##bpp clientPixelData[16*16*(bpp/8)]; \
|
||||||
|
\
|
||||||
|
for (y = ry; y < ry+rh; y += 16) { \
|
||||||
|
for (x = rx; x < rx+rw; x += 16) { \
|
||||||
|
w = h = 16; \
|
||||||
|
if (rx+rw - x < 16) \
|
||||||
|
w = rx+rw - x; \
|
||||||
|
if (ry+rh - y < 16) \
|
||||||
|
h = ry+rh - y; \
|
||||||
|
\
|
||||||
|
if ((cl->ublen + 1 + (2 + 16 * 16) * (bpp/8)) > \
|
||||||
|
UPDATE_BUF_SIZE) { \
|
||||||
|
if (!rfbSendUpdateBuf(cl)) \
|
||||||
|
return FALSE; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
fbptr = (cl->screen->frameBuffer + (cl->screen->paddedWidthInBytes * y) \
|
||||||
|
+ (x * (cl->screen->bitsPerPixel / 8))); \
|
||||||
|
\
|
||||||
|
(*cl->translateFn)(cl->translateLookupTable, &(cl->screen->rfbServerFormat), \
|
||||||
|
&cl->format, fbptr, (char *)clientPixelData, \
|
||||||
|
cl->screen->paddedWidthInBytes, w, h); \
|
||||||
|
\
|
||||||
|
startUblen = cl->ublen; \
|
||||||
|
cl->updateBuf[startUblen] = 0; \
|
||||||
|
cl->ublen++; \
|
||||||
|
\
|
||||||
|
testColours##bpp(clientPixelData, w * h, \
|
||||||
|
&mono, &solid, &newBg, &newFg); \
|
||||||
|
\
|
||||||
|
if (!validBg || (newBg != bg)) { \
|
||||||
|
validBg = TRUE; \
|
||||||
|
bg = newBg; \
|
||||||
|
cl->updateBuf[startUblen] |= rfbHextileBackgroundSpecified; \
|
||||||
|
PUT_PIXEL##bpp(bg); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (solid) { \
|
||||||
|
cl->rfbBytesSent[rfbEncodingHextile] += cl->ublen - startUblen; \
|
||||||
|
continue; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
cl->updateBuf[startUblen] |= rfbHextileAnySubrects; \
|
||||||
|
\
|
||||||
|
if (mono) { \
|
||||||
|
if (!validFg || (newFg != fg)) { \
|
||||||
|
validFg = TRUE; \
|
||||||
|
fg = newFg; \
|
||||||
|
cl->updateBuf[startUblen] |= rfbHextileForegroundSpecified; \
|
||||||
|
PUT_PIXEL##bpp(fg); \
|
||||||
|
} \
|
||||||
|
} else { \
|
||||||
|
validFg = FALSE; \
|
||||||
|
cl->updateBuf[startUblen] |= rfbHextileSubrectsColoured; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (!subrectEncode##bpp(cl, clientPixelData, w, h, bg, fg, mono)) { \
|
||||||
|
/* encoding was too large, use raw */ \
|
||||||
|
validBg = FALSE; \
|
||||||
|
validFg = FALSE; \
|
||||||
|
cl->ublen = startUblen; \
|
||||||
|
cl->updateBuf[cl->ublen++] = rfbHextileRaw; \
|
||||||
|
(*cl->translateFn)(cl->translateLookupTable, \
|
||||||
|
&(cl->screen->rfbServerFormat), &cl->format, fbptr, \
|
||||||
|
(char *)clientPixelData, \
|
||||||
|
cl->screen->paddedWidthInBytes, w, h); \
|
||||||
|
\
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)clientPixelData, \
|
||||||
|
w * h * (bpp/8)); \
|
||||||
|
\
|
||||||
|
cl->ublen += w * h * (bpp/8); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
cl->rfbBytesSent[rfbEncodingHextile] += cl->ublen - startUblen; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
return TRUE; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
\
|
||||||
|
static Bool \
|
||||||
|
subrectEncode##bpp(rfbClientPtr cl, CARD##bpp *data, int w, int h, \
|
||||||
|
CARD##bpp bg, CARD##bpp fg, Bool mono) \
|
||||||
|
{ \
|
||||||
|
CARD##bpp cl2; \
|
||||||
|
int x,y; \
|
||||||
|
int i,j; \
|
||||||
|
int hx=0,hy,vx=0,vy; \
|
||||||
|
int hyflag; \
|
||||||
|
CARD##bpp *seg; \
|
||||||
|
CARD##bpp *line; \
|
||||||
|
int hw,hh,vw,vh; \
|
||||||
|
int thex,they,thew,theh; \
|
||||||
|
int numsubs = 0; \
|
||||||
|
int newLen; \
|
||||||
|
int nSubrectsUblen; \
|
||||||
|
\
|
||||||
|
nSubrectsUblen = cl->ublen; \
|
||||||
|
cl->ublen++; \
|
||||||
|
\
|
||||||
|
for (y=0; y<h; y++) { \
|
||||||
|
line = data+(y*w); \
|
||||||
|
for (x=0; x<w; x++) { \
|
||||||
|
if (line[x] != bg) { \
|
||||||
|
cl2 = line[x]; \
|
||||||
|
hy = y-1; \
|
||||||
|
hyflag = 1; \
|
||||||
|
for (j=y; j<h; j++) { \
|
||||||
|
seg = data+(j*w); \
|
||||||
|
if (seg[x] != cl2) {break;} \
|
||||||
|
i = x; \
|
||||||
|
while ((seg[i] == cl2) && (i < w)) i += 1; \
|
||||||
|
i -= 1; \
|
||||||
|
if (j == y) vx = hx = i; \
|
||||||
|
if (i < vx) vx = i; \
|
||||||
|
if ((hyflag > 0) && (i >= hx)) { \
|
||||||
|
hy += 1; \
|
||||||
|
} else { \
|
||||||
|
hyflag = 0; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
vy = j-1; \
|
||||||
|
\
|
||||||
|
/* We now have two possible subrects: (x,y,hx,hy) and \
|
||||||
|
* (x,y,vx,vy). We'll choose the bigger of the two. \
|
||||||
|
*/ \
|
||||||
|
hw = hx-x+1; \
|
||||||
|
hh = hy-y+1; \
|
||||||
|
vw = vx-x+1; \
|
||||||
|
vh = vy-y+1; \
|
||||||
|
\
|
||||||
|
thex = x; \
|
||||||
|
they = y; \
|
||||||
|
\
|
||||||
|
if ((hw*hh) > (vw*vh)) { \
|
||||||
|
thew = hw; \
|
||||||
|
theh = hh; \
|
||||||
|
} else { \
|
||||||
|
thew = vw; \
|
||||||
|
theh = vh; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (mono) { \
|
||||||
|
newLen = cl->ublen - nSubrectsUblen + 2; \
|
||||||
|
} else { \
|
||||||
|
newLen = cl->ublen - nSubrectsUblen + bpp/8 + 2; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (newLen > (w * h * (bpp/8))) \
|
||||||
|
return FALSE; \
|
||||||
|
\
|
||||||
|
numsubs += 1; \
|
||||||
|
\
|
||||||
|
if (!mono) PUT_PIXEL##bpp(cl2); \
|
||||||
|
\
|
||||||
|
cl->updateBuf[cl->ublen++] = rfbHextilePackXY(thex,they); \
|
||||||
|
cl->updateBuf[cl->ublen++] = rfbHextilePackWH(thew,theh); \
|
||||||
|
\
|
||||||
|
/* \
|
||||||
|
* Now mark the subrect as done. \
|
||||||
|
*/ \
|
||||||
|
for (j=they; j < (they+theh); j++) { \
|
||||||
|
for (i=thex; i < (thex+thew); i++) { \
|
||||||
|
data[j*w+i] = bg; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
cl->updateBuf[nSubrectsUblen] = numsubs; \
|
||||||
|
\
|
||||||
|
return TRUE; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
\
|
||||||
|
/* \
|
||||||
|
* testColours() tests if there are one (solid), two (mono) or more \
|
||||||
|
* colours in a tile and gets a reasonable guess at the best background \
|
||||||
|
* pixel, and the foreground pixel for mono. \
|
||||||
|
*/ \
|
||||||
|
\
|
||||||
|
static void \
|
||||||
|
testColours##bpp(data,size,mono,solid,bg,fg) \
|
||||||
|
CARD##bpp *data; \
|
||||||
|
int size; \
|
||||||
|
Bool *mono; \
|
||||||
|
Bool *solid; \
|
||||||
|
CARD##bpp *bg; \
|
||||||
|
CARD##bpp *fg; \
|
||||||
|
{ \
|
||||||
|
CARD##bpp colour1 = 0, colour2 = 0; \
|
||||||
|
int n1 = 0, n2 = 0; \
|
||||||
|
*mono = TRUE; \
|
||||||
|
*solid = TRUE; \
|
||||||
|
\
|
||||||
|
for (; size > 0; size--, data++) { \
|
||||||
|
\
|
||||||
|
if (n1 == 0) \
|
||||||
|
colour1 = *data; \
|
||||||
|
\
|
||||||
|
if (*data == colour1) { \
|
||||||
|
n1++; \
|
||||||
|
continue; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (n2 == 0) { \
|
||||||
|
*solid = FALSE; \
|
||||||
|
colour2 = *data; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (*data == colour2) { \
|
||||||
|
n2++; \
|
||||||
|
continue; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
*mono = FALSE; \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
if (n1 > n2) { \
|
||||||
|
*bg = colour1; \
|
||||||
|
*fg = colour2; \
|
||||||
|
} else { \
|
||||||
|
*bg = colour2; \
|
||||||
|
*fg = colour1; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_SEND_HEXTILES(8)
|
||||||
|
DEFINE_SEND_HEXTILES(16)
|
||||||
|
DEFINE_SEND_HEXTILES(32)
|
@ -0,0 +1,693 @@
|
|||||||
|
/*
|
||||||
|
* $XConsortium: X.h,v 1.69 94/04/17 20:10:48 dpw Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Definitions for the X window system likely to be used by applications */
|
||||||
|
|
||||||
|
#ifndef X_H
|
||||||
|
#define X_H
|
||||||
|
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#define X_PROTOCOL 11 /* current protocol version */
|
||||||
|
#define X_PROTOCOL_REVISION 0 /* current minor version */
|
||||||
|
|
||||||
|
/* Resources */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* _XSERVER64 must ONLY be defined when compiling X server sources on
|
||||||
|
* systems where unsigned long is not 32 bits, must NOT be used in
|
||||||
|
* client or library code.
|
||||||
|
*/
|
||||||
|
#ifndef _XSERVER64
|
||||||
|
typedef unsigned long XID;
|
||||||
|
typedef unsigned long Mask;
|
||||||
|
typedef unsigned long Atom;
|
||||||
|
typedef unsigned long VisualID;
|
||||||
|
typedef unsigned long Time;
|
||||||
|
#else
|
||||||
|
#include <X11/Xmd.h>
|
||||||
|
typedef CARD32 XID;
|
||||||
|
typedef CARD32 Mask;
|
||||||
|
typedef CARD32 Atom;
|
||||||
|
typedef CARD32 VisualID;
|
||||||
|
typedef CARD32 Time;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef XID Window;
|
||||||
|
typedef XID Drawable;
|
||||||
|
typedef XID Font;
|
||||||
|
typedef XID Pixmap;
|
||||||
|
typedef XID X11Cursor; /* conflict with CoreGraphics */
|
||||||
|
typedef XID Colormap;
|
||||||
|
typedef XID GContext;
|
||||||
|
typedef XID KeySym;
|
||||||
|
|
||||||
|
typedef unsigned char KeyCode;
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* RESERVED RESOURCE AND CONSTANT DEFINITIONS
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
#define None 0L /* universal null resource or null atom */
|
||||||
|
|
||||||
|
#define ParentRelative 1L /* background pixmap in CreateWindow
|
||||||
|
and ChangeWindowAttributes */
|
||||||
|
|
||||||
|
#define CopyFromParent 0L /* border pixmap in CreateWindow
|
||||||
|
and ChangeWindowAttributes
|
||||||
|
special VisualID and special window
|
||||||
|
class passed to CreateWindow */
|
||||||
|
|
||||||
|
#define PointerWindow 0L /* destination window in SendEvent */
|
||||||
|
#define InputFocus 1L /* destination window in SendEvent */
|
||||||
|
|
||||||
|
#define PointerRoot 1L /* focus window in SetInputFocus */
|
||||||
|
|
||||||
|
#define AnyPropertyType 0L /* special Atom, passed to GetProperty */
|
||||||
|
|
||||||
|
#define AnyKey 0L /* special Key Code, passed to GrabKey */
|
||||||
|
|
||||||
|
#define AnyButton 0L /* special Button Code, passed to GrabButton */
|
||||||
|
|
||||||
|
#define AllTemporary 0L /* special Resource ID passed to KillClient */
|
||||||
|
|
||||||
|
#define CurrentTime 0L /* special Time */
|
||||||
|
|
||||||
|
#define NoSymbol 0L /* special KeySym */
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* EVENT DEFINITIONS
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* Input Event Masks. Used as event-mask window attribute and as arguments
|
||||||
|
to Grab requests. Not to be confused with event names. */
|
||||||
|
|
||||||
|
#define NoEventMask 0L
|
||||||
|
#define KeyPressMask (1L<<0)
|
||||||
|
#define KeyReleaseMask (1L<<1)
|
||||||
|
#define ButtonPressMask (1L<<2)
|
||||||
|
#define ButtonReleaseMask (1L<<3)
|
||||||
|
#define EnterWindowMask (1L<<4)
|
||||||
|
#define LeaveWindowMask (1L<<5)
|
||||||
|
#define PointerMotionMask (1L<<6)
|
||||||
|
#define PointerMotionHintMask (1L<<7)
|
||||||
|
#define Button1MotionMask (1L<<8)
|
||||||
|
#define Button2MotionMask (1L<<9)
|
||||||
|
#define Button3MotionMask (1L<<10)
|
||||||
|
#define Button4MotionMask (1L<<11)
|
||||||
|
#define Button5MotionMask (1L<<12)
|
||||||
|
#define ButtonMotionMask (1L<<13)
|
||||||
|
#define KeymapStateMask (1L<<14)
|
||||||
|
#define ExposureMask (1L<<15)
|
||||||
|
#define VisibilityChangeMask (1L<<16)
|
||||||
|
#define StructureNotifyMask (1L<<17)
|
||||||
|
#define ResizeRedirectMask (1L<<18)
|
||||||
|
#define SubstructureNotifyMask (1L<<19)
|
||||||
|
#define SubstructureRedirectMask (1L<<20)
|
||||||
|
#define FocusChangeMask (1L<<21)
|
||||||
|
#define PropertyChangeMask (1L<<22)
|
||||||
|
#define ColormapChangeMask (1L<<23)
|
||||||
|
#define OwnerGrabButtonMask (1L<<24)
|
||||||
|
|
||||||
|
/* Event names. Used in "type" field in XEvent structures. Not to be
|
||||||
|
confused with event masks above. They start from 2 because 0 and 1
|
||||||
|
are reserved in the protocol for errors and replies. */
|
||||||
|
|
||||||
|
#define KeyPress 2
|
||||||
|
#define KeyRelease 3
|
||||||
|
#define ButtonPress 4
|
||||||
|
#define ButtonRelease 5
|
||||||
|
#define MotionNotify 6
|
||||||
|
#define EnterNotify 7
|
||||||
|
#define LeaveNotify 8
|
||||||
|
#define FocusIn 9
|
||||||
|
#define FocusOut 10
|
||||||
|
#define KeymapNotify 11
|
||||||
|
#define Expose 12
|
||||||
|
#define GraphicsExpose 13
|
||||||
|
#define NoExpose 14
|
||||||
|
#define VisibilityNotify 15
|
||||||
|
#define CreateNotify 16
|
||||||
|
#define DestroyNotify 17
|
||||||
|
#define UnmapNotify 18
|
||||||
|
#define MapNotify 19
|
||||||
|
#define MapRequest 20
|
||||||
|
#define ReparentNotify 21
|
||||||
|
#define ConfigureNotify 22
|
||||||
|
#define ConfigureRequest 23
|
||||||
|
#define GravityNotify 24
|
||||||
|
#define ResizeRequest 25
|
||||||
|
#define CirculateNotify 26
|
||||||
|
#define CirculateRequest 27
|
||||||
|
#define PropertyNotify 28
|
||||||
|
#define SelectionClear 29
|
||||||
|
#define SelectionRequest 30
|
||||||
|
#define SelectionNotify 31
|
||||||
|
#define ColormapNotify 32
|
||||||
|
#define ClientMessage 33
|
||||||
|
#define MappingNotify 34
|
||||||
|
#define LASTEvent 35 /* must be bigger than any event # */
|
||||||
|
|
||||||
|
|
||||||
|
/* Key masks. Used as modifiers to GrabButton and GrabKey, results of QueryPointer,
|
||||||
|
state in various key-, mouse-, and button-related events. */
|
||||||
|
|
||||||
|
#define ShiftMask (1<<0)
|
||||||
|
#define LockMask (1<<1)
|
||||||
|
#define ControlMask (1<<2)
|
||||||
|
#define Mod1Mask (1<<3)
|
||||||
|
#define Mod2Mask (1<<4)
|
||||||
|
#define Mod3Mask (1<<5)
|
||||||
|
#define Mod4Mask (1<<6)
|
||||||
|
#define Mod5Mask (1<<7)
|
||||||
|
|
||||||
|
/* modifier names. Used to build a SetModifierMapping request or
|
||||||
|
to read a GetModifierMapping request. These correspond to the
|
||||||
|
masks defined above. */
|
||||||
|
#define ShiftMapIndex 0
|
||||||
|
#define LockMapIndex 1
|
||||||
|
#define ControlMapIndex 2
|
||||||
|
#define Mod1MapIndex 3
|
||||||
|
#define Mod2MapIndex 4
|
||||||
|
#define Mod3MapIndex 5
|
||||||
|
#define Mod4MapIndex 6
|
||||||
|
#define Mod5MapIndex 7
|
||||||
|
|
||||||
|
|
||||||
|
/* button masks. Used in same manner as Key masks above. Not to be confused
|
||||||
|
with button names below. */
|
||||||
|
|
||||||
|
#define Button1Mask (1<<8)
|
||||||
|
#define Button2Mask (1<<9)
|
||||||
|
#define Button3Mask (1<<10)
|
||||||
|
#define Button4Mask (1<<11)
|
||||||
|
#define Button5Mask (1<<12)
|
||||||
|
|
||||||
|
#define AnyModifier (1<<15) /* used in GrabButton, GrabKey */
|
||||||
|
|
||||||
|
|
||||||
|
/* button names. Used as arguments to GrabButton and as detail in ButtonPress
|
||||||
|
and ButtonRelease events. Not to be confused with button masks above.
|
||||||
|
Note that 0 is already defined above as "AnyButton". */
|
||||||
|
|
||||||
|
#define Button1 1
|
||||||
|
#define Button2 2
|
||||||
|
#define Button3 3
|
||||||
|
#define Button4 4
|
||||||
|
#define Button5 5
|
||||||
|
|
||||||
|
/* Notify modes */
|
||||||
|
|
||||||
|
#define NotifyNormal 0
|
||||||
|
#define NotifyGrab 1
|
||||||
|
#define NotifyUngrab 2
|
||||||
|
#define NotifyWhileGrabbed 3
|
||||||
|
|
||||||
|
#define NotifyHint 1 /* for MotionNotify events */
|
||||||
|
|
||||||
|
/* Notify detail */
|
||||||
|
|
||||||
|
#define NotifyAncestor 0
|
||||||
|
#define NotifyVirtual 1
|
||||||
|
#define NotifyInferior 2
|
||||||
|
#define NotifyNonlinear 3
|
||||||
|
#define NotifyNonlinearVirtual 4
|
||||||
|
#define NotifyPointer 5
|
||||||
|
#define NotifyPointerRoot 6
|
||||||
|
#define NotifyDetailNone 7
|
||||||
|
|
||||||
|
/* Visibility notify */
|
||||||
|
|
||||||
|
#define VisibilityUnobscured 0
|
||||||
|
#define VisibilityPartiallyObscured 1
|
||||||
|
#define VisibilityFullyObscured 2
|
||||||
|
|
||||||
|
/* Circulation request */
|
||||||
|
|
||||||
|
#define PlaceOnTop 0
|
||||||
|
#define PlaceOnBottom 1
|
||||||
|
|
||||||
|
/* protocol families */
|
||||||
|
|
||||||
|
#define FamilyInternet 0
|
||||||
|
#define FamilyDECnet 1
|
||||||
|
#define FamilyChaos 2
|
||||||
|
|
||||||
|
/* Property notification */
|
||||||
|
|
||||||
|
#define PropertyNewValue 0
|
||||||
|
#define PropertyDelete 1
|
||||||
|
|
||||||
|
/* Color Map notification */
|
||||||
|
|
||||||
|
#define ColormapUninstalled 0
|
||||||
|
#define ColormapInstalled 1
|
||||||
|
|
||||||
|
/* GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes */
|
||||||
|
|
||||||
|
#define GrabModeSync 0
|
||||||
|
#define GrabModeAsync 1
|
||||||
|
|
||||||
|
/* GrabPointer, GrabKeyboard reply status */
|
||||||
|
|
||||||
|
#define GrabSuccess 0
|
||||||
|
#define AlreadyGrabbed 1
|
||||||
|
#define GrabInvalidTime 2
|
||||||
|
#define GrabNotViewable 3
|
||||||
|
#define GrabFrozen 4
|
||||||
|
|
||||||
|
/* AllowEvents modes */
|
||||||
|
|
||||||
|
#define AsyncPointer 0
|
||||||
|
#define SyncPointer 1
|
||||||
|
#define ReplayPointer 2
|
||||||
|
#define AsyncKeyboard 3
|
||||||
|
#define SyncKeyboard 4
|
||||||
|
#define ReplayKeyboard 5
|
||||||
|
#define AsyncBoth 6
|
||||||
|
#define SyncBoth 7
|
||||||
|
|
||||||
|
/* Used in SetInputFocus, GetInputFocus */
|
||||||
|
|
||||||
|
#define RevertToNone (int)None
|
||||||
|
#define RevertToPointerRoot (int)PointerRoot
|
||||||
|
#define RevertToParent 2
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* ERROR CODES
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
#define Success 0 /* everything's okay */
|
||||||
|
#define BadRequest 1 /* bad request code */
|
||||||
|
#define BadValue 2 /* int parameter out of range */
|
||||||
|
#define BadWindow 3 /* parameter not a Window */
|
||||||
|
#define BadPixmap 4 /* parameter not a Pixmap */
|
||||||
|
#define BadAtom 5 /* parameter not an Atom */
|
||||||
|
#define BadCursor 6 /* parameter not a Cursor */
|
||||||
|
#define BadFont 7 /* parameter not a Font */
|
||||||
|
#define BadMatch 8 /* parameter mismatch */
|
||||||
|
#define BadDrawable 9 /* parameter not a Pixmap or Window */
|
||||||
|
#define BadAccess 10 /* depending on context:
|
||||||
|
- key/button already grabbed
|
||||||
|
- attempt to free an illegal
|
||||||
|
cmap entry
|
||||||
|
- attempt to store into a read-only
|
||||||
|
color map entry.
|
||||||
|
- attempt to modify the access control
|
||||||
|
list from other than the local host.
|
||||||
|
*/
|
||||||
|
#define BadAlloc 11 /* insufficient resources */
|
||||||
|
#define BadColor 12 /* no such colormap */
|
||||||
|
#define BadGC 13 /* parameter not a GC */
|
||||||
|
#define BadIDChoice 14 /* choice not in range or already used */
|
||||||
|
#define BadName 15 /* font or color name doesn't exist */
|
||||||
|
#define BadLength 16 /* Request length incorrect */
|
||||||
|
#define BadImplementation 17 /* server is defective */
|
||||||
|
|
||||||
|
#define FirstExtensionError 128
|
||||||
|
#define LastExtensionError 255
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* WINDOW DEFINITIONS
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* Window classes used by CreateWindow */
|
||||||
|
/* Note that CopyFromParent is already defined as 0 above */
|
||||||
|
|
||||||
|
#define InputOutput 1
|
||||||
|
#define InputOnly 2
|
||||||
|
|
||||||
|
/* Window attributes for CreateWindow and ChangeWindowAttributes */
|
||||||
|
|
||||||
|
#define CWBackPixmap (1L<<0)
|
||||||
|
#define CWBackPixel (1L<<1)
|
||||||
|
#define CWBorderPixmap (1L<<2)
|
||||||
|
#define CWBorderPixel (1L<<3)
|
||||||
|
#define CWBitGravity (1L<<4)
|
||||||
|
#define CWWinGravity (1L<<5)
|
||||||
|
#define CWBackingStore (1L<<6)
|
||||||
|
#define CWBackingPlanes (1L<<7)
|
||||||
|
#define CWBackingPixel (1L<<8)
|
||||||
|
#define CWOverrideRedirect (1L<<9)
|
||||||
|
#define CWSaveUnder (1L<<10)
|
||||||
|
#define CWEventMask (1L<<11)
|
||||||
|
#define CWDontPropagate (1L<<12)
|
||||||
|
#define CWColormap (1L<<13)
|
||||||
|
#define CWCursor (1L<<14)
|
||||||
|
|
||||||
|
/* ConfigureWindow structure */
|
||||||
|
|
||||||
|
#define CWX (1<<0)
|
||||||
|
#define CWY (1<<1)
|
||||||
|
#define CWWidth (1<<2)
|
||||||
|
#define CWHeight (1<<3)
|
||||||
|
#define CWBorderWidth (1<<4)
|
||||||
|
#define CWSibling (1<<5)
|
||||||
|
#define CWStackMode (1<<6)
|
||||||
|
|
||||||
|
|
||||||
|
/* Bit Gravity */
|
||||||
|
|
||||||
|
#define ForgetGravity 0
|
||||||
|
#define NorthWestGravity 1
|
||||||
|
#define NorthGravity 2
|
||||||
|
#define NorthEastGravity 3
|
||||||
|
#define WestGravity 4
|
||||||
|
#define CenterGravity 5
|
||||||
|
#define EastGravity 6
|
||||||
|
#define SouthWestGravity 7
|
||||||
|
#define SouthGravity 8
|
||||||
|
#define SouthEastGravity 9
|
||||||
|
#define StaticGravity 10
|
||||||
|
|
||||||
|
/* Window gravity + bit gravity above */
|
||||||
|
|
||||||
|
#define UnmapGravity 0
|
||||||
|
|
||||||
|
/* Used in CreateWindow for backing-store hint */
|
||||||
|
|
||||||
|
#define NotUseful 0
|
||||||
|
#define WhenMapped 1
|
||||||
|
#define Always 2
|
||||||
|
|
||||||
|
/* Used in GetWindowAttributes reply */
|
||||||
|
|
||||||
|
#define IsUnmapped 0
|
||||||
|
#define IsUnviewable 1
|
||||||
|
#define IsViewable 2
|
||||||
|
|
||||||
|
/* Used in ChangeSaveSet */
|
||||||
|
|
||||||
|
#define SetModeInsert 0
|
||||||
|
#define SetModeDelete 1
|
||||||
|
|
||||||
|
/* Used in ChangeCloseDownMode */
|
||||||
|
|
||||||
|
#define DestroyAll 0
|
||||||
|
#define RetainPermanent 1
|
||||||
|
#define RetainTemporary 2
|
||||||
|
|
||||||
|
/* Window stacking method (in configureWindow) */
|
||||||
|
|
||||||
|
#define Above 0
|
||||||
|
#define Below 1
|
||||||
|
#define TopIf 2
|
||||||
|
#define BottomIf 3
|
||||||
|
#define Opposite 4
|
||||||
|
|
||||||
|
/* Circulation direction */
|
||||||
|
|
||||||
|
#define RaiseLowest 0
|
||||||
|
#define LowerHighest 1
|
||||||
|
|
||||||
|
/* Property modes */
|
||||||
|
|
||||||
|
#define PropModeReplace 0
|
||||||
|
#define PropModePrepend 1
|
||||||
|
#define PropModeAppend 2
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* GRAPHICS DEFINITIONS
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* graphics functions, as in GC.alu */
|
||||||
|
|
||||||
|
#define GXclear 0x0 /* 0 */
|
||||||
|
#define GXand 0x1 /* src AND dst */
|
||||||
|
#define GXandReverse 0x2 /* src AND NOT dst */
|
||||||
|
#define GXcopy 0x3 /* src */
|
||||||
|
#define GXandInverted 0x4 /* NOT src AND dst */
|
||||||
|
#define GXnoop 0x5 /* dst */
|
||||||
|
#define GXxor 0x6 /* src XOR dst */
|
||||||
|
#define GXor 0x7 /* src OR dst */
|
||||||
|
#define GXnor 0x8 /* NOT src AND NOT dst */
|
||||||
|
#define GXequiv 0x9 /* NOT src XOR dst */
|
||||||
|
#define GXinvert 0xa /* NOT dst */
|
||||||
|
#define GXorReverse 0xb /* src OR NOT dst */
|
||||||
|
#define GXcopyInverted 0xc /* NOT src */
|
||||||
|
#define GXorInverted 0xd /* NOT src OR dst */
|
||||||
|
#define GXnand 0xe /* NOT src OR NOT dst */
|
||||||
|
#define GXset 0xf /* 1 */
|
||||||
|
|
||||||
|
/* LineStyle */
|
||||||
|
|
||||||
|
#define LineSolid 0
|
||||||
|
#define LineOnOffDash 1
|
||||||
|
#define LineDoubleDash 2
|
||||||
|
|
||||||
|
/* capStyle */
|
||||||
|
|
||||||
|
#define CapNotLast 0
|
||||||
|
#define CapButt 1
|
||||||
|
#define CapRound 2
|
||||||
|
#define CapProjecting 3
|
||||||
|
|
||||||
|
/* joinStyle */
|
||||||
|
|
||||||
|
#define JoinMiter 0
|
||||||
|
#define JoinRound 1
|
||||||
|
#define JoinBevel 2
|
||||||
|
|
||||||
|
/* fillStyle */
|
||||||
|
|
||||||
|
#define FillSolid 0
|
||||||
|
#define FillTiled 1
|
||||||
|
#define FillStippled 2
|
||||||
|
#define FillOpaqueStippled 3
|
||||||
|
|
||||||
|
/* fillRule */
|
||||||
|
|
||||||
|
#define EvenOddRule 0
|
||||||
|
#define WindingRule 1
|
||||||
|
|
||||||
|
/* subwindow mode */
|
||||||
|
|
||||||
|
#define ClipByChildren 0
|
||||||
|
#define IncludeInferiors 1
|
||||||
|
|
||||||
|
/* SetClipRectangles ordering */
|
||||||
|
|
||||||
|
#define Unsorted 0
|
||||||
|
#define YSorted 1
|
||||||
|
#define YXSorted 2
|
||||||
|
#define YXBanded 3
|
||||||
|
|
||||||
|
/* CoordinateMode for drawing routines */
|
||||||
|
|
||||||
|
#define CoordModeOrigin 0 /* relative to the origin */
|
||||||
|
#define CoordModePrevious 1 /* relative to previous point */
|
||||||
|
|
||||||
|
/* Polygon shapes */
|
||||||
|
|
||||||
|
#define Complex 0 /* paths may intersect */
|
||||||
|
#define Nonconvex 1 /* no paths intersect, but not convex */
|
||||||
|
#define Convex 2 /* wholly convex */
|
||||||
|
|
||||||
|
/* Arc modes for PolyFillArc */
|
||||||
|
|
||||||
|
#define ArcChord 0 /* join endpoints of arc */
|
||||||
|
#define ArcPieSlice 1 /* join endpoints to center of arc */
|
||||||
|
|
||||||
|
/* GC components: masks used in CreateGC, CopyGC, ChangeGC, OR'ed into
|
||||||
|
GC.stateChanges */
|
||||||
|
|
||||||
|
#define GCFunction (1L<<0)
|
||||||
|
#define GCPlaneMask (1L<<1)
|
||||||
|
#define GCForeground (1L<<2)
|
||||||
|
#define GCBackground (1L<<3)
|
||||||
|
#define GCLineWidth (1L<<4)
|
||||||
|
#define GCLineStyle (1L<<5)
|
||||||
|
#define GCCapStyle (1L<<6)
|
||||||
|
#define GCJoinStyle (1L<<7)
|
||||||
|
#define GCFillStyle (1L<<8)
|
||||||
|
#define GCFillRule (1L<<9)
|
||||||
|
#define GCTile (1L<<10)
|
||||||
|
#define GCStipple (1L<<11)
|
||||||
|
#define GCTileStipXOrigin (1L<<12)
|
||||||
|
#define GCTileStipYOrigin (1L<<13)
|
||||||
|
#define GCFont (1L<<14)
|
||||||
|
#define GCSubwindowMode (1L<<15)
|
||||||
|
#define GCGraphicsExposures (1L<<16)
|
||||||
|
#define GCClipXOrigin (1L<<17)
|
||||||
|
#define GCClipYOrigin (1L<<18)
|
||||||
|
#define GCClipMask (1L<<19)
|
||||||
|
#define GCDashOffset (1L<<20)
|
||||||
|
#define GCDashList (1L<<21)
|
||||||
|
#define GCArcMode (1L<<22)
|
||||||
|
|
||||||
|
#define GCLastBit 22
|
||||||
|
/*****************************************************************
|
||||||
|
* FONTS
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* used in QueryFont -- draw direction */
|
||||||
|
|
||||||
|
#define FontLeftToRight 0
|
||||||
|
#define FontRightToLeft 1
|
||||||
|
|
||||||
|
#define FontChange 255
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* IMAGING
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* ImageFormat -- PutImage, GetImage */
|
||||||
|
|
||||||
|
#define XYBitmap 0 /* depth 1, XYFormat */
|
||||||
|
#define XYPixmap 1 /* depth == drawable depth */
|
||||||
|
#define ZPixmap 2 /* depth == drawable depth */
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* COLOR MAP STUFF
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* For CreateColormap */
|
||||||
|
|
||||||
|
#define AllocNone 0 /* create map with no entries */
|
||||||
|
#define AllocAll 1 /* allocate entire map writeable */
|
||||||
|
|
||||||
|
|
||||||
|
/* Flags used in StoreNamedColor, StoreColors */
|
||||||
|
|
||||||
|
#define DoRed (1<<0)
|
||||||
|
#define DoGreen (1<<1)
|
||||||
|
#define DoBlue (1<<2)
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* CURSOR STUFF
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* QueryBestSize Class */
|
||||||
|
|
||||||
|
#define CursorShape 0 /* largest size that can be displayed */
|
||||||
|
#define TileShape 1 /* size tiled fastest */
|
||||||
|
#define StippleShape 2 /* size stippled fastest */
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* KEYBOARD/POINTER STUFF
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
#define AutoRepeatModeOff 0
|
||||||
|
#define AutoRepeatModeOn 1
|
||||||
|
#define AutoRepeatModeDefault 2
|
||||||
|
|
||||||
|
#define LedModeOff 0
|
||||||
|
#define LedModeOn 1
|
||||||
|
|
||||||
|
/* masks for ChangeKeyboardControl */
|
||||||
|
|
||||||
|
#define KBKeyClickPercent (1L<<0)
|
||||||
|
#define KBBellPercent (1L<<1)
|
||||||
|
#define KBBellPitch (1L<<2)
|
||||||
|
#define KBBellDuration (1L<<3)
|
||||||
|
#define KBLed (1L<<4)
|
||||||
|
#define KBLedMode (1L<<5)
|
||||||
|
#define KBKey (1L<<6)
|
||||||
|
#define KBAutoRepeatMode (1L<<7)
|
||||||
|
|
||||||
|
#define MappingSuccess 0
|
||||||
|
#define MappingBusy 1
|
||||||
|
#define MappingFailed 2
|
||||||
|
|
||||||
|
#define MappingModifier 0
|
||||||
|
#define MappingKeyboard 1
|
||||||
|
#define MappingPointer 2
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* SCREEN SAVER STUFF
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
#define DontPreferBlanking 0
|
||||||
|
#define PreferBlanking 1
|
||||||
|
#define DefaultBlanking 2
|
||||||
|
|
||||||
|
#define DisableScreenSaver 0
|
||||||
|
#define DisableScreenInterval 0
|
||||||
|
|
||||||
|
#define DontAllowExposures 0
|
||||||
|
#define AllowExposures 1
|
||||||
|
#define DefaultExposures 2
|
||||||
|
|
||||||
|
/* for ForceScreenSaver */
|
||||||
|
|
||||||
|
#define ScreenSaverReset 0
|
||||||
|
#define ScreenSaverActive 1
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
* HOSTS AND CONNECTIONS
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* for ChangeHosts */
|
||||||
|
|
||||||
|
#define HostInsert 0
|
||||||
|
#define HostDelete 1
|
||||||
|
|
||||||
|
/* for ChangeAccessControl */
|
||||||
|
|
||||||
|
#define EnableAccess 1
|
||||||
|
#define DisableAccess 0
|
||||||
|
|
||||||
|
/* Display classes used in opening the connection
|
||||||
|
* Note that the statically allocated ones are even numbered and the
|
||||||
|
* dynamically changeable ones are odd numbered */
|
||||||
|
|
||||||
|
#define StaticGray 0
|
||||||
|
#define GrayScale 1
|
||||||
|
#define StaticColor 2
|
||||||
|
#define PseudoColor 3
|
||||||
|
#define TrueColor 4
|
||||||
|
#define DirectColor 5
|
||||||
|
|
||||||
|
|
||||||
|
/* Byte order used in imageByteOrder and bitmapBitOrder */
|
||||||
|
|
||||||
|
#define LSBFirst 0
|
||||||
|
#define MSBFirst 1
|
||||||
|
|
||||||
|
#endif /* X_H */
|
@ -0,0 +1,137 @@
|
|||||||
|
/* $XConsortium: Xalloca.h /main/6 1996/09/28 16:17:22 rws $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 1995 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall
|
||||||
|
not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
other dealings in this Software without prior written authorization
|
||||||
|
from the X Consortium.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The purpose of this header is to define the macros ALLOCATE_LOCAL and
|
||||||
|
* DEALLOCATE_LOCAL appropriately for the platform being compiled on.
|
||||||
|
* These macros are used to make fast, function-local memory allocations.
|
||||||
|
* Their characteristics are as follows:
|
||||||
|
*
|
||||||
|
* void *ALLOCATE_LOCAL(int size)
|
||||||
|
* Returns a pointer to size bytes of memory, or NULL if the allocation
|
||||||
|
* failed. The memory must be freed with DEALLOCATE_LOCAL before the
|
||||||
|
* function that made the allocation returns. You should not ask for
|
||||||
|
* large blocks of memory with this function, since on many platforms
|
||||||
|
* the memory comes from the stack, which may have limited size.
|
||||||
|
*
|
||||||
|
* void DEALLOCATE_LOCAL(void *)
|
||||||
|
* Frees the memory allocated by ALLOCATE_LOCAL. Omission of this
|
||||||
|
* step may be harmless on some platforms, but will result in
|
||||||
|
* memory leaks or worse on others.
|
||||||
|
*
|
||||||
|
* Before including this file, you should define two macros,
|
||||||
|
* ALLOCATE_LOCAL_FALLBACK and DEALLOCATE_LOCAL_FALLBACK, that have the
|
||||||
|
* same characteristics as ALLOCATE_LOCAL and DEALLOCATE_LOCAL. The
|
||||||
|
* header uses the fallbacks if it doesn't know a "better" way to define
|
||||||
|
* ALLOCATE_LOCAL and DEALLOCATE_LOCAL. Typical usage would be:
|
||||||
|
*
|
||||||
|
* #define ALLOCATE_LOCAL_FALLBACK(_size) malloc(_size)
|
||||||
|
* #define DEALLOCATE_LOCAL_FALLBACK(_ptr) free(_ptr)
|
||||||
|
* #include "Xalloca.h"
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef XALLOCA_H
|
||||||
|
#define XALLOCA_H 1
|
||||||
|
|
||||||
|
#ifdef INCLUDE_ALLOCA_H
|
||||||
|
# include <alloca.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_ALLOCA
|
||||||
|
/*
|
||||||
|
* os-dependent definition of local allocation and deallocation
|
||||||
|
* If you want something other than (DE)ALLOCATE_LOCAL_FALLBACK
|
||||||
|
* for ALLOCATE/DEALLOCATE_LOCAL then you add that in here.
|
||||||
|
*/
|
||||||
|
# if defined(__HIGHC__)
|
||||||
|
# ifndef NCR
|
||||||
|
extern char *alloca();
|
||||||
|
# if HCVERSION < 21003
|
||||||
|
# define ALLOCATE_LOCAL(size) alloca((int)(size))
|
||||||
|
pragma on(alloca);
|
||||||
|
# else /* HCVERSION >= 21003 */
|
||||||
|
# define ALLOCATE_LOCAL(size) _Alloca((int)(size))
|
||||||
|
# endif /* HCVERSION < 21003 */
|
||||||
|
# else /* NCR */
|
||||||
|
# define ALLOCATE_LOCAL(size) alloca(size)
|
||||||
|
# endif
|
||||||
|
# define DEALLOCATE_LOCAL(ptr) /* as nothing */
|
||||||
|
# endif /* defined(__HIGHC__) */
|
||||||
|
|
||||||
|
|
||||||
|
# ifdef __GNUC__
|
||||||
|
# ifndef alloca
|
||||||
|
# define alloca __builtin_alloca
|
||||||
|
# endif /* !alloca */
|
||||||
|
# define ALLOCATE_LOCAL(size) alloca((int)(size))
|
||||||
|
# define DEALLOCATE_LOCAL(ptr) /* as nothing */
|
||||||
|
# else /* ! __GNUC__ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* warning: old mips alloca (pre 2.10) is unusable, new one is built in
|
||||||
|
* Test is easy, the new one is named __builtin_alloca and comes
|
||||||
|
* from alloca.h which #defines alloca.
|
||||||
|
*/
|
||||||
|
# ifndef NCR
|
||||||
|
# if defined(vax) || defined(sun) || defined(apollo) || defined(stellar) || defined(USL) || defined(alloca)
|
||||||
|
/*
|
||||||
|
* Some System V boxes extract alloca.o from /lib/libPW.a; if you
|
||||||
|
* decide that you don't want to use alloca, you might want to fix it here.
|
||||||
|
*/
|
||||||
|
/* alloca might be a macro taking one arg (hi, Sun!), so give it one. */
|
||||||
|
# ifndef __sgi /* IRIX 5/6 has definition */
|
||||||
|
# define __Xnullarg /* as nothing */
|
||||||
|
# ifndef X_NOT_STDC_ENV
|
||||||
|
extern void *alloca(__Xnullarg);
|
||||||
|
# else
|
||||||
|
extern char *alloca(__Xnullarg);
|
||||||
|
# endif
|
||||||
|
# endif /* __sgi */
|
||||||
|
# define ALLOCATE_LOCAL(size) alloca((int)(size))
|
||||||
|
# define DEALLOCATE_LOCAL(ptr) /* as nothing */
|
||||||
|
# endif /* who does alloca */
|
||||||
|
# endif /* NCR */
|
||||||
|
# endif /* __GNUC__ */
|
||||||
|
|
||||||
|
#endif /* NO_ALLOCA */
|
||||||
|
|
||||||
|
#if !defined(ALLOCATE_LOCAL)
|
||||||
|
# if defined(ALLOCATE_LOCAL_FALLBACK) && defined(DEALLOCATE_LOCAL_FALLBACK)
|
||||||
|
# define ALLOCATE_LOCAL(_size) ALLOCATE_LOCAL_FALLBACK(_size)
|
||||||
|
# define DEALLOCATE_LOCAL(_ptr) DEALLOCATE_LOCAL_FALLBACK(_ptr)
|
||||||
|
# else /* no fallbacks supplied; error */
|
||||||
|
# define ALLOCATE_LOCAL(_size) ALLOCATE_LOCAL_FALLBACK undefined!
|
||||||
|
# define DEALLOCATE_LOCAL(_ptr) DEALLOCATE_LOCAL_FALLBACK undefined!
|
||||||
|
# endif /* defined(ALLOCATE_LOCAL_FALLBACK && DEALLOCATE_LOCAL_FALLBACK) */
|
||||||
|
#endif /* !defined(ALLOCATE_LOCAL) */
|
||||||
|
|
||||||
|
#endif /* XALLOCA_H */
|
@ -0,0 +1,88 @@
|
|||||||
|
/* $XConsortium: Xfuncproto.h,v 1.9 95/06/08 23:20:39 gildea Exp $ */
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
Copyright (c) 1989, 1991 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Definitions to make function prototypes manageable */
|
||||||
|
|
||||||
|
#ifndef _XFUNCPROTO_H_
|
||||||
|
#define _XFUNCPROTO_H_
|
||||||
|
|
||||||
|
#ifndef NeedFunctionPrototypes
|
||||||
|
#if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
|
||||||
|
#define NeedFunctionPrototypes 1
|
||||||
|
#else
|
||||||
|
#define NeedFunctionPrototypes 0
|
||||||
|
#endif
|
||||||
|
#endif /* NeedFunctionPrototypes */
|
||||||
|
|
||||||
|
#ifndef NeedVarargsPrototypes
|
||||||
|
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&2)
|
||||||
|
#define NeedVarargsPrototypes 1
|
||||||
|
#else
|
||||||
|
#define NeedVarargsPrototypes 0
|
||||||
|
#endif
|
||||||
|
#endif /* NeedVarargsPrototypes */
|
||||||
|
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
|
||||||
|
#ifndef NeedNestedPrototypes
|
||||||
|
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&8)
|
||||||
|
#define NeedNestedPrototypes 1
|
||||||
|
#else
|
||||||
|
#define NeedNestedPrototypes 0
|
||||||
|
#endif
|
||||||
|
#endif /* NeedNestedPrototypes */
|
||||||
|
|
||||||
|
#ifndef _Xconst
|
||||||
|
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) || (FUNCPROTO&4)
|
||||||
|
#define _Xconst const
|
||||||
|
#else
|
||||||
|
#define _Xconst
|
||||||
|
#endif
|
||||||
|
#endif /* _Xconst */
|
||||||
|
|
||||||
|
#ifndef NeedWidePrototypes
|
||||||
|
#ifdef NARROWPROTO
|
||||||
|
#define NeedWidePrototypes 0
|
||||||
|
#else
|
||||||
|
#define NeedWidePrototypes 1 /* default to make interropt. easier */
|
||||||
|
#endif
|
||||||
|
#endif /* NeedWidePrototypes */
|
||||||
|
|
||||||
|
#endif /* NeedFunctionPrototypes */
|
||||||
|
|
||||||
|
#ifndef _XFUNCPROTOBEGIN
|
||||||
|
#ifdef __cplusplus /* for C++ V2.0 */
|
||||||
|
#define _XFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */
|
||||||
|
#define _XFUNCPROTOEND }
|
||||||
|
#else
|
||||||
|
#define _XFUNCPROTOBEGIN
|
||||||
|
#define _XFUNCPROTOEND
|
||||||
|
#endif
|
||||||
|
#endif /* _XFUNCPROTOBEGIN */
|
||||||
|
|
||||||
|
#endif /* _XFUNCPROTO_H_ */
|
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* $XConsortium: Xfuncs.h,v 1.16 94/12/01 16:25:53 kaleb Exp $
|
||||||
|
* $XFree86: xc/include/Xfuncs.h,v 3.2 1995/01/28 15:42:03 dawes Exp $
|
||||||
|
*
|
||||||
|
*
|
||||||
|
Copyright (c) 1990 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _XFUNCS_H_
|
||||||
|
#define _XFUNCS_H_
|
||||||
|
|
||||||
|
#include <X11/Xosdefs.h>
|
||||||
|
|
||||||
|
/* the old Xfuncs.h, for pre-R6 */
|
||||||
|
|
||||||
|
#ifdef X_USEBFUNCS
|
||||||
|
void bcopy();
|
||||||
|
void bzero();
|
||||||
|
int bcmp();
|
||||||
|
#else
|
||||||
|
#if (__STDC__ && !defined(X_NOT_STDC_ENV) && !defined(sun) && !defined(macII) && !defined(apollo)) || defined(SVR4) || defined(hpux) || defined(_IBMR2) || defined(_SEQUENT_)
|
||||||
|
#include <string.h>
|
||||||
|
#define _XFUNCS_H_INCLUDED_STRING_H
|
||||||
|
#define bcopy(b1,b2,len) memmove(b2, b1, (size_t)(len))
|
||||||
|
#define bzero(b,len) memset(b, 0, (size_t)(len))
|
||||||
|
#define bcmp(b1,b2,len) memcmp(b1, b2, (size_t)(len))
|
||||||
|
#else
|
||||||
|
#ifdef sgi
|
||||||
|
#include <bstring.h>
|
||||||
|
#else
|
||||||
|
#ifdef SYSV
|
||||||
|
#include <memory.h>
|
||||||
|
void bcopy();
|
||||||
|
#define bzero(b,len) memset(b, 0, len)
|
||||||
|
#define bcmp(b1,b2,len) memcmp(b1, b2, len)
|
||||||
|
#else
|
||||||
|
#ifdef __EMX__
|
||||||
|
#include <strings.h>
|
||||||
|
#define _XFUNCS_H_INCLUDED_STRING_H
|
||||||
|
/* bcopy, bcmp, bzero declared */
|
||||||
|
#else /* bsd */
|
||||||
|
void bcopy();
|
||||||
|
void bzero();
|
||||||
|
int bcmp();
|
||||||
|
#endif
|
||||||
|
#endif /* SYSV */
|
||||||
|
#endif /* sgi */
|
||||||
|
#endif /* __STDC__ and relatives */
|
||||||
|
#endif /* X_USEBFUNCS */
|
||||||
|
|
||||||
|
/* the new Xfuncs.h */
|
||||||
|
|
||||||
|
#if !defined(X_NOT_STDC_ENV) && (!defined(sun) || defined(SVR4))
|
||||||
|
/* the ANSI C way */
|
||||||
|
#ifndef _XFUNCS_H_INCLUDED_STRING_H
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
#undef bzero
|
||||||
|
#define bzero(b,len) memset(b,0,len)
|
||||||
|
#else /* else X_NOT_STDC_ENV or SunOS 4 */
|
||||||
|
#if defined(SYSV) || defined(luna) || defined(sun) || defined(__sxg__)
|
||||||
|
#include <memory.h>
|
||||||
|
#define memmove(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len))
|
||||||
|
#if defined(SYSV) && defined(_XBCOPYFUNC)
|
||||||
|
#undef memmove
|
||||||
|
#define memmove(dst,src,len) _XBCOPYFUNC((char *)(src),(char *)(dst),(int)(len))
|
||||||
|
#define _XNEEDBCOPYFUNC
|
||||||
|
#endif
|
||||||
|
#else /* else vanilla BSD */
|
||||||
|
#define memmove(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len))
|
||||||
|
#define memcpy(dst,src,len) bcopy((char *)(src),(char *)(dst),(int)(len))
|
||||||
|
#define memcmp(b1,b2,len) bcmp((char *)(b1),(char *)(b2),(int)(len))
|
||||||
|
#endif /* SYSV else */
|
||||||
|
#endif /* ! X_NOT_STDC_ENV else */
|
||||||
|
|
||||||
|
#endif /* _XFUNCS_H_ */
|
@ -0,0 +1,206 @@
|
|||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#ifndef XMD_H
|
||||||
|
#define XMD_H 1
|
||||||
|
/* $XConsortium: Xmd.h,v 1.49 95/06/08 23:20:39 gildea Exp $ */
|
||||||
|
/* $XFree86: xc/include/Xmd.h,v 3.4 1996/12/31 04:15:20 dawes Exp $ */
|
||||||
|
/*
|
||||||
|
* Xmd.h: MACHINE DEPENDENT DECLARATIONS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Special per-machine configuration flags.
|
||||||
|
*/
|
||||||
|
#ifdef CRAY
|
||||||
|
#define WORD64 /* 64-bit architecture */
|
||||||
|
#endif
|
||||||
|
#if defined(__alpha) || defined(__alpha__)
|
||||||
|
#define LONG64 /* 32/64-bit architecture */
|
||||||
|
#endif
|
||||||
|
#ifdef __sgi
|
||||||
|
#if (_MIPS_SZLONG == 64)
|
||||||
|
#define LONG64
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stuff to handle large architecture machines; the constants were generated
|
||||||
|
* on a 32-bit machine and must coorespond to the protocol.
|
||||||
|
*/
|
||||||
|
#ifdef WORD64
|
||||||
|
#define MUSTCOPY
|
||||||
|
#endif /* WORD64 */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definition of macro used to set constants for size of network structures;
|
||||||
|
* machines with preprocessors that can't handle all of the sz_ symbols
|
||||||
|
* can define this macro to be sizeof(x) if and only if their compiler doesn't
|
||||||
|
* pad out structures (esp. the xTextElt structure which contains only two
|
||||||
|
* one-byte fields). Network structures should always define sz_symbols.
|
||||||
|
*
|
||||||
|
* The sz_ prefix is used instead of something more descriptive so that the
|
||||||
|
* symbols are no more than 32 characters long (which causes problems for some
|
||||||
|
* compilers and preprocessors).
|
||||||
|
*
|
||||||
|
* The extra indirection in the __STDC__ case is to get macro arguments to
|
||||||
|
* expand correctly before the concatenation, rather than afterward.
|
||||||
|
*/
|
||||||
|
#if ((defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)) && !defined(UNIXCPP)) || defined(ANSICPP)
|
||||||
|
#define _SIZEOF(x) sz_##x
|
||||||
|
#define SIZEOF(x) _SIZEOF(x)
|
||||||
|
#else
|
||||||
|
#define SIZEOF(x) sz_/**/x
|
||||||
|
#endif /* if ANSI C compiler else not */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bitfield suffixes for the protocol structure elements, if you
|
||||||
|
* need them. Note that bitfields are not guarranteed to be signed
|
||||||
|
* (or even unsigned) according to ANSI C.
|
||||||
|
*/
|
||||||
|
#ifdef WORD64
|
||||||
|
typedef long INT64;
|
||||||
|
typedef unsigned long CARD64;
|
||||||
|
#define B32 :32
|
||||||
|
#define B16 :16
|
||||||
|
#ifdef UNSIGNEDBITFIELDS
|
||||||
|
typedef unsigned int INT32;
|
||||||
|
typedef unsigned int INT16;
|
||||||
|
#else
|
||||||
|
#ifdef __STDC__
|
||||||
|
typedef signed int INT32;
|
||||||
|
typedef signed int INT16;
|
||||||
|
#else
|
||||||
|
typedef int INT32;
|
||||||
|
typedef int INT16;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define B32
|
||||||
|
#define B16
|
||||||
|
#ifdef LONG64
|
||||||
|
typedef long INT64;
|
||||||
|
typedef int INT32;
|
||||||
|
#else
|
||||||
|
typedef long INT32;
|
||||||
|
#endif
|
||||||
|
typedef short INT16;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__STDC__) || defined(sgi) || defined(AIXV3)
|
||||||
|
typedef signed char INT8;
|
||||||
|
#else
|
||||||
|
typedef char INT8;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef LONG64
|
||||||
|
typedef unsigned long CARD64;
|
||||||
|
typedef unsigned int CARD32;
|
||||||
|
#else
|
||||||
|
typedef unsigned long CARD32;
|
||||||
|
#endif
|
||||||
|
typedef unsigned short CARD16;
|
||||||
|
typedef unsigned char CARD8;
|
||||||
|
|
||||||
|
typedef CARD32 BITS32;
|
||||||
|
typedef CARD16 BITS16;
|
||||||
|
|
||||||
|
#ifndef __EMX__
|
||||||
|
typedef CARD8 BYTE;
|
||||||
|
typedef CARD8 BOOL;
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* This is bad style, but the central include file <os2.h> declares them
|
||||||
|
* as well
|
||||||
|
*/
|
||||||
|
#define BYTE CARD8
|
||||||
|
#define BOOL CARD8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* definitions for sign-extending bitfields on 64-bit architectures
|
||||||
|
*/
|
||||||
|
#if defined(WORD64) && defined(UNSIGNEDBITFIELDS)
|
||||||
|
#define cvtINT8toInt(val) (((val) & 0x00000080) ? ((val) | 0xffffffffffffff00) : (val))
|
||||||
|
#define cvtINT16toInt(val) (((val) & 0x00008000) ? ((val) | 0xffffffffffff0000) : (val))
|
||||||
|
#define cvtINT32toInt(val) (((val) & 0x80000000) ? ((val) | 0xffffffff00000000) : (val))
|
||||||
|
#define cvtINT8toShort(val) cvtINT8toInt(val)
|
||||||
|
#define cvtINT16toShort(val) cvtINT16toInt(val)
|
||||||
|
#define cvtINT32toShort(val) cvtINT32toInt(val)
|
||||||
|
#define cvtINT8toLong(val) cvtINT8toInt(val)
|
||||||
|
#define cvtINT16toLong(val) cvtINT16toInt(val)
|
||||||
|
#define cvtINT32toLong(val) cvtINT32toInt(val)
|
||||||
|
#else
|
||||||
|
#define cvtINT8toInt(val) (val)
|
||||||
|
#define cvtINT16toInt(val) (val)
|
||||||
|
#define cvtINT32toInt(val) (val)
|
||||||
|
#define cvtINT8toShort(val) (val)
|
||||||
|
#define cvtINT16toShort(val) (val)
|
||||||
|
#define cvtINT32toShort(val) (val)
|
||||||
|
#define cvtINT8toLong(val) (val)
|
||||||
|
#define cvtINT16toLong(val) (val)
|
||||||
|
#define cvtINT32toLong(val) (val)
|
||||||
|
#endif /* WORD64 and UNSIGNEDBITFIELDS */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef MUSTCOPY
|
||||||
|
/*
|
||||||
|
* This macro must not cast or else pointers will get aligned and be wrong
|
||||||
|
*/
|
||||||
|
#define NEXTPTR(p,t) (((char *) p) + SIZEOF(t))
|
||||||
|
#else /* else not MUSTCOPY, this is used for 32-bit machines */
|
||||||
|
/*
|
||||||
|
* this version should leave result of type (t *), but that should only be
|
||||||
|
* used when not in MUSTCOPY
|
||||||
|
*/
|
||||||
|
#define NEXTPTR(p,t) (((t *)(p)) + 1)
|
||||||
|
#endif /* MUSTCOPY - used machines whose C structs don't line up with proto */
|
||||||
|
|
||||||
|
#endif /* XMD_H */
|
@ -0,0 +1,317 @@
|
|||||||
|
/*
|
||||||
|
* $XConsortium: Xos.h /main/70 1996/11/15 16:00:41 kaleb $
|
||||||
|
* $XFree86: xc/include/Xos.h,v 3.21.2.1 1998/01/23 12:35:11 dawes Exp $
|
||||||
|
*
|
||||||
|
*
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
*
|
||||||
|
* The X Window System is a Trademark of X Consortium.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is a collection of things to try and minimize system dependencies
|
||||||
|
* in a "signficant" number of source files.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _XOS_H_
|
||||||
|
#define _XOS_H_
|
||||||
|
|
||||||
|
#include <X11/Xosdefs.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get major data types (esp. caddr_t)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef USG
|
||||||
|
#ifndef __TYPES__
|
||||||
|
#ifdef CRAY
|
||||||
|
#define word word_t
|
||||||
|
#endif /* CRAY */
|
||||||
|
#include <sys/types.h> /* forgot to protect it... */
|
||||||
|
#define __TYPES__
|
||||||
|
#endif /* __TYPES__ */
|
||||||
|
#else /* USG */
|
||||||
|
#if defined(_POSIX_SOURCE) && (defined(MOTOROLA) || defined(AMOEBA))
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
#include <sys/types.h>
|
||||||
|
#define _POSIX_SOURCE
|
||||||
|
#else
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
#endif /* USG */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Just about everyone needs the strings routines. We provide both forms here,
|
||||||
|
* index/rindex and strchr/strrchr, so any systems that don't provide them all
|
||||||
|
* need to have #defines here.
|
||||||
|
*
|
||||||
|
* NOTE: The following ISN'T true for this XFree86 version of this file.
|
||||||
|
*
|
||||||
|
* These macros are defined this way, rather than, e.g.:
|
||||||
|
* #defined index(s,c) strchr(s,c)
|
||||||
|
* because someone might be using them as function pointers, and such
|
||||||
|
* a change would break compatibility for anyone who's relying on them
|
||||||
|
* being the way they currently are. So we're stuck with them this way,
|
||||||
|
* which can be really inconvenient. :-(
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef X_NOT_STDC_ENV
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#ifdef __STDC__
|
||||||
|
#ifndef index
|
||||||
|
#define index(s,c) (strchr((s),(c)))
|
||||||
|
#endif
|
||||||
|
#ifndef rindex
|
||||||
|
#define rindex(s,c) (strrchr((s),(c)))
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifndef index
|
||||||
|
#define index strchr
|
||||||
|
#endif
|
||||||
|
#ifndef rindex
|
||||||
|
#define rindex strrchr
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef SYSV
|
||||||
|
#if defined(clipper) || defined(__clipper__)
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
#include <string.h>
|
||||||
|
#define index strchr
|
||||||
|
#define rindex strrchr
|
||||||
|
#else
|
||||||
|
#include <strings.h>
|
||||||
|
#define strchr index
|
||||||
|
#define strrchr rindex
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* X_NOT_STDC_ENV */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* strerror()
|
||||||
|
*/
|
||||||
|
#if (defined(X_NOT_STDC_ENV) || (defined(sun) && !defined(SVR4)) || defined(macII)) && !defined(__GLIBC__)
|
||||||
|
#ifndef strerror
|
||||||
|
extern char *sys_errlist[];
|
||||||
|
extern int sys_nerr;
|
||||||
|
#define strerror(n) \
|
||||||
|
(((n) >= 0 && (n) < sys_nerr) ? sys_errlist[n] : "unknown error")
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get open(2) constants
|
||||||
|
*/
|
||||||
|
#ifdef X_NOT_POSIX
|
||||||
|
#include <fcntl.h>
|
||||||
|
#if defined(USL) || defined(CRAY) || defined(MOTOROLA) || (defined(i386) && (defined(SYSV) || defined(SVR4))) || defined(__sxg__)
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <X11/Xw32defs.h>
|
||||||
|
#else
|
||||||
|
#include <sys/file.h>
|
||||||
|
#endif
|
||||||
|
#else /* X_NOT_POSIX */
|
||||||
|
#if !defined(_POSIX_SOURCE) && defined(macII)
|
||||||
|
#define _POSIX_SOURCE
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
#else
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#endif /* X_NOT_POSIX else */
|
||||||
|
|
||||||
|
#ifdef CSRG_BASED
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif /* CSRG_BASED */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get struct timeval
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef SYSV
|
||||||
|
|
||||||
|
#ifndef USL
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
#include <time.h>
|
||||||
|
#ifdef CRAY
|
||||||
|
#undef word
|
||||||
|
#endif /* CRAY */
|
||||||
|
#if defined(USG) && !defined(CRAY) && !defined(MOTOROLA) && !defined(uniosu) && !defined(__sxg__) && !defined(clipper) && !defined(__clipper__)
|
||||||
|
struct timeval {
|
||||||
|
long tv_sec;
|
||||||
|
long tv_usec;
|
||||||
|
};
|
||||||
|
#ifndef USL_SHARELIB
|
||||||
|
struct timezone {
|
||||||
|
int tz_minuteswest;
|
||||||
|
int tz_dsttime;
|
||||||
|
};
|
||||||
|
#endif /* USL_SHARELIB */
|
||||||
|
#endif /* USG */
|
||||||
|
|
||||||
|
#ifdef _SEQUENT_
|
||||||
|
struct timezone {
|
||||||
|
int tz_minuteswest;
|
||||||
|
int tz_dsttime;
|
||||||
|
};
|
||||||
|
#endif /* _SEQUENT_ */
|
||||||
|
|
||||||
|
#else /* not SYSV */
|
||||||
|
|
||||||
|
#if defined(_ANSI_SOURCE) && defined(__bsdi__)
|
||||||
|
#undef _ANSI_SOURCE
|
||||||
|
#include <sys/time.h>
|
||||||
|
#define _ANSI_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_POSIX_SOURCE) && defined(SVR4)
|
||||||
|
/* need to omit _POSIX_SOURCE in order to get what we want in SVR4 */
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
#include <sys/time.h>
|
||||||
|
#define _POSIX_SOURCE
|
||||||
|
#else /* defined(_POSIX_SOURCE) && defined(SVR4) */
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <time.h>
|
||||||
|
#if !defined(_WINSOCKAPI_) && !defined(_WILLWINSOCK_)
|
||||||
|
struct timeval {
|
||||||
|
long tv_sec; /* seconds */
|
||||||
|
long tv_usec; /* and microseconds */
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
#include <sys/timeb.h>
|
||||||
|
#define gettimeofday(t) \
|
||||||
|
{ \
|
||||||
|
struct _timeb _gtodtmp; \
|
||||||
|
_ftime (&_gtodtmp); \
|
||||||
|
(t)->tv_sec = _gtodtmp.time; \
|
||||||
|
(t)->tv_usec = _gtodtmp.millitm * 1000; \
|
||||||
|
}
|
||||||
|
#else /* WIN32 */
|
||||||
|
#ifdef _SEQUENT_
|
||||||
|
#include <time.h>
|
||||||
|
#else /* _SEQUENT_ */
|
||||||
|
#ifdef AMOEBA
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else /* AMOEBA */
|
||||||
|
#ifdef MINIX
|
||||||
|
#include <time.h>
|
||||||
|
#else /* !MINIX */
|
||||||
|
#ifndef Lynx
|
||||||
|
#include <sys/time.h>
|
||||||
|
#else
|
||||||
|
#include <time.h>
|
||||||
|
#endif /* Lynx */
|
||||||
|
#endif /* MINIX */
|
||||||
|
#endif /* AMOEBA */
|
||||||
|
#endif /* _SEQUENT_ */
|
||||||
|
#endif /* WIN32 else */
|
||||||
|
#endif /* defined(_POSIX_SOURCE) && defined(SVR4) */
|
||||||
|
|
||||||
|
#endif /* SYSV */
|
||||||
|
|
||||||
|
/* define X_GETTIMEOFDAY macro, a portable gettimeofday() */
|
||||||
|
#if defined(_XOPEN_XPG4) || defined(_XOPEN_UNIX) /* _XOPEN_UNIX is XPG4.2 */
|
||||||
|
#define X_GETTIMEOFDAY(t) gettimeofday(t, (struct timezone*)0)
|
||||||
|
#else
|
||||||
|
#if defined(SVR4) || defined(VMS) || defined(WIN32)
|
||||||
|
#define X_GETTIMEOFDAY(t) gettimeofday(t)
|
||||||
|
#else
|
||||||
|
#define X_GETTIMEOFDAY(t) gettimeofday(t, (struct timezone*)0)
|
||||||
|
#endif
|
||||||
|
#endif /* XPG4 else */
|
||||||
|
|
||||||
|
#ifdef MINIX
|
||||||
|
#include <errno.h>
|
||||||
|
#include <net/gen/in.h>
|
||||||
|
#include <net/gen/socket.h>
|
||||||
|
#include <net/gen/udp.h>
|
||||||
|
#include <net/gen/udp_hdr.h>
|
||||||
|
|
||||||
|
struct sockaddr
|
||||||
|
{
|
||||||
|
u16_t sa_family;
|
||||||
|
char sa_data[14];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct sockaddr_in
|
||||||
|
{
|
||||||
|
u16_t sin_family;
|
||||||
|
u16_t sin_port;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ipaddr_t s_addr;
|
||||||
|
} sin_addr;
|
||||||
|
char sin_zero[8];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct in_addr
|
||||||
|
{
|
||||||
|
ipaddr_t s_addr;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef char *caddr_t;
|
||||||
|
typedef unsigned char u_char;
|
||||||
|
#endif /* MINIX */
|
||||||
|
|
||||||
|
#ifdef __EMX__
|
||||||
|
typedef unsigned long fd_mask;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* use POSIX name for signal */
|
||||||
|
#if defined(X_NOT_POSIX) && defined(SYSV) && !defined(SIGCHLD) && !defined(ISC)
|
||||||
|
#define SIGCHLD SIGCLD
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ISC
|
||||||
|
#include <sys/bsdtypes.h>
|
||||||
|
#include <sys/limits.h>
|
||||||
|
#define NGROUPS 16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ISC) || defined(__EMX__)
|
||||||
|
/*
|
||||||
|
* Some OS's may not have this
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define X_NO_SYS_UN 1
|
||||||
|
|
||||||
|
struct sockaddr_un {
|
||||||
|
short sun_family;
|
||||||
|
char sun_path[108];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _XOS_H_ */
|
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
* O/S-dependent (mis)feature macro definitions
|
||||||
|
*
|
||||||
|
* $XConsortium: Xosdefs.h /main/16 1996/09/28 16:17:29 rws $
|
||||||
|
* $XFree86: xc/include/Xosdefs.h,v 3.11 1996/12/23 05:58:09 dawes Exp $
|
||||||
|
*
|
||||||
|
Copyright (c) 1991 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _XOSDEFS_H_
|
||||||
|
#define _XOSDEFS_H_
|
||||||
|
|
||||||
|
/*
|
||||||
|
* X_NOT_STDC_ENV means does not have ANSI C header files. Lack of this
|
||||||
|
* symbol does NOT mean that the system has stdarg.h.
|
||||||
|
*
|
||||||
|
* X_NOT_POSIX means does not have POSIX header files. Lack of this
|
||||||
|
* symbol does NOT mean that the POSIX environment is the default.
|
||||||
|
* You may still have to define _POSIX_SOURCE to get it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef NOSTDHDRS
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef sony
|
||||||
|
#if !defined(SYSTYPE_SYSV) && !defined(_SYSTYPE_SYSV)
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef UTEK
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef vax
|
||||||
|
#ifndef ultrix /* assume vanilla BSD */
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef luna
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Mips
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USL
|
||||||
|
#ifdef SYSV /* (release 3.2) */
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef i386
|
||||||
|
#ifdef SYSV
|
||||||
|
#if !(defined(ISC) && defined(_POSIX_SOURCE))
|
||||||
|
#ifndef SCO
|
||||||
|
#ifndef _SCO_DS /* SCO 5.0 has SVR4 header files */
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#endif
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
#endif /* !(defined(ISC) && defined(_POSIX_SOURCE)) */
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MOTOROLA
|
||||||
|
#ifdef SYSV
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef sun
|
||||||
|
#ifdef SVR4
|
||||||
|
/* define this to whatever it needs to be */
|
||||||
|
#define X_POSIX_C_SOURCE 199300L
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#ifndef _POSIX_
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(nec_ews_svr2) || defined(SX) || defined(PC_UX)
|
||||||
|
#define X_NOT_POSIX
|
||||||
|
#define X_NOT_STDC_ENV
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __EMX__
|
||||||
|
#define USGISH
|
||||||
|
/* EMX claims to be ANSI, so X_NOT_STDC_ENV does not hold */
|
||||||
|
/* could have been provided as std flags as well */
|
||||||
|
#define X_WCHAR
|
||||||
|
#define X_LOCALE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _XOSDEFS_H_ */
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,79 @@
|
|||||||
|
/* $XConsortium: Xprotostr.h,v 1.5 94/04/17 20:10:53 rws Exp $ */
|
||||||
|
#ifndef XPROTOSTRUCTS_H
|
||||||
|
#define XPROTOSTRUCTS_H
|
||||||
|
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#include <X11/Xmd.h>
|
||||||
|
|
||||||
|
/* Used by PolySegment */
|
||||||
|
|
||||||
|
typedef struct _xSegment {
|
||||||
|
INT16 x1 B16, y1 B16, x2 B16, y2 B16;
|
||||||
|
} xSegment;
|
||||||
|
|
||||||
|
/* POINT */
|
||||||
|
|
||||||
|
typedef struct _xPoint {
|
||||||
|
INT16 x B16, y B16;
|
||||||
|
} xPoint;
|
||||||
|
|
||||||
|
typedef struct _xRectangle {
|
||||||
|
INT16 x B16, y B16;
|
||||||
|
CARD16 width B16, height B16;
|
||||||
|
} xRectangle;
|
||||||
|
|
||||||
|
/* ARC */
|
||||||
|
|
||||||
|
typedef struct _xArc {
|
||||||
|
INT16 x B16, y B16;
|
||||||
|
CARD16 width B16, height B16;
|
||||||
|
INT16 angle1 B16, angle2 B16;
|
||||||
|
} xArc;
|
||||||
|
|
||||||
|
#endif /* XPROTOSTRUCTS_H */
|
@ -0,0 +1,60 @@
|
|||||||
|
/* $XConsortium: keysym.h,v 1.15 94/04/17 20:10:55 rws Exp $ */
|
||||||
|
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
/* default keysyms */
|
||||||
|
#define XK_MISCELLANY
|
||||||
|
#define XK_XKB_KEYS
|
||||||
|
#define XK_LATIN1
|
||||||
|
#define XK_LATIN2
|
||||||
|
#define XK_LATIN3
|
||||||
|
#define XK_LATIN4
|
||||||
|
#define XK_GREEK
|
||||||
|
|
||||||
|
#include <X11/keysymdef.h>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,239 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/* $XConsortium: colormap.h,v 1.28 94/04/17 20:25:32 dpw Exp $ */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/colormap.h,v 1.2 1997/01/14 22:22:38 dawes Exp $ */
|
||||||
|
#ifndef CMAP_H
|
||||||
|
#define CMAP_H 1
|
||||||
|
|
||||||
|
#include "X11/Xproto.h"
|
||||||
|
#include "screenint.h"
|
||||||
|
#include "window.h"
|
||||||
|
|
||||||
|
/* these follow X.h's AllocNone and AllocAll */
|
||||||
|
#define CM_PSCREEN 2
|
||||||
|
#define CM_PWIN 3
|
||||||
|
/* Passed internally in colormap.c */
|
||||||
|
#define REDMAP 0
|
||||||
|
#define GREENMAP 1
|
||||||
|
#define BLUEMAP 2
|
||||||
|
#define PSEUDOMAP 3
|
||||||
|
#define AllocPrivate (-1)
|
||||||
|
#define AllocTemporary (-2)
|
||||||
|
#define DynamicClass 1
|
||||||
|
|
||||||
|
/* Values for the flags field of a colormap. These should have 1 bit set
|
||||||
|
* and not overlap */
|
||||||
|
#define IsDefault 1
|
||||||
|
#define AllAllocated 2
|
||||||
|
#define BeingCreated 4
|
||||||
|
|
||||||
|
|
||||||
|
typedef CARD32 Pixel;
|
||||||
|
typedef struct _CMEntry *EntryPtr;
|
||||||
|
/* moved to screenint.h: typedef struct _ColormapRec *ColormapPtr */
|
||||||
|
typedef struct _colorResource *colorResourcePtr;
|
||||||
|
|
||||||
|
extern int CreateColormap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
Colormap /*mid*/,
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
VisualPtr /*pVisual*/,
|
||||||
|
ColormapPtr* /*ppcmap*/,
|
||||||
|
int /*alloc*/,
|
||||||
|
int /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int FreeColormap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*pmap*/,
|
||||||
|
XID /*mid*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int TellLostMap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pwin*/,
|
||||||
|
pointer /* Colormap *pmid */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int TellGainedMap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pwin*/,
|
||||||
|
pointer /* Colormap *pmid */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int CopyColormapAndFree(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
Colormap /*mid*/,
|
||||||
|
ColormapPtr /*pSrc*/,
|
||||||
|
int /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocColor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
unsigned short* /*pred*/,
|
||||||
|
unsigned short* /*pgreen*/,
|
||||||
|
unsigned short* /*pblue*/,
|
||||||
|
Pixel* /*pPix*/,
|
||||||
|
int /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FakeAllocColor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
xColorItem * /*item*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FakeFreeColor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
Pixel /*pixel*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef int (*ColorCompareProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
EntryPtr /*pent*/,
|
||||||
|
xrgb * /*prgb*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int FindColor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
EntryPtr /*pentFirst*/,
|
||||||
|
int /*size*/,
|
||||||
|
xrgb* /*prgb*/,
|
||||||
|
Pixel* /*pPixel*/,
|
||||||
|
int /*channel*/,
|
||||||
|
int /*client*/,
|
||||||
|
ColorCompareProcPtr /*comp*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int QueryColors(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
int /*count*/,
|
||||||
|
Pixel* /*ppixIn*/,
|
||||||
|
xrgb* /*prgbList*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int FreeClientPixels(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*pcr*/,
|
||||||
|
XID /*fakeid*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocColorCells(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*client*/,
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
int /*colors*/,
|
||||||
|
int /*planes*/,
|
||||||
|
Bool /*contig*/,
|
||||||
|
Pixel* /*ppix*/,
|
||||||
|
Pixel* /*masks*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocColorPlanes(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*client*/,
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
int /*colors*/,
|
||||||
|
int /*r*/,
|
||||||
|
int /*g*/,
|
||||||
|
int /*b*/,
|
||||||
|
Bool /*contig*/,
|
||||||
|
Pixel* /*pixels*/,
|
||||||
|
Pixel* /*prmask*/,
|
||||||
|
Pixel* /*pgmask*/,
|
||||||
|
Pixel* /*pbmask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int FreeColors(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
int /*client*/,
|
||||||
|
int /*count*/,
|
||||||
|
Pixel* /*pixels*/,
|
||||||
|
Pixel /*mask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int StoreColors(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ColormapPtr /*pmap*/,
|
||||||
|
int /*count*/,
|
||||||
|
xColorItem* /*defs*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int IsMapInstalled(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
Colormap /*map*/,
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* CMAP_H */
|
@ -0,0 +1,152 @@
|
|||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
/* $XConsortium: cursor.h,v 1.22 94/04/17 20:25:34 dpw Exp $ */
|
||||||
|
#ifndef CURSOR_H
|
||||||
|
#define CURSOR_H
|
||||||
|
|
||||||
|
#include "misc.h"
|
||||||
|
#include "screenint.h"
|
||||||
|
#include "window.h"
|
||||||
|
|
||||||
|
#define NullCursor ((CursorPtr)NULL)
|
||||||
|
|
||||||
|
typedef struct _Cursor *CursorPtr;
|
||||||
|
typedef struct _CursorMetric *CursorMetricPtr;
|
||||||
|
|
||||||
|
extern CursorPtr rootCursor;
|
||||||
|
|
||||||
|
extern int FreeCursor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*pCurs*/,
|
||||||
|
XID /*cid*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern CursorPtr X11AllocCursor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned char* /*psrcbits*/,
|
||||||
|
unsigned char* /*pmaskbits*/,
|
||||||
|
CursorMetricPtr /*cm*/,
|
||||||
|
unsigned /*foreRed*/,
|
||||||
|
unsigned /*foreGreen*/,
|
||||||
|
unsigned /*foreBlue*/,
|
||||||
|
unsigned /*backRed*/,
|
||||||
|
unsigned /*backGreen*/,
|
||||||
|
unsigned /*backBlue*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocGlyphCursor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
Font /*source*/,
|
||||||
|
unsigned int /*sourceChar*/,
|
||||||
|
Font /*mask*/,
|
||||||
|
unsigned int /*maskChar*/,
|
||||||
|
unsigned /*foreRed*/,
|
||||||
|
unsigned /*foreGreen*/,
|
||||||
|
unsigned /*foreBlue*/,
|
||||||
|
unsigned /*backRed*/,
|
||||||
|
unsigned /*backGreen*/,
|
||||||
|
unsigned /*backBlue*/,
|
||||||
|
CursorPtr* /*ppCurs*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern CursorPtr CreateRootCursor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
char* /*pfilename*/,
|
||||||
|
unsigned int /*glyph*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ServerBitsFromGlyph(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
FontPtr /*pfont*/,
|
||||||
|
unsigned int /*ch*/,
|
||||||
|
register CursorMetricPtr /*cm*/,
|
||||||
|
unsigned char ** /*ppbits*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool CursorMetricsFromGlyph(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
FontPtr /*pfont*/,
|
||||||
|
unsigned /*ch*/,
|
||||||
|
CursorMetricPtr /*cm*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CheckCursorConfinement(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void NewCurrentScreen(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*newScreen*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool PointerConfinedToScreen(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void GetSpritePosition(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int * /*px*/,
|
||||||
|
int * /*py*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* CURSOR_H */
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,232 @@
|
|||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
/* $XConsortium: gc.h /main/16 1996/08/01 19:18:17 dpw $ */
|
||||||
|
|
||||||
|
#ifndef GC_H
|
||||||
|
#define GC_H
|
||||||
|
|
||||||
|
#include "misc.h" /* for Bool */
|
||||||
|
#include "X11/X.h" /* for GContext, Mask */
|
||||||
|
#include "X11/Xproto.h"
|
||||||
|
#include "screenint.h" /* for ScreenPtr */
|
||||||
|
#include "pixmap.h" /* for DrawablePtr */
|
||||||
|
|
||||||
|
/* clientClipType field in GC */
|
||||||
|
#define CT_NONE 0
|
||||||
|
#define CT_PIXMAP 1
|
||||||
|
#define CT_REGION 2
|
||||||
|
#define CT_UNSORTED 6
|
||||||
|
#define CT_YSORTED 10
|
||||||
|
#define CT_YXSORTED 14
|
||||||
|
#define CT_YXBANDED 18
|
||||||
|
|
||||||
|
#define GCQREASON_VALIDATE 1
|
||||||
|
#define GCQREASON_CHANGE 2
|
||||||
|
#define GCQREASON_COPY_SRC 3
|
||||||
|
#define GCQREASON_COPY_DST 4
|
||||||
|
#define GCQREASON_DESTROY 5
|
||||||
|
|
||||||
|
#define GC_CHANGE_SERIAL_BIT (((unsigned long)1)<<31)
|
||||||
|
#define GC_CALL_VALIDATE_BIT (1L<<30)
|
||||||
|
#define GCExtensionInterest (1L<<29)
|
||||||
|
|
||||||
|
#define DRAWABLE_SERIAL_BITS (~(GC_CHANGE_SERIAL_BIT))
|
||||||
|
|
||||||
|
#define MAX_SERIAL_NUM (1L<<28)
|
||||||
|
|
||||||
|
#define NEXT_SERIAL_NUMBER ((++globalSerialNumber) > MAX_SERIAL_NUM ? \
|
||||||
|
(globalSerialNumber = 1): globalSerialNumber)
|
||||||
|
|
||||||
|
typedef struct _GCInterest *GCInterestPtr;
|
||||||
|
typedef struct _GC *GCPtr;
|
||||||
|
typedef struct _GCOps *GCOpsPtr;
|
||||||
|
|
||||||
|
extern void ValidateGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DrawablePtr /*pDraw*/,
|
||||||
|
GCPtr /*pGC*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ChangeGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr/*pGC*/,
|
||||||
|
BITS32 /*mask*/,
|
||||||
|
XID* /*pval*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int DoChangeGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr/*pGC*/,
|
||||||
|
BITS32 /*mask*/,
|
||||||
|
XID* /*pval*/,
|
||||||
|
int /*fPointer*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
CARD32 val;
|
||||||
|
pointer ptr;
|
||||||
|
} ChangeGCVal, *ChangeGCValPtr;
|
||||||
|
|
||||||
|
extern int dixChangeGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
GCPtr /*pGC*/,
|
||||||
|
BITS32 /*mask*/,
|
||||||
|
CARD32 * /*pval*/,
|
||||||
|
ChangeGCValPtr /*pCGCV*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern GCPtr CreateGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DrawablePtr /*pDrawable*/,
|
||||||
|
BITS32 /*mask*/,
|
||||||
|
XID* /*pval*/,
|
||||||
|
int* /*pStatus*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int CopyGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr/*pgcSrc*/,
|
||||||
|
GCPtr/*pgcDst*/,
|
||||||
|
BITS32 /*mask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int FreeGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*pGC*/,
|
||||||
|
XID /*gid*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void SetGCMask(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr /*pGC*/,
|
||||||
|
Mask /*selectMask*/,
|
||||||
|
Mask /*newDataMask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern GCPtr CreateScratchGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
unsigned /*depth*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FreeGCperDepth(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*screenNum*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool CreateGCperDepth(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*screenNum*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool CreateDefaultStipple(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*screenNum*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FreeDefaultStipple(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*screenNum*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int SetDashes(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr /*pGC*/,
|
||||||
|
unsigned /*offset*/,
|
||||||
|
unsigned /*ndash*/,
|
||||||
|
unsigned char* /*pdash*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int VerifyRectOrder(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*nrects*/,
|
||||||
|
xRectangle* /*prects*/,
|
||||||
|
int /*ordering*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int SetClipRects(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr /*pGC*/,
|
||||||
|
int /*xOrigin*/,
|
||||||
|
int /*yOrigin*/,
|
||||||
|
int /*nrects*/,
|
||||||
|
xRectangle* /*prects*/,
|
||||||
|
int /*ordering*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern GCPtr GetScratchGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned /*depth*/,
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FreeScratchGC(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
GCPtr /*pGC*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* GC_H */
|
@ -0,0 +1,535 @@
|
|||||||
|
/* $XConsortium: input.h /main/22 1996/09/25 00:50:39 dpw $ */
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/input.h,v 3.4 1996/12/23 07:09:28 dawes Exp $ */
|
||||||
|
/************************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
********************************************************/
|
||||||
|
#ifndef INPUT_H
|
||||||
|
#define INPUT_H
|
||||||
|
|
||||||
|
#include "misc.h"
|
||||||
|
#include "screenint.h"
|
||||||
|
#include "X11/Xmd.h"
|
||||||
|
#include "X11/Xproto.h"
|
||||||
|
#include "window.h" /* for WindowPtr */
|
||||||
|
|
||||||
|
#define DEVICE_INIT 0
|
||||||
|
#define DEVICE_ON 1
|
||||||
|
#define DEVICE_OFF 2
|
||||||
|
#define DEVICE_CLOSE 3
|
||||||
|
|
||||||
|
#define MAP_LENGTH 256
|
||||||
|
#define DOWN_LENGTH 32 /* 256/8 => number of bytes to hold 256 bits */
|
||||||
|
#define NullGrab ((GrabPtr)NULL)
|
||||||
|
#define PointerRootWin ((WindowPtr)PointerRoot)
|
||||||
|
#define NoneWin ((WindowPtr)None)
|
||||||
|
#define NullDevice ((DevicePtr)NULL)
|
||||||
|
|
||||||
|
#ifndef FollowKeyboard
|
||||||
|
#define FollowKeyboard 3
|
||||||
|
#endif
|
||||||
|
#ifndef FollowKeyboardWin
|
||||||
|
#define FollowKeyboardWin ((WindowPtr) FollowKeyboard)
|
||||||
|
#endif
|
||||||
|
#ifndef RevertToFollowKeyboard
|
||||||
|
#define RevertToFollowKeyboard 3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef unsigned long Leds;
|
||||||
|
typedef struct _OtherClients *OtherClientsPtr;
|
||||||
|
typedef struct _InputClients *InputClientsPtr;
|
||||||
|
typedef struct _DeviceIntRec *DeviceIntPtr;
|
||||||
|
|
||||||
|
typedef int (*DeviceProc)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
int /*what*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*ProcessInputProc)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
xEventPtr /*events*/,
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
int /*count*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _DeviceRec {
|
||||||
|
pointer devicePrivate;
|
||||||
|
ProcessInputProc processInputProc; /* current */
|
||||||
|
ProcessInputProc realInputProc; /* deliver */
|
||||||
|
ProcessInputProc enqueueInputProc; /* enqueue */
|
||||||
|
Bool on; /* used by DDX to keep state */
|
||||||
|
} DeviceRec, *DevicePtr;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int click, bell, bell_pitch, bell_duration;
|
||||||
|
Bool autoRepeat;
|
||||||
|
unsigned char autoRepeats[32];
|
||||||
|
Leds leds;
|
||||||
|
unsigned char id;
|
||||||
|
} KeybdCtrl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
KeySym *map;
|
||||||
|
KeyCode minKeyCode,
|
||||||
|
maxKeyCode;
|
||||||
|
int mapWidth;
|
||||||
|
} KeySymsRec, *KeySymsPtr;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int num, den, threshold;
|
||||||
|
unsigned char id;
|
||||||
|
} PtrCtrl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int resolution, min_value, max_value;
|
||||||
|
int integer_displayed;
|
||||||
|
unsigned char id;
|
||||||
|
} IntegerCtrl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int max_symbols, num_symbols_supported;
|
||||||
|
int num_symbols_displayed;
|
||||||
|
KeySym *symbols_supported;
|
||||||
|
KeySym *symbols_displayed;
|
||||||
|
unsigned char id;
|
||||||
|
} StringCtrl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int percent, pitch, duration;
|
||||||
|
unsigned char id;
|
||||||
|
} BellCtrl;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Leds led_values;
|
||||||
|
Mask led_mask;
|
||||||
|
unsigned char id;
|
||||||
|
} LedCtrl;
|
||||||
|
|
||||||
|
extern KeybdCtrl defaultKeyboardControl;
|
||||||
|
extern PtrCtrl defaultPointerControl;
|
||||||
|
|
||||||
|
#undef AddInputDevice
|
||||||
|
extern DevicePtr AddInputDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceProc /*deviceProc*/,
|
||||||
|
Bool /*autoStart*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#define AddInputDevice(deviceProc, autoStart) \
|
||||||
|
_AddInputDevice(deviceProc, autoStart)
|
||||||
|
|
||||||
|
extern DeviceIntPtr _AddInputDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceProc /*deviceProc*/,
|
||||||
|
Bool /*autoStart*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool EnableDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool DisableDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int InitAndStartDevices(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CloseDownDevices(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void RemoveDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*dev*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int NumMotionEvents(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#undef RegisterPointerDevice
|
||||||
|
extern void RegisterPointerDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DevicePtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#define RegisterPointerDevice(device) \
|
||||||
|
_RegisterPointerDevice(device)
|
||||||
|
|
||||||
|
extern void _RegisterPointerDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#undef RegisterKeyboardDevice
|
||||||
|
extern void RegisterKeyboardDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DevicePtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#define RegisterKeyboardDevice(device) \
|
||||||
|
_RegisterKeyboardDevice(device)
|
||||||
|
|
||||||
|
extern void _RegisterKeyboardDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern DevicePtr LookupKeyboardDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern DevicePtr LookupPointerDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern DevicePtr LookupDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /* id */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void QueryMinMaxKeyCodes(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
KeyCode* /*minCode*/,
|
||||||
|
KeyCode* /*maxCode*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool SetKeySymsMap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
KeySymsPtr /*dst*/,
|
||||||
|
KeySymsPtr /*src*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitKeyClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
KeySymsPtr /*pKeySyms*/,
|
||||||
|
CARD8 /*pModifiers*/[]
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitButtonClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
int /*numButtons*/,
|
||||||
|
CARD8* /*map*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef int (*ValuatorMotionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*pdevice*/,
|
||||||
|
xTimecoord * /*coords*/,
|
||||||
|
unsigned long /*start*/,
|
||||||
|
unsigned long /*stop*/,
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitValuatorClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
int /*numAxes*/,
|
||||||
|
ValuatorMotionProcPtr /* motionProc */,
|
||||||
|
int /*numMotionEvents*/,
|
||||||
|
int /*mode*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitFocusClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*BellProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*percent*/,
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
pointer /*ctrl*/,
|
||||||
|
int
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*KbdCtrlProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
KeybdCtrl * /*ctrl*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitKbdFeedbackClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
BellProcPtr /*bellProc*/,
|
||||||
|
KbdCtrlProcPtr /*controlProc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*PtrCtrlProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
PtrCtrl * /*ctrl*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitPtrFeedbackClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
PtrCtrlProcPtr /*controlProc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*StringCtrlProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
StringCtrl * /*ctrl*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitStringFeedbackClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
StringCtrlProcPtr /*controlProc*/,
|
||||||
|
int /*max_symbols*/,
|
||||||
|
int /*num_symbols_supported*/,
|
||||||
|
KeySym* /*symbols*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*BellCtrlProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
BellCtrl * /*ctrl*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitBellFeedbackClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
BellProcPtr /*bellProc*/,
|
||||||
|
BellCtrlProcPtr /*controlProc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*LedCtrlProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
LedCtrl * /*ctrl*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitLedFeedbackClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
LedCtrlProcPtr /*controlProc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (*IntegerCtrlProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
IntegerCtrl * /*ctrl*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
extern Bool InitIntegerFeedbackClassDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
IntegerCtrlProcPtr /*controlProc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitPointerDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DevicePtr /*device*/,
|
||||||
|
CARD8* /*map*/,
|
||||||
|
int /*numButtons*/,
|
||||||
|
ValuatorMotionProcPtr /*motionProc*/,
|
||||||
|
PtrCtrlProcPtr /*controlProc*/,
|
||||||
|
int /*numMotionEvents*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool InitKeyboardDeviceStruct(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DevicePtr /*device*/,
|
||||||
|
KeySymsPtr /*pKeySyms*/,
|
||||||
|
CARD8 /*pModifiers*/[],
|
||||||
|
BellProcPtr /*bellProc*/,
|
||||||
|
KbdCtrlProcPtr /*controlProc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void SendMappingNotify(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned int /*request*/,
|
||||||
|
unsigned int /*firstKeyCode*/,
|
||||||
|
unsigned int /*count*/,
|
||||||
|
ClientPtr /* client */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool BadDeviceMap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
BYTE* /*buff*/,
|
||||||
|
int /*length*/,
|
||||||
|
unsigned /*low*/,
|
||||||
|
unsigned /*high*/,
|
||||||
|
XID* /*errval*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool AllModifierKeysAreUp(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
CARD8* /*map1*/,
|
||||||
|
int /*per1*/,
|
||||||
|
CARD8* /*map2*/,
|
||||||
|
int /*per2*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void NoteLedState(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*keybd*/,
|
||||||
|
int /*led*/,
|
||||||
|
Bool /*on*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void MaybeStopHint(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
DeviceIntPtr /*device*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ProcessPointerEvent(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
xEventPtr /*xE*/,
|
||||||
|
DeviceIntPtr /*mouse*/,
|
||||||
|
int /*count*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ProcessKeyboardEvent(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
xEventPtr /*xE*/,
|
||||||
|
DeviceIntPtr /*keybd*/,
|
||||||
|
int /*count*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef XKB
|
||||||
|
extern void CoreProcessPointerEvent(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
xEventPtr /*xE*/,
|
||||||
|
DeviceIntPtr /*mouse*/,
|
||||||
|
int /*count*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CoreProcessKeyboardEvent(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
xEventPtr /*xE*/,
|
||||||
|
DeviceIntPtr /*keybd*/,
|
||||||
|
int /*count*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern Bool LegalModifier(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned int /*key*/,
|
||||||
|
DevicePtr /*pDev*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ProcessInputEvents(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void InitInput(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*argc*/,
|
||||||
|
char ** /*argv*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* INPUT_H */
|
@ -0,0 +1,280 @@
|
|||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
Copyright 1992, 1993 Data General Corporation;
|
||||||
|
Copyright 1992, 1993 OMRON Corporation
|
||||||
|
|
||||||
|
Permission to use, copy, modify, distribute, and sell this software and its
|
||||||
|
documentation for any purpose is hereby granted without fee, provided that the
|
||||||
|
above copyright notice appear in all copies and that both that copyright
|
||||||
|
notice and this permission notice appear in supporting documentation, and that
|
||||||
|
neither the name OMRON or DATA GENERAL be used in advertising or publicity
|
||||||
|
pertaining to distribution of the software without specific, written prior
|
||||||
|
permission of the party whose name is to be used. Neither OMRON or
|
||||||
|
DATA GENERAL make any representation about the suitability of this software
|
||||||
|
for any purpose. It is provided "as is" without express or implied warranty.
|
||||||
|
|
||||||
|
OMRON AND DATA GENERAL EACH DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||||
|
SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
|
||||||
|
IN NO EVENT SHALL OMRON OR DATA GENERAL 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.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
/* $XConsortium: misc.h /main/28 1996/12/02 10:22:01 lehors $ */
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/misc.h,v 3.5 1996/12/23 07:09:29 dawes Exp $ */
|
||||||
|
#ifndef MISC_H
|
||||||
|
#define MISC_H 1
|
||||||
|
/*
|
||||||
|
* X internal definitions
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern unsigned long globalSerialNumber;
|
||||||
|
extern unsigned long serverGeneration;
|
||||||
|
|
||||||
|
#include <X11/Xosdefs.h>
|
||||||
|
#include <X11/Xfuncproto.h>
|
||||||
|
#include <X11/Xmd.h>
|
||||||
|
#include <X11/X.h>
|
||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#ifndef X_NOT_STDC_ENV
|
||||||
|
#include <stddef.h>
|
||||||
|
#else
|
||||||
|
#define NULL 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MAXSCREENS
|
||||||
|
#define MAXSCREENS 3
|
||||||
|
#endif
|
||||||
|
#define MAXCLIENTS 128
|
||||||
|
#define MAXDITS 1
|
||||||
|
#define MAXEXTENSIONS 128
|
||||||
|
#define MAXFORMATS 8
|
||||||
|
#define MAXVISUALS_PER_SCREEN 50
|
||||||
|
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
typedef void *pointer;
|
||||||
|
#else
|
||||||
|
typedef unsigned char *pointer;
|
||||||
|
#endif
|
||||||
|
typedef int Bool;
|
||||||
|
typedef unsigned long PIXEL;
|
||||||
|
typedef unsigned long ATOM;
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _XTYPEDEF_FONTPTR
|
||||||
|
typedef struct _Font *FontPtr; /* also in fonts/include/font.h */
|
||||||
|
#define _XTYPEDEF_FONTPTR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _XTYPEDEF_CLIENTPTR
|
||||||
|
typedef struct _Client *ClientPtr; /* also in dix.h */
|
||||||
|
#define _XTYPEDEF_CLIENTPTR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _XTYPEDEF_CALLBACKLISTPTR
|
||||||
|
typedef struct _CallbackList *CallbackListPtr; /* also in dix.h */
|
||||||
|
#define _XTYPEDEF_CALLBACKLISTPTR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct _xReq *xReqPtr;
|
||||||
|
|
||||||
|
#include "os.h" /* for ALLOCATE_LOCAL and DEALLOCATE_LOCAL */
|
||||||
|
#include <X11/Xfuncs.h> /* for bcopy, bzero, and bcmp */
|
||||||
|
|
||||||
|
#define NullBox ((BoxPtr)0)
|
||||||
|
#define MILLI_PER_MIN (1000 * 60)
|
||||||
|
#define MILLI_PER_SECOND (1000)
|
||||||
|
|
||||||
|
/* this next is used with None and ParentRelative to tell
|
||||||
|
PaintWin() what to use to paint the background. Also used
|
||||||
|
in the macro IS_VALID_PIXMAP */
|
||||||
|
|
||||||
|
#define USE_BACKGROUND_PIXEL 3
|
||||||
|
#define USE_BORDER_PIXEL 3
|
||||||
|
|
||||||
|
|
||||||
|
/* byte swap a 32-bit literal */
|
||||||
|
#define lswapl(x) ((((x) & 0xff) << 24) |\
|
||||||
|
(((x) & 0xff00) << 8) |\
|
||||||
|
(((x) & 0xff0000) >> 8) |\
|
||||||
|
(((x) >> 24) & 0xff))
|
||||||
|
|
||||||
|
/* byte swap a short literal */
|
||||||
|
#define lswaps(x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff))
|
||||||
|
|
||||||
|
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||||
|
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
||||||
|
#if !defined(AMOEBA) && !defined(__EMX__)
|
||||||
|
#ifndef abs
|
||||||
|
#define abs(a) ((a) > 0 ? (a) : -(a))
|
||||||
|
#endif
|
||||||
|
#else /* AMOEBA || __EMX__ */
|
||||||
|
/* abs() is a function, not a macro; include the file declaring
|
||||||
|
* it in case we haven't done that yet.
|
||||||
|
*/
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif /* AMOEBA */
|
||||||
|
#ifndef Fabs
|
||||||
|
#define Fabs(a) ((a) > 0.0 ? (a) : -(a)) /* floating absolute value */
|
||||||
|
#endif
|
||||||
|
#define sign(x) ((x) < 0 ? -1 : ((x) > 0 ? 1 : 0))
|
||||||
|
/* this assumes b > 0 */
|
||||||
|
#define modulus(a, b, d) if (((d) = (a) % (b)) < 0) (d) += (b)
|
||||||
|
/*
|
||||||
|
* return the least significant bit in x which is set
|
||||||
|
*
|
||||||
|
* This works on 1's complement and 2's complement machines.
|
||||||
|
* If you care about the extra instruction on 2's complement
|
||||||
|
* machines, change to ((x) & (-(x)))
|
||||||
|
*/
|
||||||
|
#define lowbit(x) ((x) & (~(x) + 1))
|
||||||
|
|
||||||
|
#ifndef MAXSHORT
|
||||||
|
#define MAXSHORT 32767
|
||||||
|
#endif
|
||||||
|
#ifndef MINSHORT
|
||||||
|
#define MINSHORT -MAXSHORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* some macros to help swap requests, replies, and events */
|
||||||
|
|
||||||
|
#define LengthRestB(stuff) \
|
||||||
|
((client->req_len << 2) - sizeof(*stuff))
|
||||||
|
|
||||||
|
#define LengthRestS(stuff) \
|
||||||
|
((client->req_len << 1) - (sizeof(*stuff) >> 1))
|
||||||
|
|
||||||
|
#define LengthRestL(stuff) \
|
||||||
|
(client->req_len - (sizeof(*stuff) >> 2))
|
||||||
|
|
||||||
|
#define SwapRestS(stuff) \
|
||||||
|
SwapShorts((short *)(stuff + 1), LengthRestS(stuff))
|
||||||
|
|
||||||
|
#define SwapRestL(stuff) \
|
||||||
|
SwapLongs((CARD32 *)(stuff + 1), LengthRestL(stuff))
|
||||||
|
|
||||||
|
/* byte swap a 32-bit value */
|
||||||
|
#define swapl(x, n) { \
|
||||||
|
n = ((char *) (x))[0];\
|
||||||
|
((char *) (x))[0] = ((char *) (x))[3];\
|
||||||
|
((char *) (x))[3] = n;\
|
||||||
|
n = ((char *) (x))[1];\
|
||||||
|
((char *) (x))[1] = ((char *) (x))[2];\
|
||||||
|
((char *) (x))[2] = n; }
|
||||||
|
|
||||||
|
/* byte swap a short */
|
||||||
|
#define swaps(x, n) { \
|
||||||
|
n = ((char *) (x))[0];\
|
||||||
|
((char *) (x))[0] = ((char *) (x))[1];\
|
||||||
|
((char *) (x))[1] = n; }
|
||||||
|
|
||||||
|
/* copy 32-bit value from src to dst byteswapping on the way */
|
||||||
|
#define cpswapl(src, dst) { \
|
||||||
|
((char *)&(dst))[0] = ((char *) &(src))[3];\
|
||||||
|
((char *)&(dst))[1] = ((char *) &(src))[2];\
|
||||||
|
((char *)&(dst))[2] = ((char *) &(src))[1];\
|
||||||
|
((char *)&(dst))[3] = ((char *) &(src))[0]; }
|
||||||
|
|
||||||
|
/* copy short from src to dst byteswapping on the way */
|
||||||
|
#define cpswaps(src, dst) { \
|
||||||
|
((char *) &(dst))[0] = ((char *) &(src))[1];\
|
||||||
|
((char *) &(dst))[1] = ((char *) &(src))[0]; }
|
||||||
|
|
||||||
|
extern void SwapLongs(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
CARD32 *list,
|
||||||
|
unsigned long count
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void SwapShorts(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
short *list,
|
||||||
|
unsigned long count
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void MakePredeclaredAtoms(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int Ones(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned long /*mask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _xPoint *DDXPointPtr;
|
||||||
|
typedef struct _Box *BoxPtr;
|
||||||
|
typedef struct _xEvent *xEventPtr;
|
||||||
|
typedef struct _xRectangle *xRectanglePtr;
|
||||||
|
typedef struct _GrabRec *GrabPtr;
|
||||||
|
|
||||||
|
/* typedefs from other places - duplicated here to minimize the amount
|
||||||
|
* of unnecessary junk that one would normally have to include to get
|
||||||
|
* these symbols defined
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _XTYPEDEF_CHARINFOPTR
|
||||||
|
typedef struct _CharInfo *CharInfoPtr; /* also in fonts/include/font.h */
|
||||||
|
#define _XTYPEDEF_CHARINFOPTR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* MISC_H */
|
@ -0,0 +1,73 @@
|
|||||||
|
/* $XConsortium: miscstruct.h,v 5.5 94/04/17 20:25:50 dpw Exp $ */
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/miscstruct.h,v 3.0 1996/02/18 03:45:10 dawes Exp $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#ifndef MISCSTRUCT_H
|
||||||
|
#define MISCSTRUCT_H 1
|
||||||
|
|
||||||
|
#include "misc.h"
|
||||||
|
#include "X11/Xprotostr.h"
|
||||||
|
|
||||||
|
typedef xPoint DDXPointRec;
|
||||||
|
|
||||||
|
typedef struct _Box {
|
||||||
|
short x1, y1, x2, y2;
|
||||||
|
} BoxRec;
|
||||||
|
|
||||||
|
typedef union _DevUnion {
|
||||||
|
pointer ptr;
|
||||||
|
long val;
|
||||||
|
unsigned long uval;
|
||||||
|
pointer (*fptr)(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
} DevUnion;
|
||||||
|
|
||||||
|
#endif /* MISCSTRUCT_H */
|
@ -0,0 +1,74 @@
|
|||||||
|
/* $XConsortium: opaque.h,v 1.19 94/04/17 20:25:51 dpw Exp $ */
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included
|
||||||
|
in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall
|
||||||
|
not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
other dealings in this Software without prior written authorization
|
||||||
|
from the X Consortium.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/opaque.h,v 1.2.2.1 1997/06/01 12:33:43 dawes Exp $ */
|
||||||
|
|
||||||
|
#ifndef OPAQUE_H
|
||||||
|
#define OPAQUE_H
|
||||||
|
|
||||||
|
#include <X11/Xmd.h>
|
||||||
|
|
||||||
|
extern char *defaultFontPath;
|
||||||
|
extern char *defaultTextFont;
|
||||||
|
extern char *defaultCursorFont;
|
||||||
|
extern char *rgbPath;
|
||||||
|
extern int MaxClients;
|
||||||
|
extern char isItTimeToYield;
|
||||||
|
extern char dispatchException;
|
||||||
|
|
||||||
|
/* bit values for dispatchException */
|
||||||
|
#define DE_RESET 1
|
||||||
|
#define DE_TERMINATE 2
|
||||||
|
#define DE_PRIORITYCHANGE 4 /* set when a client's priority changes */
|
||||||
|
|
||||||
|
extern CARD32 TimeOutValue;
|
||||||
|
extern CARD32 ScreenSaverTime;
|
||||||
|
extern CARD32 ScreenSaverInterval;
|
||||||
|
extern int ScreenSaverBlanking;
|
||||||
|
extern int ScreenSaverAllowExposures;
|
||||||
|
extern int argcGlobal;
|
||||||
|
extern char **argvGlobal;
|
||||||
|
|
||||||
|
#if DPMSExtension
|
||||||
|
extern CARD32 defaultDPMSStandbyTime;
|
||||||
|
extern CARD32 defaultDPMSSuspendTime;
|
||||||
|
extern CARD32 defaultDPMSOffTime;
|
||||||
|
extern CARD32 DPMSStandbyTime;
|
||||||
|
extern CARD32 DPMSSuspendTime;
|
||||||
|
extern CARD32 DPMSOffTime;
|
||||||
|
extern CARD16 DPMSPowerLevel;
|
||||||
|
extern Bool defaultDPMSEnabled;
|
||||||
|
extern Bool DPMSEnabled;
|
||||||
|
extern Bool DPMSEnabledSwitch;
|
||||||
|
extern Bool DPMSDisabledSwitch;
|
||||||
|
extern Bool DPMSCapableFlag;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* OPAQUE_H */
|
@ -0,0 +1,776 @@
|
|||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
/* $XConsortium: os.h /main/60 1996/12/15 21:25:13 rws $ */
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/os.h,v 3.16.2.1 1998/01/22 10:47:13 dawes Exp $ */
|
||||||
|
|
||||||
|
#ifndef OS_H
|
||||||
|
#define OS_H
|
||||||
|
#include "misc.h"
|
||||||
|
#define ALLOCATE_LOCAL_FALLBACK(_size) Xalloc((unsigned long)(_size))
|
||||||
|
#define DEALLOCATE_LOCAL_FALLBACK(_ptr) Xfree((pointer)(_ptr))
|
||||||
|
#include "Xalloca.h"
|
||||||
|
|
||||||
|
#define NullFID ((FID) 0)
|
||||||
|
|
||||||
|
#define SCREEN_SAVER_ON 0
|
||||||
|
#define SCREEN_SAVER_OFF 1
|
||||||
|
#define SCREEN_SAVER_FORCER 2
|
||||||
|
#define SCREEN_SAVER_CYCLE 3
|
||||||
|
|
||||||
|
#ifndef MAX_REQUEST_SIZE
|
||||||
|
#define MAX_REQUEST_SIZE 65535
|
||||||
|
#endif
|
||||||
|
#ifndef MAX_BIG_REQUEST_SIZE
|
||||||
|
#define MAX_BIG_REQUEST_SIZE 1048575
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef pointer FID;
|
||||||
|
typedef struct _FontPathRec *FontPathPtr;
|
||||||
|
typedef struct _NewClientRec *NewClientPtr;
|
||||||
|
|
||||||
|
#define xnfalloc(size) XNFalloc((unsigned long)(size))
|
||||||
|
#define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size))
|
||||||
|
|
||||||
|
#define xalloc(size) Xalloc((unsigned long)(size))
|
||||||
|
#define xnfalloc(size) XNFalloc((unsigned long)(size))
|
||||||
|
#define xcalloc(_num, _size) Xcalloc((unsigned long)(_num)*(unsigned long)(_size))
|
||||||
|
#define xrealloc(ptr, size) Xrealloc((pointer)(ptr), (unsigned long)(size))
|
||||||
|
#define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size))
|
||||||
|
#define xfree(ptr) Xfree((pointer)(ptr))
|
||||||
|
|
||||||
|
#ifdef SCO
|
||||||
|
#include <stdio.h>
|
||||||
|
#endif
|
||||||
|
#ifndef X_NOT_STDC_ENV
|
||||||
|
#include <string.h>
|
||||||
|
#else
|
||||||
|
#ifdef SYSV
|
||||||
|
#include <string.h>
|
||||||
|
#else
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* have to put $(SIGNAL_DEFINES) in DEFINES in Imakefile to get this right */
|
||||||
|
#ifdef SIGNALRETURNSINT
|
||||||
|
#define SIGVAL int
|
||||||
|
#else
|
||||||
|
#define SIGVAL void
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern Bool OsDelayInitColors;
|
||||||
|
|
||||||
|
extern int WaitForSomething(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int* /*pClientsReady*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef LBX
|
||||||
|
#define ReadRequestFromClient(client) ((client)->readRequest(client))
|
||||||
|
extern int StandardReadRequestFromClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
extern int ReadRequestFromClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#endif /* LBX */
|
||||||
|
|
||||||
|
extern Bool InsertFakeRequest(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
char* /*data*/,
|
||||||
|
int /*count*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ResetCurrentRequest(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FlushAllOutput(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FlushIfCriticalOutputPending(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void SetCriticalOutputPending(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int WriteToClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*who*/,
|
||||||
|
int /*count*/,
|
||||||
|
char* /*buf*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ResetOsBuffers(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CreateWellKnownSockets(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ResetWellKnownSockets(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern XID
|
||||||
|
AuthorizationIDOfClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern char *ClientAuthorized(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
unsigned int /*proto_n*/,
|
||||||
|
char* /*auth_proto*/,
|
||||||
|
unsigned int /*string_n*/,
|
||||||
|
char* /*auth_string*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool EstablishNewConnections(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*clientUnused*/,
|
||||||
|
pointer /*closure*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CheckConnections(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CloseDownConnection(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AddEnabledDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*fd*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int RemoveEnabledDevice(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*fd*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int OnlyListenToOneClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ListenToAllClients(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int IgnoreClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AttendClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int MakeClientGrabImpervious(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int MakeClientGrabPervious(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void Error(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
char* /*str*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern CARD32 GetTimeInMillis(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AdjustWaitForDelay(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*waitTime*/,
|
||||||
|
unsigned long /*newdelay*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _OsTimerRec *OsTimerPtr;
|
||||||
|
|
||||||
|
typedef CARD32 (*OsTimerCallback)(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
OsTimerPtr /* timer */,
|
||||||
|
CARD32 /* time */,
|
||||||
|
pointer /* arg */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void TimerInit(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool TimerForce(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
OsTimerPtr /* timer */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#define TimerAbsolute (1<<0)
|
||||||
|
#define TimerForceOld (1<<1)
|
||||||
|
|
||||||
|
extern OsTimerPtr TimerSet(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
OsTimerPtr /* timer */,
|
||||||
|
int /* flags */,
|
||||||
|
CARD32 /* millis */,
|
||||||
|
OsTimerCallback /* func */,
|
||||||
|
pointer /* arg */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void TimerCheck(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void TimerCancel(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
OsTimerPtr /* pTimer */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void TimerFree(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
OsTimerPtr /* pTimer */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern SIGVAL AutoResetServer(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*sig*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern SIGVAL GiveUp(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*sig*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void UseMsg(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ProcessCommandLine(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*argc*/,
|
||||||
|
char* /*argv*/[]
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern unsigned long *Xalloc(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned long /*amount*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern unsigned long *XNFalloc(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned long /*amount*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern unsigned long *Xcalloc(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned long /*amount*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern unsigned long *Xrealloc(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*ptr*/,
|
||||||
|
unsigned long /*amount*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern unsigned long *XNFrealloc(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*ptr*/,
|
||||||
|
unsigned long /*amount*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void Xfree(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*ptr*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void OsInitAllocator(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef SIGVAL (*OsSigHandlerPtr)(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /* sig */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern OsSigHandlerPtr OsSignal(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /* sig */,
|
||||||
|
OsSigHandlerPtr /* handler */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int auditTrailLevel;
|
||||||
|
|
||||||
|
extern void AuditF(
|
||||||
|
#if NeedVarargsPrototypes
|
||||||
|
char* /*f*/,
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FatalError(
|
||||||
|
#if NeedVarargsPrototypes
|
||||||
|
char* /*f*/,
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
#if __GNUC__ == 2 && __GNUC_MINOR__ > 4
|
||||||
|
__attribute((noreturn))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
extern void ErrorF(
|
||||||
|
#if NeedVarargsPrototypes
|
||||||
|
char* /*f*/,
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef SERVER_LOCK
|
||||||
|
extern void LockServer(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void UnlockServer(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int OsLookupColor(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*screen*/,
|
||||||
|
char * /*name*/,
|
||||||
|
unsigned /*len*/,
|
||||||
|
unsigned short * /*pred*/,
|
||||||
|
unsigned short * /*pgreen*/,
|
||||||
|
unsigned short * /*pblue*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void OsInit(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void OsCleanup(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void OsVendorFatalError(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void OsVendorInit(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int OsInitColors(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#if !defined(WIN32) && !defined(__EMX__)
|
||||||
|
extern int System(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
char *
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern pointer Popen(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
char *,
|
||||||
|
char *
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int Pclose(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
#define System(a) system(a)
|
||||||
|
#define Popen(a,b) popen(a,b)
|
||||||
|
#define Pclose(a) pclose(a)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int AddHost(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
int /*family*/,
|
||||||
|
unsigned /*length*/,
|
||||||
|
pointer /*pAddr*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool ForEachHostInFamily (
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*family*/,
|
||||||
|
Bool (* /*func*/ )(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
unsigned char * /* addr */,
|
||||||
|
short /* len */,
|
||||||
|
pointer /* closure */
|
||||||
|
#endif
|
||||||
|
),
|
||||||
|
pointer /*closure*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int RemoveHost(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
int /*family*/,
|
||||||
|
unsigned /*length*/,
|
||||||
|
pointer /*pAddr*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int GetHosts(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer * /*data*/,
|
||||||
|
int * /*pnHosts*/,
|
||||||
|
int * /*pLen*/,
|
||||||
|
BOOL * /*pEnabled*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct sockaddr * sockaddrPtr;
|
||||||
|
|
||||||
|
extern int InvalidHost(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
sockaddrPtr /*saddr*/,
|
||||||
|
int /*len*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int LocalClient(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /* client */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ChangeAccessControl(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
int /*fEnabled*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int GetAccessControl(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
extern void AddLocalHosts(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ResetHosts(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
char *display
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void EnableLocalHost(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void DisableLocalHost(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void AccessUsingXdmcp(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void DefineSelf(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*fd*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void AugmentSelf(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*from*/,
|
||||||
|
int /*len*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void InitAuthorization(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
char * /*filename*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int LoadAuthorization(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void RegisterAuthorizations(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern XID CheckAuthorization(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned int /*namelength*/,
|
||||||
|
char * /*name*/,
|
||||||
|
unsigned int /*datalength*/,
|
||||||
|
char * /*data*/,
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
char ** /*reason*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ResetAuthorization(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AddAuthorization(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned int /*name_length*/,
|
||||||
|
char * /*name*/,
|
||||||
|
unsigned int /*data_length*/,
|
||||||
|
char * /*data*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern XID GenerateAuthorization(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
unsigned int /* name_length */,
|
||||||
|
char * /* name */,
|
||||||
|
unsigned int /* data_length */,
|
||||||
|
char * /* data */,
|
||||||
|
unsigned int * /* data_length_return */,
|
||||||
|
char ** /* data_return */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ExpandCommandLine(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int * /*pargc*/,
|
||||||
|
char *** /*pargv*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ddxProcessArgument(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*argc*/,
|
||||||
|
char * /*argv*/ [],
|
||||||
|
int /*i*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* idiom processing stuff
|
||||||
|
*/
|
||||||
|
|
||||||
|
xReqPtr PeekNextRequest(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
xReqPtr req, ClientPtr client, Bool readmore
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
void SkipRequests(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
xReqPtr req, ClientPtr client, int numskipped
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
/* int ReqLen(xReq *req, ClientPtr client)
|
||||||
|
* Given a pointer to a *complete* request, return its length in bytes.
|
||||||
|
* Note that if the request is a big request (as defined in the Big
|
||||||
|
* Requests extension), the macro lies by returning 4 less than the
|
||||||
|
* length that it actually occupies in the request buffer. This is so you
|
||||||
|
* can blindly compare the length with the various sz_<request> constants
|
||||||
|
* in Xproto.h without having to know/care about big requests.
|
||||||
|
*/
|
||||||
|
#define ReqLen(_pxReq, _client) \
|
||||||
|
((_pxReq->length ? \
|
||||||
|
(_client->swapped ? lswaps(_pxReq->length) : _pxReq->length) \
|
||||||
|
: ((_client->swapped ? \
|
||||||
|
lswapl(((CARD32*)_pxReq)[1]) : ((CARD32*)_pxReq)[1])-1) \
|
||||||
|
) << 2)
|
||||||
|
|
||||||
|
/* otherReqTypePtr CastxReq(xReq *req, otherReqTypePtr)
|
||||||
|
* Cast the given request to one of type otherReqTypePtr to access
|
||||||
|
* fields beyond the length field.
|
||||||
|
*/
|
||||||
|
#define CastxReq(_pxReq, otherReqTypePtr) \
|
||||||
|
(_pxReq->length ? (otherReqTypePtr)_pxReq \
|
||||||
|
: (otherReqTypePtr)(((CARD32*)_pxReq)+1))
|
||||||
|
|
||||||
|
/* stuff for SkippedRequestsCallback */
|
||||||
|
extern CallbackListPtr SkippedRequestsCallback;
|
||||||
|
typedef struct {
|
||||||
|
xReqPtr req;
|
||||||
|
ClientPtr client;
|
||||||
|
int numskipped;
|
||||||
|
} SkippedRequestInfoRec;
|
||||||
|
|
||||||
|
/* stuff for ReplyCallback */
|
||||||
|
extern CallbackListPtr ReplyCallback;
|
||||||
|
typedef struct {
|
||||||
|
ClientPtr client;
|
||||||
|
pointer replyData;
|
||||||
|
unsigned long dataLenBytes;
|
||||||
|
unsigned long bytesRemaining;
|
||||||
|
Bool startOfReply;
|
||||||
|
} ReplyInfoRec;
|
||||||
|
|
||||||
|
/* stuff for FlushCallback */
|
||||||
|
extern CallbackListPtr FlushCallback;
|
||||||
|
|
||||||
|
#endif /* OS_H */
|
@ -0,0 +1,124 @@
|
|||||||
|
/* $XConsortium: pixmap.h,v 5.6 94/04/17 20:25:53 dpw Exp $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#ifndef PIXMAP_H
|
||||||
|
#define PIXMAP_H
|
||||||
|
|
||||||
|
#include "misc.h"
|
||||||
|
#include "screenint.h"
|
||||||
|
|
||||||
|
/* types for Drawable */
|
||||||
|
#define DRAWABLE_WINDOW 0
|
||||||
|
#define DRAWABLE_PIXMAP 1
|
||||||
|
#define UNDRAWABLE_WINDOW 2
|
||||||
|
#define DRAWABLE_BUFFER 3
|
||||||
|
|
||||||
|
/* flags to PaintWindow() */
|
||||||
|
#define PW_BACKGROUND 0
|
||||||
|
#define PW_BORDER 1
|
||||||
|
|
||||||
|
#define NullPixmap ((PixmapPtr)0)
|
||||||
|
|
||||||
|
typedef struct _Drawable *DrawablePtr;
|
||||||
|
typedef struct _Pixmap *PixmapPtr;
|
||||||
|
|
||||||
|
typedef union _PixUnion {
|
||||||
|
PixmapPtr pixmap;
|
||||||
|
unsigned long pixel;
|
||||||
|
} PixUnion;
|
||||||
|
|
||||||
|
#define SamePixUnion(a,b,isPixel)\
|
||||||
|
((isPixel) ? (a).pixel == (b).pixel : (a).pixmap == (b).pixmap)
|
||||||
|
|
||||||
|
#define EqualPixUnion(as, a, bs, b) \
|
||||||
|
((as) == (bs) && (SamePixUnion (a, b, as)))
|
||||||
|
|
||||||
|
#define OnScreenDrawable(type) \
|
||||||
|
((type == DRAWABLE_WINDOW) || (type == DRAWABLE_BUFFER))
|
||||||
|
|
||||||
|
#define WindowDrawable(type) \
|
||||||
|
((type == DRAWABLE_WINDOW) || (type == UNDRAWABLE_WINDOW))
|
||||||
|
|
||||||
|
extern PixmapPtr GetScratchPixmapHeader(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
int /*width*/,
|
||||||
|
int /*height*/,
|
||||||
|
int /*depth*/,
|
||||||
|
int /*bitsPerPixel*/,
|
||||||
|
int /*devKind*/,
|
||||||
|
pointer /*pPixData*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FreeScratchPixmapHeader(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
PixmapPtr /*pPixmap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool CreateScratchPixmapsForScreen(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*scrnum*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void FreeScratchPixmapsForScreen(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*scrnum*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern PixmapPtr AllocatePixmap(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
int /*pixDataSize*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* PIXMAP_H */
|
@ -0,0 +1,54 @@
|
|||||||
|
/* $XConsortium: region.h,v 1.5 94/04/17 20:25:59 dpw Exp $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#ifndef REGION_H
|
||||||
|
#define REGION_H
|
||||||
|
|
||||||
|
#include "regionstr.h"
|
||||||
|
|
||||||
|
#endif /* REGION_H */
|
@ -0,0 +1,409 @@
|
|||||||
|
/* $XConsortium: regionstr.h,v 1.8 94/04/17 20:26:01 dpw Exp $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#ifndef REGIONSTRUCT_H
|
||||||
|
#define REGIONSTRUCT_H
|
||||||
|
|
||||||
|
#include "miscstruct.h"
|
||||||
|
|
||||||
|
/* Return values from RectIn() */
|
||||||
|
|
||||||
|
#define rgnOUT 0
|
||||||
|
#define rgnIN 1
|
||||||
|
#define rgnPART 2
|
||||||
|
|
||||||
|
#define NullRegion ((RegionPtr)0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* clip region
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct _RegData {
|
||||||
|
long size;
|
||||||
|
long numRects;
|
||||||
|
/* BoxRec rects[size]; in memory but not explicitly declared */
|
||||||
|
} RegDataRec, *RegDataPtr;
|
||||||
|
|
||||||
|
typedef struct _Region {
|
||||||
|
BoxRec extents;
|
||||||
|
RegDataPtr data;
|
||||||
|
} RegionRec, *RegionPtr;
|
||||||
|
|
||||||
|
extern BoxRec miEmptyBox;
|
||||||
|
extern RegDataRec miEmptyData;
|
||||||
|
|
||||||
|
#define REGION_NIL(reg) ((reg)->data && !(reg)->data->numRects)
|
||||||
|
#define REGION_NUM_RECTS(reg) ((reg)->data ? (reg)->data->numRects : 1)
|
||||||
|
#define REGION_SIZE(reg) ((reg)->data ? (reg)->data->size : 0)
|
||||||
|
#define REGION_RECTS(reg) ((reg)->data ? (BoxPtr)((reg)->data + 1) \
|
||||||
|
: &(reg)->extents)
|
||||||
|
#define REGION_BOXPTR(reg) ((BoxPtr)((reg)->data + 1))
|
||||||
|
#define REGION_BOX(reg,i) (®ION_BOXPTR(reg)[i])
|
||||||
|
#define REGION_TOP(reg) REGION_BOX(reg, (reg)->data->numRects)
|
||||||
|
#define REGION_END(reg) REGION_BOX(reg, (reg)->data->numRects - 1)
|
||||||
|
#define REGION_SZOF(n) (sizeof(RegDataRec) + ((n) * sizeof(BoxRec)))
|
||||||
|
|
||||||
|
#ifdef NEED_SCREEN_REGIONS
|
||||||
|
|
||||||
|
#define REGION_CREATE(_pScreen, _rect, _size) \
|
||||||
|
(*(_pScreen)->RegionCreate)(_rect, _size)
|
||||||
|
|
||||||
|
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
|
||||||
|
(*(_pScreen)->RegionInit)(_pReg, _rect, _size)
|
||||||
|
|
||||||
|
#define REGION_COPY(_pScreen, dst, src) \
|
||||||
|
(*(_pScreen)->RegionCopy)(dst, src)
|
||||||
|
|
||||||
|
#define REGION_DESTROY(_pScreen, _pReg) \
|
||||||
|
(*(_pScreen)->RegionDestroy)(_pReg)
|
||||||
|
|
||||||
|
#define REGION_UNINIT(_pScreen, _pReg) \
|
||||||
|
(*(_pScreen)->RegionUninit)(_pReg)
|
||||||
|
|
||||||
|
#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \
|
||||||
|
(*(_pScreen)->Intersect)(newReg, reg1, reg2)
|
||||||
|
|
||||||
|
#define REGION_UNION(_pScreen, newReg, reg1, reg2) \
|
||||||
|
(*(_pScreen)->Union)(newReg, reg1, reg2)
|
||||||
|
|
||||||
|
#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \
|
||||||
|
(*(_pScreen)->Subtract)(newReg, reg1, reg2)
|
||||||
|
|
||||||
|
#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \
|
||||||
|
(*(_pScreen)->Inverse)(newReg, reg1, invRect)
|
||||||
|
|
||||||
|
#define REGION_RESET(_pScreen, _pReg, _pBox) \
|
||||||
|
(*(_pScreen)->RegionReset)(_pReg, _pBox)
|
||||||
|
|
||||||
|
#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \
|
||||||
|
(*(_pScreen)->TranslateRegion)(_pReg, _x, _y)
|
||||||
|
|
||||||
|
#define RECT_IN_REGION(_pScreen, _pReg, prect) \
|
||||||
|
(*(_pScreen)->RectIn)(_pReg, prect)
|
||||||
|
|
||||||
|
#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \
|
||||||
|
(*(_pScreen)->PointInRegion)(_pReg, _x, _y, prect)
|
||||||
|
|
||||||
|
#define REGION_NOTEMPTY(_pScreen, _pReg) \
|
||||||
|
(*(_pScreen)->RegionNotEmpty)(_pReg)
|
||||||
|
|
||||||
|
#define REGION_EMPTY(_pScreen, _pReg) \
|
||||||
|
(*(_pScreen)->RegionEmpty)(_pReg)
|
||||||
|
|
||||||
|
#define REGION_EXTENTS(_pScreen, _pReg) \
|
||||||
|
(*(_pScreen)->RegionExtents)(_pReg)
|
||||||
|
|
||||||
|
#define REGION_APPEND(_pScreen, dstrgn, rgn) \
|
||||||
|
(*(_pScreen)->RegionAppend)(dstrgn, rgn)
|
||||||
|
|
||||||
|
#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \
|
||||||
|
(*(_pScreen)->RegionValidate)(badreg, pOverlap)
|
||||||
|
|
||||||
|
#define BITMAP_TO_REGION(_pScreen, pPix) \
|
||||||
|
(*(_pScreen)->BitmapToRegion)(pPix)
|
||||||
|
|
||||||
|
#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \
|
||||||
|
(*(_pScreen)->RectsToRegion)(nrects, prect, ctype)
|
||||||
|
|
||||||
|
#else /* !NEED_SCREEN_REGIONS */
|
||||||
|
|
||||||
|
#define REGION_CREATE(_pScreen, _rect, _size) \
|
||||||
|
miRegionCreate(_rect, _size)
|
||||||
|
|
||||||
|
#define REGION_COPY(_pScreen, dst, src) \
|
||||||
|
miRegionCopy(dst, src)
|
||||||
|
|
||||||
|
#define REGION_DESTROY(_pScreen, _pReg) \
|
||||||
|
miRegionDestroy(_pReg)
|
||||||
|
|
||||||
|
#define REGION_INTERSECT(_pScreen, newReg, reg1, reg2) \
|
||||||
|
miIntersect(newReg, reg1, reg2)
|
||||||
|
|
||||||
|
#define REGION_UNION(_pScreen, newReg, reg1, reg2) \
|
||||||
|
miUnion(newReg, reg1, reg2)
|
||||||
|
|
||||||
|
#define REGION_SUBTRACT(_pScreen, newReg, reg1, reg2) \
|
||||||
|
miSubtract(newReg, reg1, reg2)
|
||||||
|
|
||||||
|
#define REGION_INVERSE(_pScreen, newReg, reg1, invRect) \
|
||||||
|
miInverse(newReg, reg1, invRect)
|
||||||
|
|
||||||
|
#define REGION_TRANSLATE(_pScreen, _pReg, _x, _y) \
|
||||||
|
miTranslateRegion(_pReg, _x, _y)
|
||||||
|
|
||||||
|
#define RECT_IN_REGION(_pScreen, _pReg, prect) \
|
||||||
|
miRectIn(_pReg, prect)
|
||||||
|
|
||||||
|
#define POINT_IN_REGION(_pScreen, _pReg, _x, _y, prect) \
|
||||||
|
miPointInRegion(_pReg, _x, _y, prect)
|
||||||
|
|
||||||
|
#define REGION_APPEND(_pScreen, dstrgn, rgn) \
|
||||||
|
miRegionAppend(dstrgn, rgn)
|
||||||
|
|
||||||
|
#define REGION_VALIDATE(_pScreen, badreg, pOverlap) \
|
||||||
|
miRegionValidate(badreg, pOverlap)
|
||||||
|
|
||||||
|
#define BITMAP_TO_REGION(_pScreen, pPix) \
|
||||||
|
(*(_pScreen)->BitmapToRegion)(pPix) /* no mi version?! */
|
||||||
|
|
||||||
|
#define RECTS_TO_REGION(_pScreen, nrects, prect, ctype) \
|
||||||
|
miRectsToRegion(nrects, prect, ctype)
|
||||||
|
|
||||||
|
#ifdef DONT_INLINE_REGION_OPS
|
||||||
|
|
||||||
|
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
|
||||||
|
miRegionInit(_pReg, _rect, _size)
|
||||||
|
|
||||||
|
#define REGION_UNINIT(_pScreen, _pReg) \
|
||||||
|
miRegionUninit(_pReg)
|
||||||
|
|
||||||
|
#define REGION_RESET(_pScreen, _pReg, _pBox) \
|
||||||
|
miRegionReset(_pReg, _pBox)
|
||||||
|
|
||||||
|
#define REGION_NOTEMPTY(_pScreen, _pReg) \
|
||||||
|
miRegionNotEmpty(_pReg)
|
||||||
|
|
||||||
|
#define REGION_EMPTY(_pScreen, _pReg) \
|
||||||
|
miRegionEmpty(_pReg)
|
||||||
|
|
||||||
|
#define REGION_EXTENTS(_pScreen, _pReg) \
|
||||||
|
miRegionExtents(_pReg)
|
||||||
|
|
||||||
|
#else /* inline certain simple region ops for performance */
|
||||||
|
|
||||||
|
#define REGION_INIT(_pScreen, _pReg, _rect, _size) \
|
||||||
|
{ \
|
||||||
|
if (_rect) \
|
||||||
|
{ \
|
||||||
|
(_pReg)->extents = *(_rect); \
|
||||||
|
(_pReg)->data = (RegDataPtr)NULL; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
(_pReg)->extents = miEmptyBox; \
|
||||||
|
if (((_size) > 1) && ((_pReg)->data = \
|
||||||
|
(RegDataPtr)xalloc(REGION_SZOF(_size)))) \
|
||||||
|
{ \
|
||||||
|
(_pReg)->data->size = (_size); \
|
||||||
|
(_pReg)->data->numRects = 0; \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
(_pReg)->data = &miEmptyData; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REGION_UNINIT(_pScreen, _pReg) \
|
||||||
|
{ \
|
||||||
|
if ((_pReg)->data && (_pReg)->data->size) xfree((_pReg)->data); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REGION_RESET(_pScreen, _pReg, _pBox) \
|
||||||
|
{ \
|
||||||
|
(_pReg)->extents = *(_pBox); \
|
||||||
|
REGION_UNINIT(_pScreen, _pReg); \
|
||||||
|
(_pReg)->data = (RegDataPtr)NULL; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REGION_NOTEMPTY(_pScreen, _pReg) \
|
||||||
|
!REGION_NIL(_pReg)
|
||||||
|
|
||||||
|
#define REGION_EMPTY(_pScreen, _pReg) \
|
||||||
|
{ \
|
||||||
|
REGION_UNINIT(_pScreen, _pReg); \
|
||||||
|
(_pReg)->extents.x2 = (_pReg)->extents.x1; \
|
||||||
|
(_pReg)->extents.y2 = (_pReg)->extents.y1; \
|
||||||
|
(_pReg)->data = &miEmptyData; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define REGION_EXTENTS(_pScreen, _pReg) \
|
||||||
|
&(_pReg)->extents
|
||||||
|
|
||||||
|
#endif /* DONT_INLINE_REGION_OPS */
|
||||||
|
|
||||||
|
#endif /* NEED_SCREEN_REGIONS */
|
||||||
|
|
||||||
|
/* moved from mi.h */
|
||||||
|
|
||||||
|
extern RegionPtr miRegionCreate(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
BoxPtr /*rect*/,
|
||||||
|
int /*size*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void miRegionInit(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
BoxPtr /*rect*/,
|
||||||
|
int /*size*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void miRegionDestroy(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void miRegionUninit(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miRegionCopy(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*dst*/,
|
||||||
|
RegionPtr /*src*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miIntersect(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*newReg*/,
|
||||||
|
RegionPtr /*reg1*/,
|
||||||
|
RegionPtr /*reg2*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miUnion(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*newReg*/,
|
||||||
|
RegionPtr /*reg1*/,
|
||||||
|
RegionPtr /*reg2*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miRegionAppend(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*dstrgn*/,
|
||||||
|
RegionPtr /*rgn*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miRegionValidate(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*badreg*/,
|
||||||
|
Bool * /*pOverlap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern RegionPtr miRectsToRegion(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*nrects*/,
|
||||||
|
xRectanglePtr /*prect*/,
|
||||||
|
int /*ctype*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miSubtract(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*regD*/,
|
||||||
|
RegionPtr /*regM*/,
|
||||||
|
RegionPtr /*regS*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miInverse(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*newReg*/,
|
||||||
|
RegionPtr /*reg1*/,
|
||||||
|
BoxPtr /*invRect*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int miRectIn(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*region*/,
|
||||||
|
BoxPtr /*prect*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void miTranslateRegion(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void miRegionReset(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
BoxPtr /*pBox*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miPointInRegion(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
BoxPtr /*box*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool miRegionNotEmpty(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void miRegionEmpty(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern BoxPtr miRegionExtents(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* REGIONSTRUCT_H */
|
@ -0,0 +1,171 @@
|
|||||||
|
/* $XConsortium: screenint.h /main/6 1996/06/17 10:55:15 mor $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
/* $XFree86: xc/programs/Xserver/include/screenint.h,v 1.2 1997/01/14 22:22:40 dawes Exp $ */
|
||||||
|
#ifndef SCREENINT_H
|
||||||
|
#define SCREENINT_H
|
||||||
|
|
||||||
|
#include "misc.h"
|
||||||
|
|
||||||
|
typedef struct _PixmapFormat *PixmapFormatPtr;
|
||||||
|
typedef struct _Visual *VisualPtr;
|
||||||
|
typedef struct _Depth *DepthPtr;
|
||||||
|
typedef struct _Screen *ScreenPtr;
|
||||||
|
|
||||||
|
extern void ResetScreenPrivates(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocateScreenPrivateIndex(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ResetWindowPrivates(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocateWindowPrivateIndex(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool AllocateWindowPrivate(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /* pScreen */,
|
||||||
|
int /* index */,
|
||||||
|
unsigned /* amount */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ResetGCPrivates(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocateGCPrivateIndex(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool AllocateGCPrivate(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /* pScreen */,
|
||||||
|
int /* index */,
|
||||||
|
unsigned /* amount */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AddScreen(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
Bool (* /*pfnInit*/)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*index*/,
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
int /*argc*/,
|
||||||
|
char ** /*argv*/
|
||||||
|
#endif
|
||||||
|
),
|
||||||
|
int /*argc*/,
|
||||||
|
char** /*argv*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef PIXPRIV
|
||||||
|
|
||||||
|
extern void ResetPixmapPrivates(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocatePixmapPrivateIndex(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool AllocatePixmapPrivate(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /* pScreen */,
|
||||||
|
int /* index */,
|
||||||
|
unsigned /* amount */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* PIXPRIV */
|
||||||
|
|
||||||
|
extern void ResetColormapPrivates(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
void
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _ColormapRec *ColormapPtr;
|
||||||
|
typedef int (*InitCmapPrivFunc)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ColormapPtr
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int AllocateColormapPrivateIndex(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
InitCmapPrivFunc /* initPrivFunc */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* SCREENINT_H */
|
@ -0,0 +1,934 @@
|
|||||||
|
/* $XConsortium: scrnintstr.h /main/32 1996/09/28 17:14:32 rws $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
#ifndef SCREENINTSTRUCT_H
|
||||||
|
#define SCREENINTSTRUCT_H
|
||||||
|
|
||||||
|
#include "screenint.h"
|
||||||
|
#include "miscstruct.h"
|
||||||
|
#include "region.h"
|
||||||
|
#include "pixmap.h"
|
||||||
|
#include "gc.h"
|
||||||
|
#include "colormap.h"
|
||||||
|
#include "cursor.h"
|
||||||
|
#include "validate.h"
|
||||||
|
#include "window.h"
|
||||||
|
#include "X11/Xproto.h"
|
||||||
|
#include "dix.h"
|
||||||
|
|
||||||
|
typedef struct _PixmapFormat {
|
||||||
|
unsigned char depth;
|
||||||
|
unsigned char bitsPerPixel;
|
||||||
|
unsigned char scanlinePad;
|
||||||
|
} PixmapFormatRec;
|
||||||
|
|
||||||
|
typedef struct _Visual {
|
||||||
|
VisualID vid;
|
||||||
|
short class;
|
||||||
|
short bitsPerRGBValue;
|
||||||
|
short ColormapEntries;
|
||||||
|
short nplanes;/* = log2 (ColormapEntries). This does not
|
||||||
|
* imply that the screen has this many planes.
|
||||||
|
* it may have more or fewer */
|
||||||
|
unsigned long redMask, greenMask, blueMask;
|
||||||
|
int offsetRed, offsetGreen, offsetBlue;
|
||||||
|
} VisualRec;
|
||||||
|
|
||||||
|
typedef struct _Depth {
|
||||||
|
unsigned char depth;
|
||||||
|
short numVids;
|
||||||
|
VisualID *vids; /* block of visual ids for this depth */
|
||||||
|
} DepthRec;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There is a typedef for each screen function pointer so that code that
|
||||||
|
* needs to declare a screen function pointer (e.g. in a screen private
|
||||||
|
* or as a local variable) can easily do so and retain full type checking.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef Bool (* CloseScreenProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*index*/,
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* QueryBestSizeProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*class*/,
|
||||||
|
unsigned short * /*pwidth*/,
|
||||||
|
unsigned short * /*pheight*/,
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* SaveScreenProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
int /*on*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* GetImageProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DrawablePtr /*pDrawable*/,
|
||||||
|
int /*sx*/,
|
||||||
|
int /*sy*/,
|
||||||
|
int /*w*/,
|
||||||
|
int /*h*/,
|
||||||
|
unsigned int /*format*/,
|
||||||
|
unsigned long /*planeMask*/,
|
||||||
|
char * /*pdstLine*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* GetSpansProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DrawablePtr /*pDrawable*/,
|
||||||
|
int /*wMax*/,
|
||||||
|
DDXPointPtr /*ppt*/,
|
||||||
|
int* /*pwidth*/,
|
||||||
|
int /*nspans*/,
|
||||||
|
char * /*pdstStart*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* PointerNonInterestBoxProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
BoxPtr /*pBox*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* SourceValidateProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
DrawablePtr /*pDrawable*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
int /*width*/,
|
||||||
|
int /*height*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* CreateWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* DestroyWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* PositionWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* ChangeWindowAttributesProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
unsigned long /*mask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RealizeWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* UnrealizeWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef int (* ValidateTreeProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pParent*/,
|
||||||
|
X11WindowPtr /*pChild*/,
|
||||||
|
VTKind /*kind*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* PostValidateTreeProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pParent*/,
|
||||||
|
X11WindowPtr /*pChild*/,
|
||||||
|
VTKind /*kind*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* WindowExposuresProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
RegionPtr /*prgn*/,
|
||||||
|
RegionPtr /*other_exposed*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* PaintWindowBackgroundProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
RegionPtr /*pRegion*/,
|
||||||
|
int /*what*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* PaintWindowBorderProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
RegionPtr /*pRegion*/,
|
||||||
|
int /*what*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* CopyWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
DDXPointRec /*ptOldOrg*/,
|
||||||
|
RegionPtr /*prgnSrc*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ClearToBackgroundProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
int /*w*/,
|
||||||
|
int /*h*/,
|
||||||
|
Bool /*generateExposures*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ClipNotifyProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
int /*dx*/,
|
||||||
|
int /*dy*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef PixmapPtr (* CreatePixmapProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
int /*width*/,
|
||||||
|
int /*height*/,
|
||||||
|
int /*depth*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* DestroyPixmapProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
PixmapPtr /*pPixmap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* SaveDoomedAreasProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
RegionPtr /*prgnSave*/,
|
||||||
|
int /*xorg*/,
|
||||||
|
int /*yorg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef RegionPtr (* RestoreAreasProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
RegionPtr /*prgnRestore*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ExposeCopyProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pSrc*/,
|
||||||
|
DrawablePtr /*pDst*/,
|
||||||
|
GCPtr /*pGC*/,
|
||||||
|
RegionPtr /*prgnExposed*/,
|
||||||
|
int /*srcx*/,
|
||||||
|
int /*srcy*/,
|
||||||
|
int /*dstx*/,
|
||||||
|
int /*dsty*/,
|
||||||
|
unsigned long /*plane*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef RegionPtr (* TranslateBackingStoreProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
int /*windx*/,
|
||||||
|
int /*windy*/,
|
||||||
|
RegionPtr /*oldClip*/,
|
||||||
|
int /*oldx*/,
|
||||||
|
int /*oldy*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef RegionPtr (* ClearBackingStoreProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
int /*w*/,
|
||||||
|
int /*h*/,
|
||||||
|
Bool /*generateExposures*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* DrawGuaranteeProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWindow*/,
|
||||||
|
GCPtr /*pGC*/,
|
||||||
|
int /*guarantee*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RealizeFontProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
FontPtr /*pFont*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* UnrealizeFontProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
FontPtr /*pFont*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ConstrainCursorProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
BoxPtr /*pBox*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* CursorLimitsProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
CursorPtr /*pCursor*/,
|
||||||
|
BoxPtr /*pHotBox*/,
|
||||||
|
BoxPtr /*pTopLeftBox*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* DisplayCursorProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
CursorPtr /*pCursor*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RealizeCursorProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
CursorPtr /*pCursor*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* UnrealizeCursorProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
CursorPtr /*pCursor*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* RecolorCursorProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
CursorPtr /*pCursor*/,
|
||||||
|
Bool /*displayed*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* SetCursorPositionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
Bool /*generateEvent*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* CreateGCProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
GCPtr /*pGC*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* CreateColormapProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ColormapPtr /*pColormap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* DestroyColormapProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ColormapPtr /*pColormap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* InstallColormapProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ColormapPtr /*pColormap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* UninstallColormapProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ColormapPtr /*pColormap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef int (* ListInstalledColormapsProcPtr) (
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
XID* /*pmaps */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* StoreColorsProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ColormapPtr /*pColormap*/,
|
||||||
|
int /*ndef*/,
|
||||||
|
xColorItem * /*pdef*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ResolveColorProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
unsigned short* /*pred*/,
|
||||||
|
unsigned short* /*pgreen*/,
|
||||||
|
unsigned short* /*pblue*/,
|
||||||
|
VisualPtr /*pVisual*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef RegionPtr (* RegionCreateProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
BoxPtr /*rect*/,
|
||||||
|
int /*size*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* RegionInitProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
BoxPtr /*rect*/,
|
||||||
|
int /*size*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RegionCopyProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*dst*/,
|
||||||
|
RegionPtr /*src*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* RegionDestroyProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* RegionUninitProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* IntersectProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*newReg*/,
|
||||||
|
RegionPtr /*reg1*/,
|
||||||
|
RegionPtr /*reg2*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* UnionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*newReg*/,
|
||||||
|
RegionPtr /*reg1*/,
|
||||||
|
RegionPtr /*reg2*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* SubtractProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*regD*/,
|
||||||
|
RegionPtr /*regM*/,
|
||||||
|
RegionPtr /*regS*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* InverseProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*newReg*/,
|
||||||
|
RegionPtr /*reg1*/,
|
||||||
|
BoxPtr /*invRect*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* RegionResetProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
BoxPtr /*pBox*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* TranslateRegionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef int (* RectInProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*region*/,
|
||||||
|
BoxPtr /*prect*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* PointInRegionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
BoxPtr /*box*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RegionNotEmptyProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* RegionEmptyProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef BoxPtr (* RegionExtentsProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*pReg*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RegionAppendProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*dstrgn*/,
|
||||||
|
RegionPtr /*rgn*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* RegionValidateProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
RegionPtr /*badreg*/,
|
||||||
|
Bool* /*pOverlap*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef RegionPtr (* BitmapToRegionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
PixmapPtr /*pPix*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef RegionPtr (* RectsToRegionProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*nrects*/,
|
||||||
|
xRectangle* /*prect*/,
|
||||||
|
int /*ctype*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* SendGraphicsExposeProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
RegionPtr /*pRgn*/,
|
||||||
|
XID /*drawable*/,
|
||||||
|
int /*major*/,
|
||||||
|
int /*minor*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ScreenBlockHandlerProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*screenNum*/,
|
||||||
|
pointer /*blockData*/,
|
||||||
|
struct timeval ** /*pTimeout*/,
|
||||||
|
pointer /*pReadmask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ScreenWakeupHandlerProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
int /*screenNum*/,
|
||||||
|
pointer /*wakeupData*/,
|
||||||
|
unsigned long /*result*/,
|
||||||
|
pointer /*pReadMask*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* CreateScreenResourcesProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* ModifyPixmapHeaderProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
PixmapPtr /*pPixmap*/,
|
||||||
|
int /*width*/,
|
||||||
|
int /*height*/,
|
||||||
|
int /*depth*/,
|
||||||
|
int /*bitsPerPixel*/,
|
||||||
|
int /*devKind*/,
|
||||||
|
pointer /*pPixData*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* MarkWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* MarkOverlappedWindowsProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*parent*/,
|
||||||
|
X11WindowPtr /*firstChild*/,
|
||||||
|
X11WindowPtr * /*pLayerWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef Bool (* ChangeSaveUnderProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pLayerWin*/,
|
||||||
|
X11WindowPtr /*firstChild*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* PostChangeSaveUnderProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pLayerWin*/,
|
||||||
|
X11WindowPtr /*firstChild*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* MoveWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
X11WindowPtr /*pSib*/,
|
||||||
|
VTKind /*kind*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ResizeWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
unsigned int /*w*/,
|
||||||
|
unsigned int /*h*/,
|
||||||
|
X11WindowPtr /*pSib*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef X11WindowPtr (* GetLayerWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* HandleExposuresProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* ReparentWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
X11WindowPtr /*pPriorParent*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifdef SHAPE
|
||||||
|
typedef void (* SetShapeProcPtr)(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#endif /* SHAPE */
|
||||||
|
|
||||||
|
typedef void (* ChangeBorderWidthProcPtr)(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
unsigned int /*width*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef void (* MarkUnrealizedWindowProcPtr)(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pChild*/,
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
Bool /*fromConfigure*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
typedef struct _Screen {
|
||||||
|
int myNum; /* index of this instance in Screens[] */
|
||||||
|
ATOM id;
|
||||||
|
short width, height;
|
||||||
|
short mmWidth, mmHeight;
|
||||||
|
short numDepths;
|
||||||
|
unsigned char rootDepth;
|
||||||
|
DepthPtr allowedDepths;
|
||||||
|
unsigned long rootVisual;
|
||||||
|
unsigned long defColormap;
|
||||||
|
short minInstalledCmaps, maxInstalledCmaps;
|
||||||
|
char backingStoreSupport, saveUnderSupport;
|
||||||
|
unsigned long whitePixel, blackPixel;
|
||||||
|
unsigned long rgf; /* array of flags; she's -- HUNGARIAN */
|
||||||
|
GCPtr GCperDepth[MAXFORMATS+1];
|
||||||
|
/* next field is a stipple to use as default in
|
||||||
|
a GC. we don't build default tiles of all depths
|
||||||
|
because they are likely to be of a color
|
||||||
|
different from the default fg pixel, so
|
||||||
|
we don't win anything by building
|
||||||
|
a standard one.
|
||||||
|
*/
|
||||||
|
PixmapPtr PixmapPerDepth[1];
|
||||||
|
pointer devPrivate;
|
||||||
|
short numVisuals;
|
||||||
|
VisualPtr visuals;
|
||||||
|
int WindowPrivateLen;
|
||||||
|
unsigned *WindowPrivateSizes;
|
||||||
|
unsigned totalWindowSize;
|
||||||
|
int GCPrivateLen;
|
||||||
|
unsigned *GCPrivateSizes;
|
||||||
|
unsigned totalGCSize;
|
||||||
|
|
||||||
|
/* Random screen procedures */
|
||||||
|
|
||||||
|
CloseScreenProcPtr CloseScreen;
|
||||||
|
QueryBestSizeProcPtr QueryBestSize;
|
||||||
|
SaveScreenProcPtr SaveScreen;
|
||||||
|
GetImageProcPtr GetImage;
|
||||||
|
GetSpansProcPtr GetSpans;
|
||||||
|
PointerNonInterestBoxProcPtr PointerNonInterestBox;
|
||||||
|
SourceValidateProcPtr SourceValidate;
|
||||||
|
|
||||||
|
/* Window Procedures */
|
||||||
|
|
||||||
|
CreateWindowProcPtr CreateWindow;
|
||||||
|
DestroyWindowProcPtr DestroyWindow;
|
||||||
|
PositionWindowProcPtr PositionWindow;
|
||||||
|
ChangeWindowAttributesProcPtr ChangeWindowAttributes;
|
||||||
|
RealizeWindowProcPtr RealizeWindow;
|
||||||
|
UnrealizeWindowProcPtr UnrealizeWindow;
|
||||||
|
ValidateTreeProcPtr ValidateTree;
|
||||||
|
PostValidateTreeProcPtr PostValidateTree;
|
||||||
|
WindowExposuresProcPtr WindowExposures;
|
||||||
|
PaintWindowBackgroundProcPtr PaintWindowBackground;
|
||||||
|
PaintWindowBorderProcPtr PaintWindowBorder;
|
||||||
|
CopyWindowProcPtr CopyWindow;
|
||||||
|
ClearToBackgroundProcPtr ClearToBackground;
|
||||||
|
ClipNotifyProcPtr ClipNotify;
|
||||||
|
|
||||||
|
/* Pixmap procedures */
|
||||||
|
|
||||||
|
CreatePixmapProcPtr CreatePixmap;
|
||||||
|
DestroyPixmapProcPtr DestroyPixmap;
|
||||||
|
|
||||||
|
/* Backing store procedures */
|
||||||
|
|
||||||
|
SaveDoomedAreasProcPtr SaveDoomedAreas;
|
||||||
|
RestoreAreasProcPtr RestoreAreas;
|
||||||
|
ExposeCopyProcPtr ExposeCopy;
|
||||||
|
TranslateBackingStoreProcPtr TranslateBackingStore;
|
||||||
|
ClearBackingStoreProcPtr ClearBackingStore;
|
||||||
|
DrawGuaranteeProcPtr DrawGuarantee;
|
||||||
|
|
||||||
|
/* Font procedures */
|
||||||
|
|
||||||
|
RealizeFontProcPtr RealizeFont;
|
||||||
|
UnrealizeFontProcPtr UnrealizeFont;
|
||||||
|
|
||||||
|
/* Cursor Procedures */
|
||||||
|
|
||||||
|
ConstrainCursorProcPtr ConstrainCursor;
|
||||||
|
CursorLimitsProcPtr CursorLimits;
|
||||||
|
DisplayCursorProcPtr DisplayCursor;
|
||||||
|
RealizeCursorProcPtr RealizeCursor;
|
||||||
|
UnrealizeCursorProcPtr UnrealizeCursor;
|
||||||
|
RecolorCursorProcPtr RecolorCursor;
|
||||||
|
SetCursorPositionProcPtr SetCursorPosition;
|
||||||
|
|
||||||
|
/* GC procedures */
|
||||||
|
|
||||||
|
CreateGCProcPtr CreateGC;
|
||||||
|
|
||||||
|
/* Colormap procedures */
|
||||||
|
|
||||||
|
CreateColormapProcPtr CreateColormap;
|
||||||
|
DestroyColormapProcPtr DestroyColormap;
|
||||||
|
InstallColormapProcPtr InstallColormap;
|
||||||
|
UninstallColormapProcPtr UninstallColormap;
|
||||||
|
ListInstalledColormapsProcPtr ListInstalledColormaps;
|
||||||
|
StoreColorsProcPtr StoreColors;
|
||||||
|
ResolveColorProcPtr ResolveColor;
|
||||||
|
|
||||||
|
/* Region procedures */
|
||||||
|
|
||||||
|
RegionCreateProcPtr RegionCreate;
|
||||||
|
RegionInitProcPtr RegionInit;
|
||||||
|
RegionCopyProcPtr RegionCopy;
|
||||||
|
RegionDestroyProcPtr RegionDestroy;
|
||||||
|
RegionUninitProcPtr RegionUninit;
|
||||||
|
IntersectProcPtr Intersect;
|
||||||
|
UnionProcPtr Union;
|
||||||
|
SubtractProcPtr Subtract;
|
||||||
|
InverseProcPtr Inverse;
|
||||||
|
RegionResetProcPtr RegionReset;
|
||||||
|
TranslateRegionProcPtr TranslateRegion;
|
||||||
|
RectInProcPtr RectIn;
|
||||||
|
PointInRegionProcPtr PointInRegion;
|
||||||
|
RegionNotEmptyProcPtr RegionNotEmpty;
|
||||||
|
RegionEmptyProcPtr RegionEmpty;
|
||||||
|
RegionExtentsProcPtr RegionExtents;
|
||||||
|
RegionAppendProcPtr RegionAppend;
|
||||||
|
RegionValidateProcPtr RegionValidate;
|
||||||
|
BitmapToRegionProcPtr BitmapToRegion;
|
||||||
|
RectsToRegionProcPtr RectsToRegion;
|
||||||
|
SendGraphicsExposeProcPtr SendGraphicsExpose;
|
||||||
|
|
||||||
|
/* os layer procedures */
|
||||||
|
|
||||||
|
ScreenBlockHandlerProcPtr BlockHandler;
|
||||||
|
ScreenWakeupHandlerProcPtr WakeupHandler;
|
||||||
|
|
||||||
|
pointer blockData;
|
||||||
|
pointer wakeupData;
|
||||||
|
|
||||||
|
/* anybody can get a piece of this array */
|
||||||
|
DevUnion *devPrivates;
|
||||||
|
|
||||||
|
CreateScreenResourcesProcPtr CreateScreenResources;
|
||||||
|
ModifyPixmapHeaderProcPtr ModifyPixmapHeader;
|
||||||
|
|
||||||
|
PixmapPtr pScratchPixmap; /* scratch pixmap "pool" */
|
||||||
|
|
||||||
|
#ifdef PIXPRIV
|
||||||
|
int PixmapPrivateLen;
|
||||||
|
unsigned *PixmapPrivateSizes;
|
||||||
|
unsigned totalPixmapSize;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MarkWindowProcPtr MarkWindow;
|
||||||
|
MarkOverlappedWindowsProcPtr MarkOverlappedWindows;
|
||||||
|
ChangeSaveUnderProcPtr ChangeSaveUnder;
|
||||||
|
PostChangeSaveUnderProcPtr PostChangeSaveUnder;
|
||||||
|
MoveWindowProcPtr MoveWindow;
|
||||||
|
ResizeWindowProcPtr ResizeWindow;
|
||||||
|
GetLayerWindowProcPtr GetLayerWindow;
|
||||||
|
HandleExposuresProcPtr HandleExposures;
|
||||||
|
ReparentWindowProcPtr ReparentWindow;
|
||||||
|
|
||||||
|
#ifdef SHAPE
|
||||||
|
SetShapeProcPtr SetShape;
|
||||||
|
#endif /* SHAPE */
|
||||||
|
|
||||||
|
ChangeBorderWidthProcPtr ChangeBorderWidth;
|
||||||
|
MarkUnrealizedWindowProcPtr MarkUnrealizedWindow;
|
||||||
|
|
||||||
|
} ScreenRec;
|
||||||
|
|
||||||
|
typedef struct _ScreenInfo {
|
||||||
|
int imageByteOrder;
|
||||||
|
int bitmapScanlineUnit;
|
||||||
|
int bitmapScanlinePad;
|
||||||
|
int bitmapBitOrder;
|
||||||
|
int numPixmapFormats;
|
||||||
|
PixmapFormatRec
|
||||||
|
formats[MAXFORMATS];
|
||||||
|
int arraySize;
|
||||||
|
int numScreens;
|
||||||
|
ScreenPtr screens[MAXSCREENS];
|
||||||
|
int numVideoScreens;
|
||||||
|
} ScreenInfo;
|
||||||
|
|
||||||
|
extern ScreenInfo screenInfo;
|
||||||
|
|
||||||
|
extern void InitOutput(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenInfo * /*pScreenInfo*/,
|
||||||
|
int /*argc*/,
|
||||||
|
char ** /*argv*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* SCREENINTSTRUCT_H */
|
@ -0,0 +1,42 @@
|
|||||||
|
/* $XConsortium: validate.h,v 5.4 94/04/17 20:26:11 dpw Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 1989 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef VALIDATE_H
|
||||||
|
#define VALIDATE_H
|
||||||
|
|
||||||
|
#include "miscstruct.h"
|
||||||
|
#include "regionstr.h"
|
||||||
|
|
||||||
|
typedef enum { VTOther, VTStack, VTMove, VTUnmap, VTMap } VTKind;
|
||||||
|
|
||||||
|
/* union _Validate is now device dependent; see mivalidate.h for an example */
|
||||||
|
typedef union _Validate *ValidatePtr;
|
||||||
|
|
||||||
|
#define UnmapValData ((ValidatePtr)1)
|
||||||
|
|
||||||
|
#endif /* VALIDATE_H */
|
@ -0,0 +1,351 @@
|
|||||||
|
/* $XConsortium: window.h /main/8 1996/03/21 13:35:33 mor $ */
|
||||||
|
/***********************************************************
|
||||||
|
|
||||||
|
Copyright (c) 1987 X Consortium
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of the X Consortium shall not be
|
||||||
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
|
in this Software without prior written authorization from the X Consortium.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
||||||
|
|
||||||
|
All Rights Reserved
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and distribute this software and its
|
||||||
|
documentation for any purpose and without fee is hereby granted,
|
||||||
|
provided that the above copyright notice appear in all copies and that
|
||||||
|
both that copyright notice and this permission notice appear in
|
||||||
|
supporting documentation, and that the name of Digital not be
|
||||||
|
used in advertising or publicity pertaining to distribution of the
|
||||||
|
software without specific, written prior permission.
|
||||||
|
|
||||||
|
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||||
|
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
||||||
|
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||||
|
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||||
|
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
******************************************************************/
|
||||||
|
|
||||||
|
#ifndef WINDOW_H
|
||||||
|
#define WINDOW_H
|
||||||
|
|
||||||
|
#include "misc.h"
|
||||||
|
#include "region.h"
|
||||||
|
#include "screenint.h"
|
||||||
|
#include "X11/Xproto.h"
|
||||||
|
|
||||||
|
#define TOTALLY_OBSCURED 0
|
||||||
|
#define UNOBSCURED 1
|
||||||
|
#define OBSCURED 2
|
||||||
|
|
||||||
|
#define VisibilityNotViewable 3
|
||||||
|
|
||||||
|
/* return values for tree-walking callback procedures */
|
||||||
|
#define WT_STOPWALKING 0
|
||||||
|
#define WT_WALKCHILDREN 1
|
||||||
|
#define WT_DONTWALKCHILDREN 2
|
||||||
|
#define WT_NOMATCH 3
|
||||||
|
#define NullWindow ((X11WindowPtr) 0)
|
||||||
|
|
||||||
|
typedef struct _BackingStore *BackingStorePtr;
|
||||||
|
typedef struct _Window *X11WindowPtr; /* conflict with CoreGraphics */
|
||||||
|
|
||||||
|
typedef int (*VisitWindowProcPtr)(
|
||||||
|
#if NeedNestedPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
pointer /*data*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int TraverseTree(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
VisitWindowProcPtr /*func*/,
|
||||||
|
pointer /*data*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int WalkTree(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*pScreen*/,
|
||||||
|
VisitWindowProcPtr /*func*/,
|
||||||
|
pointer /*data*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern X11WindowPtr AllocateWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool CreateRootWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ScreenPtr /*pScreen*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void InitRootWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void ClippedRegionFromBox(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
RegionPtr /*Rgn*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
int /*w*/,
|
||||||
|
int /*h*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern X11WindowPtr RealChildHead(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern X11WindowPtr CreateWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
Window /*wid*/,
|
||||||
|
X11WindowPtr /*pParent*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
unsigned int /*w*/,
|
||||||
|
unsigned int /*h*/,
|
||||||
|
unsigned int /*bw*/,
|
||||||
|
unsigned int /*class*/,
|
||||||
|
Mask /*vmask*/,
|
||||||
|
XID* /*vlist*/,
|
||||||
|
int /*depth*/,
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
VisualID /*visual*/,
|
||||||
|
int* /*error*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int DeleteWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
pointer /*pWin*/,
|
||||||
|
XID /*wid*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void DestroySubwindows(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int X11ChangeWindowAttributes(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
Mask /*vmask*/,
|
||||||
|
XID* /*vlist*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void X11GetWindowAttributes(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
ClientPtr /*client*/,
|
||||||
|
xGetWindowAttributesReply* /* wa */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern RegionPtr CreateUnclippedWinSize(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void GravityTranslate(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
int /*oldx*/,
|
||||||
|
int /*oldy*/,
|
||||||
|
int /*dw*/,
|
||||||
|
int /*dh*/,
|
||||||
|
unsigned /*gravity*/,
|
||||||
|
int* /*destx*/,
|
||||||
|
int* /*desty*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ConfigureWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
Mask /*mask*/,
|
||||||
|
XID* /*vlist*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int CirculateWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pParent*/,
|
||||||
|
int /*direction*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int ReparentWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
X11WindowPtr /*pParent*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int MapWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void MapSubwindows(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pParent*/,
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern int UnmapWindow(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
Bool /*fromConfigure*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void UnmapSubwindows(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void HandleSaveSet(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
ClientPtr /*client*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool VisibleBoundingBoxFromPoint(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/,
|
||||||
|
BoxPtr /*box*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool PointInWindowIsVisible(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
int /*x*/,
|
||||||
|
int /*y*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern RegionPtr NotClippedByChildren(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void SendVisibilityNotify(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void SaveScreens(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
int /*on*/,
|
||||||
|
int /*mode*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern X11WindowPtr FindWindowWithOptional(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*w*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void CheckWindowOptionalNeed(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*w*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern Bool MakeWindowOptional(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern void DisposeWindowOptional(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
extern X11WindowPtr MoveWindowInStack(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
X11WindowPtr /*pNextSib*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
void SetWinSize(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
void SetBorderSize(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
void ResizeChildrenWinSize(
|
||||||
|
#if NeedFunctionPrototypes
|
||||||
|
X11WindowPtr /*pWin*/,
|
||||||
|
int /*dx*/,
|
||||||
|
int /*dy*/,
|
||||||
|
int /*dw*/,
|
||||||
|
int /*dh*/
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* WINDOW_H */
|
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* kbdptr.c - deal with keyboard and pointer device over TCP & UDP.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
#ifdef SunArchitecture
|
||||||
|
CC = gcc
|
||||||
|
CCOPTIONS =
|
||||||
|
CDEBUGFLAGS = -O2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SRCS = vncauth.c d3des.c
|
||||||
|
|
||||||
|
OBJS = vncauth.o d3des.o
|
||||||
|
|
||||||
|
INCLUDES = -I. -I../include
|
||||||
|
|
||||||
|
NormalLibraryTarget(vncauth,$(OBJS))
|
||||||
|
|
||||||
|
DependTarget()
|
@ -0,0 +1,9 @@
|
|||||||
|
OBJS=vncauth.o d3des.o
|
||||||
|
|
||||||
|
CFLAGS=-I.
|
||||||
|
|
||||||
|
all: libvncauth.a
|
||||||
|
|
||||||
|
libvncauth.a: $(OBJS)
|
||||||
|
$(AR) clq $@ $(OBJS)
|
||||||
|
|
@ -0,0 +1,440 @@
|
|||||||
|
/*
|
||||||
|
* This is D3DES (V5.09) by Richard Outerbridge with the double and
|
||||||
|
* triple-length support removed for use in VNC. Also the bytebit[] array
|
||||||
|
* has been reversed so that the most significant bit in each byte of the
|
||||||
|
* key is ignored, not the least significant.
|
||||||
|
*
|
||||||
|
* These changes are:
|
||||||
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This software 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* D3DES (V5.09) -
|
||||||
|
*
|
||||||
|
* A portable, public domain, version of the Data Encryption Standard.
|
||||||
|
*
|
||||||
|
* Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
|
||||||
|
* Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
|
||||||
|
* code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
|
||||||
|
* Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
|
||||||
|
* for humouring me on.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
|
||||||
|
* (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "d3des.h"
|
||||||
|
|
||||||
|
static void scrunch(unsigned char *, unsigned long *);
|
||||||
|
static void unscrun(unsigned long *, unsigned char *);
|
||||||
|
static void desfunc(unsigned long *, unsigned long *);
|
||||||
|
static void cookey(unsigned long *);
|
||||||
|
|
||||||
|
static unsigned long KnL[32] = { 0L };
|
||||||
|
static unsigned long KnR[32] = { 0L };
|
||||||
|
static unsigned long Kn3[32] = { 0L };
|
||||||
|
static unsigned char Df_Key[24] = {
|
||||||
|
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
|
||||||
|
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
|
||||||
|
0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 };
|
||||||
|
|
||||||
|
static unsigned short bytebit[8] = {
|
||||||
|
01, 02, 04, 010, 020, 040, 0100, 0200 };
|
||||||
|
|
||||||
|
static unsigned long bigbyte[24] = {
|
||||||
|
0x800000L, 0x400000L, 0x200000L, 0x100000L,
|
||||||
|
0x80000L, 0x40000L, 0x20000L, 0x10000L,
|
||||||
|
0x8000L, 0x4000L, 0x2000L, 0x1000L,
|
||||||
|
0x800L, 0x400L, 0x200L, 0x100L,
|
||||||
|
0x80L, 0x40L, 0x20L, 0x10L,
|
||||||
|
0x8L, 0x4L, 0x2L, 0x1L };
|
||||||
|
|
||||||
|
/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
|
||||||
|
|
||||||
|
static unsigned char pc1[56] = {
|
||||||
|
56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
|
||||||
|
9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
|
||||||
|
62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
|
||||||
|
13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 };
|
||||||
|
|
||||||
|
static unsigned char totrot[16] = {
|
||||||
|
1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 };
|
||||||
|
|
||||||
|
static unsigned char pc2[48] = {
|
||||||
|
13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
|
||||||
|
22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
|
||||||
|
40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
|
||||||
|
43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 };
|
||||||
|
|
||||||
|
void deskey(key, edf) /* Thanks to James Gillogly & Phil Karn! */
|
||||||
|
unsigned char *key;
|
||||||
|
int edf;
|
||||||
|
{
|
||||||
|
register int i, j, l, m, n;
|
||||||
|
unsigned char pc1m[56], pcr[56];
|
||||||
|
unsigned long kn[32];
|
||||||
|
|
||||||
|
for ( j = 0; j < 56; j++ ) {
|
||||||
|
l = pc1[j];
|
||||||
|
m = l & 07;
|
||||||
|
pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
|
||||||
|
}
|
||||||
|
for( i = 0; i < 16; i++ ) {
|
||||||
|
if( edf == DE1 ) m = (15 - i) << 1;
|
||||||
|
else m = i << 1;
|
||||||
|
n = m + 1;
|
||||||
|
kn[m] = kn[n] = 0L;
|
||||||
|
for( j = 0; j < 28; j++ ) {
|
||||||
|
l = j + totrot[i];
|
||||||
|
if( l < 28 ) pcr[j] = pc1m[l];
|
||||||
|
else pcr[j] = pc1m[l - 28];
|
||||||
|
}
|
||||||
|
for( j = 28; j < 56; j++ ) {
|
||||||
|
l = j + totrot[i];
|
||||||
|
if( l < 56 ) pcr[j] = pc1m[l];
|
||||||
|
else pcr[j] = pc1m[l - 28];
|
||||||
|
}
|
||||||
|
for( j = 0; j < 24; j++ ) {
|
||||||
|
if( pcr[pc2[j]] ) kn[m] |= bigbyte[j];
|
||||||
|
if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cookey(kn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cookey(raw1)
|
||||||
|
register unsigned long *raw1;
|
||||||
|
{
|
||||||
|
register unsigned long *cook, *raw0;
|
||||||
|
unsigned long dough[32];
|
||||||
|
register int i;
|
||||||
|
|
||||||
|
cook = dough;
|
||||||
|
for( i = 0; i < 16; i++, raw1++ ) {
|
||||||
|
raw0 = raw1++;
|
||||||
|
*cook = (*raw0 & 0x00fc0000L) << 6;
|
||||||
|
*cook |= (*raw0 & 0x00000fc0L) << 10;
|
||||||
|
*cook |= (*raw1 & 0x00fc0000L) >> 10;
|
||||||
|
*cook++ |= (*raw1 & 0x00000fc0L) >> 6;
|
||||||
|
*cook = (*raw0 & 0x0003f000L) << 12;
|
||||||
|
*cook |= (*raw0 & 0x0000003fL) << 16;
|
||||||
|
*cook |= (*raw1 & 0x0003f000L) >> 4;
|
||||||
|
*cook++ |= (*raw1 & 0x0000003fL);
|
||||||
|
}
|
||||||
|
usekey(dough);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cpkey(into)
|
||||||
|
register unsigned long *into;
|
||||||
|
{
|
||||||
|
register unsigned long *from, *endp;
|
||||||
|
|
||||||
|
from = KnL, endp = &KnL[32];
|
||||||
|
while( from < endp ) *into++ = *from++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void usekey(from)
|
||||||
|
register unsigned long *from;
|
||||||
|
{
|
||||||
|
register unsigned long *to, *endp;
|
||||||
|
|
||||||
|
to = KnL, endp = &KnL[32];
|
||||||
|
while( to < endp ) *to++ = *from++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void des(inblock, outblock)
|
||||||
|
unsigned char *inblock, *outblock;
|
||||||
|
{
|
||||||
|
unsigned long work[2];
|
||||||
|
|
||||||
|
scrunch(inblock, work);
|
||||||
|
desfunc(work, KnL);
|
||||||
|
unscrun(work, outblock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void scrunch(outof, into)
|
||||||
|
register unsigned char *outof;
|
||||||
|
register unsigned long *into;
|
||||||
|
{
|
||||||
|
*into = (*outof++ & 0xffL) << 24;
|
||||||
|
*into |= (*outof++ & 0xffL) << 16;
|
||||||
|
*into |= (*outof++ & 0xffL) << 8;
|
||||||
|
*into++ |= (*outof++ & 0xffL);
|
||||||
|
*into = (*outof++ & 0xffL) << 24;
|
||||||
|
*into |= (*outof++ & 0xffL) << 16;
|
||||||
|
*into |= (*outof++ & 0xffL) << 8;
|
||||||
|
*into |= (*outof & 0xffL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void unscrun(outof, into)
|
||||||
|
register unsigned long *outof;
|
||||||
|
register unsigned char *into;
|
||||||
|
{
|
||||||
|
*into++ = (*outof >> 24) & 0xffL;
|
||||||
|
*into++ = (*outof >> 16) & 0xffL;
|
||||||
|
*into++ = (*outof >> 8) & 0xffL;
|
||||||
|
*into++ = *outof++ & 0xffL;
|
||||||
|
*into++ = (*outof >> 24) & 0xffL;
|
||||||
|
*into++ = (*outof >> 16) & 0xffL;
|
||||||
|
*into++ = (*outof >> 8) & 0xffL;
|
||||||
|
*into = *outof & 0xffL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long SP1[64] = {
|
||||||
|
0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L,
|
||||||
|
0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L,
|
||||||
|
0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L,
|
||||||
|
0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L,
|
||||||
|
0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L,
|
||||||
|
0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L,
|
||||||
|
0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L,
|
||||||
|
0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L,
|
||||||
|
0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L,
|
||||||
|
0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L,
|
||||||
|
0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L,
|
||||||
|
0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L,
|
||||||
|
0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L,
|
||||||
|
0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L,
|
||||||
|
0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L,
|
||||||
|
0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L };
|
||||||
|
|
||||||
|
static unsigned long SP2[64] = {
|
||||||
|
0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L,
|
||||||
|
0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L,
|
||||||
|
0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L,
|
||||||
|
0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L,
|
||||||
|
0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L,
|
||||||
|
0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L,
|
||||||
|
0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L,
|
||||||
|
0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L,
|
||||||
|
0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L,
|
||||||
|
0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L,
|
||||||
|
0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L,
|
||||||
|
0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L,
|
||||||
|
0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L,
|
||||||
|
0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L,
|
||||||
|
0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L,
|
||||||
|
0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L };
|
||||||
|
|
||||||
|
static unsigned long SP3[64] = {
|
||||||
|
0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L,
|
||||||
|
0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L,
|
||||||
|
0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L,
|
||||||
|
0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L,
|
||||||
|
0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L,
|
||||||
|
0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L,
|
||||||
|
0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L,
|
||||||
|
0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L,
|
||||||
|
0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L,
|
||||||
|
0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L,
|
||||||
|
0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L,
|
||||||
|
0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L,
|
||||||
|
0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L,
|
||||||
|
0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L,
|
||||||
|
0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L,
|
||||||
|
0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L };
|
||||||
|
|
||||||
|
static unsigned long SP4[64] = {
|
||||||
|
0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
|
||||||
|
0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L,
|
||||||
|
0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L,
|
||||||
|
0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L,
|
||||||
|
0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L,
|
||||||
|
0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L,
|
||||||
|
0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L,
|
||||||
|
0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L,
|
||||||
|
0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L,
|
||||||
|
0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L,
|
||||||
|
0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L,
|
||||||
|
0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L,
|
||||||
|
0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L,
|
||||||
|
0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L,
|
||||||
|
0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L,
|
||||||
|
0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L };
|
||||||
|
|
||||||
|
static unsigned long SP5[64] = {
|
||||||
|
0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L,
|
||||||
|
0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L,
|
||||||
|
0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L,
|
||||||
|
0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L,
|
||||||
|
0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L,
|
||||||
|
0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L,
|
||||||
|
0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L,
|
||||||
|
0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L,
|
||||||
|
0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L,
|
||||||
|
0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L,
|
||||||
|
0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L,
|
||||||
|
0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L,
|
||||||
|
0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L,
|
||||||
|
0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L,
|
||||||
|
0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L,
|
||||||
|
0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L };
|
||||||
|
|
||||||
|
static unsigned long SP6[64] = {
|
||||||
|
0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L,
|
||||||
|
0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L,
|
||||||
|
0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L,
|
||||||
|
0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L,
|
||||||
|
0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L,
|
||||||
|
0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L,
|
||||||
|
0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L,
|
||||||
|
0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L,
|
||||||
|
0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L,
|
||||||
|
0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L,
|
||||||
|
0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L,
|
||||||
|
0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L,
|
||||||
|
0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L,
|
||||||
|
0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L,
|
||||||
|
0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L,
|
||||||
|
0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L };
|
||||||
|
|
||||||
|
static unsigned long SP7[64] = {
|
||||||
|
0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L,
|
||||||
|
0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L,
|
||||||
|
0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L,
|
||||||
|
0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L,
|
||||||
|
0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L,
|
||||||
|
0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L,
|
||||||
|
0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L,
|
||||||
|
0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
|
||||||
|
0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
|
||||||
|
0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L,
|
||||||
|
0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L,
|
||||||
|
0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L,
|
||||||
|
0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L,
|
||||||
|
0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L,
|
||||||
|
0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L,
|
||||||
|
0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L };
|
||||||
|
|
||||||
|
static unsigned long SP8[64] = {
|
||||||
|
0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L,
|
||||||
|
0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L,
|
||||||
|
0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L,
|
||||||
|
0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L,
|
||||||
|
0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L,
|
||||||
|
0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L,
|
||||||
|
0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L,
|
||||||
|
0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L,
|
||||||
|
0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L,
|
||||||
|
0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L,
|
||||||
|
0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L,
|
||||||
|
0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L,
|
||||||
|
0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L,
|
||||||
|
0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L,
|
||||||
|
0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L,
|
||||||
|
0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L };
|
||||||
|
|
||||||
|
static void desfunc(block, keys)
|
||||||
|
register unsigned long *block, *keys;
|
||||||
|
{
|
||||||
|
register unsigned long fval, work, right, leftt;
|
||||||
|
register int round;
|
||||||
|
|
||||||
|
leftt = block[0];
|
||||||
|
right = block[1];
|
||||||
|
work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
|
||||||
|
right ^= work;
|
||||||
|
leftt ^= (work << 4);
|
||||||
|
work = ((leftt >> 16) ^ right) & 0x0000ffffL;
|
||||||
|
right ^= work;
|
||||||
|
leftt ^= (work << 16);
|
||||||
|
work = ((right >> 2) ^ leftt) & 0x33333333L;
|
||||||
|
leftt ^= work;
|
||||||
|
right ^= (work << 2);
|
||||||
|
work = ((right >> 8) ^ leftt) & 0x00ff00ffL;
|
||||||
|
leftt ^= work;
|
||||||
|
right ^= (work << 8);
|
||||||
|
right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;
|
||||||
|
work = (leftt ^ right) & 0xaaaaaaaaL;
|
||||||
|
leftt ^= work;
|
||||||
|
right ^= work;
|
||||||
|
leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
|
||||||
|
|
||||||
|
for( round = 0; round < 8; round++ ) {
|
||||||
|
work = (right << 28) | (right >> 4);
|
||||||
|
work ^= *keys++;
|
||||||
|
fval = SP7[ work & 0x3fL];
|
||||||
|
fval |= SP5[(work >> 8) & 0x3fL];
|
||||||
|
fval |= SP3[(work >> 16) & 0x3fL];
|
||||||
|
fval |= SP1[(work >> 24) & 0x3fL];
|
||||||
|
work = right ^ *keys++;
|
||||||
|
fval |= SP8[ work & 0x3fL];
|
||||||
|
fval |= SP6[(work >> 8) & 0x3fL];
|
||||||
|
fval |= SP4[(work >> 16) & 0x3fL];
|
||||||
|
fval |= SP2[(work >> 24) & 0x3fL];
|
||||||
|
leftt ^= fval;
|
||||||
|
work = (leftt << 28) | (leftt >> 4);
|
||||||
|
work ^= *keys++;
|
||||||
|
fval = SP7[ work & 0x3fL];
|
||||||
|
fval |= SP5[(work >> 8) & 0x3fL];
|
||||||
|
fval |= SP3[(work >> 16) & 0x3fL];
|
||||||
|
fval |= SP1[(work >> 24) & 0x3fL];
|
||||||
|
work = leftt ^ *keys++;
|
||||||
|
fval |= SP8[ work & 0x3fL];
|
||||||
|
fval |= SP6[(work >> 8) & 0x3fL];
|
||||||
|
fval |= SP4[(work >> 16) & 0x3fL];
|
||||||
|
fval |= SP2[(work >> 24) & 0x3fL];
|
||||||
|
right ^= fval;
|
||||||
|
}
|
||||||
|
|
||||||
|
right = (right << 31) | (right >> 1);
|
||||||
|
work = (leftt ^ right) & 0xaaaaaaaaL;
|
||||||
|
leftt ^= work;
|
||||||
|
right ^= work;
|
||||||
|
leftt = (leftt << 31) | (leftt >> 1);
|
||||||
|
work = ((leftt >> 8) ^ right) & 0x00ff00ffL;
|
||||||
|
right ^= work;
|
||||||
|
leftt ^= (work << 8);
|
||||||
|
work = ((leftt >> 2) ^ right) & 0x33333333L;
|
||||||
|
right ^= work;
|
||||||
|
leftt ^= (work << 2);
|
||||||
|
work = ((right >> 16) ^ leftt) & 0x0000ffffL;
|
||||||
|
leftt ^= work;
|
||||||
|
right ^= (work << 16);
|
||||||
|
work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL;
|
||||||
|
leftt ^= work;
|
||||||
|
right ^= (work << 4);
|
||||||
|
*block++ = right;
|
||||||
|
*block = leftt;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validation sets:
|
||||||
|
*
|
||||||
|
* Single-length key, single-length plaintext -
|
||||||
|
* Key : 0123 4567 89ab cdef
|
||||||
|
* Plain : 0123 4567 89ab cde7
|
||||||
|
* Cipher : c957 4425 6a5e d31d
|
||||||
|
*
|
||||||
|
* Double-length key, single-length plaintext -
|
||||||
|
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210
|
||||||
|
* Plain : 0123 4567 89ab cde7
|
||||||
|
* Cipher : 7f1d 0a77 826b 8aff
|
||||||
|
*
|
||||||
|
* Double-length key, double-length plaintext -
|
||||||
|
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210
|
||||||
|
* Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
|
||||||
|
* Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7
|
||||||
|
*
|
||||||
|
* Triple-length key, single-length plaintext -
|
||||||
|
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
|
||||||
|
* Plain : 0123 4567 89ab cde7
|
||||||
|
* Cipher : de0b 7c06 ae5e 0ed5
|
||||||
|
*
|
||||||
|
* Triple-length key, double-length plaintext -
|
||||||
|
* Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567
|
||||||
|
* Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff
|
||||||
|
* Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5
|
||||||
|
*
|
||||||
|
* d3des V5.0a rwo 9208.07 18:44 Graven Imagery
|
||||||
|
**********************************************************************/
|
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* This is D3DES (V5.09) by Richard Outerbridge with the double and
|
||||||
|
* triple-length support removed for use in VNC.
|
||||||
|
*
|
||||||
|
* These changes are:
|
||||||
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This software 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* d3des.h -
|
||||||
|
*
|
||||||
|
* Headers and defines for d3des.c
|
||||||
|
* Graven Imagery, 1992.
|
||||||
|
*
|
||||||
|
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
|
||||||
|
* (GEnie : OUTER; CIS : [71755,204])
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define EN0 0 /* MODE == encrypt */
|
||||||
|
#define DE1 1 /* MODE == decrypt */
|
||||||
|
|
||||||
|
extern void deskey(unsigned char *, int);
|
||||||
|
/* hexkey[8] MODE
|
||||||
|
* Sets the internal key register according to the hexadecimal
|
||||||
|
* key contained in the 8 bytes of hexkey, according to the DES,
|
||||||
|
* for encryption or decryption according to MODE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void usekey(unsigned long *);
|
||||||
|
/* cookedkey[32]
|
||||||
|
* Loads the internal key register with the data in cookedkey.
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void cpkey(unsigned long *);
|
||||||
|
/* cookedkey[32]
|
||||||
|
* Copies the contents of the internal key register into the storage
|
||||||
|
* located at &cookedkey[0].
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void des(unsigned char *, unsigned char *);
|
||||||
|
/* from[8] to[8]
|
||||||
|
* Encrypts/Decrypts (according to the key currently loaded in the
|
||||||
|
* internal key register) one block of eight bytes at address 'from'
|
||||||
|
* into the block at address 'to'. They can be the same.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery
|
||||||
|
********************************************************************/
|
@ -0,0 +1,161 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vncauth.c - Functions for VNC password management and authentication.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <vncauth.h>
|
||||||
|
#include <d3des.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We use a fixed key to store passwords, since we assume that our local
|
||||||
|
* file system is secure but nonetheless don't want to store passwords
|
||||||
|
* as plaintext.
|
||||||
|
*/
|
||||||
|
|
||||||
|
unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encrypt a password and store it in a file. Returns 0 if successful,
|
||||||
|
* 1 if the file could not be written.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
vncEncryptAndStorePasswd(char *passwd, char *fname)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int i;
|
||||||
|
unsigned char encryptedPasswd[8];
|
||||||
|
|
||||||
|
if ((fp = fopen(fname,"w")) == NULL) return 1;
|
||||||
|
|
||||||
|
chmod(fname, S_IRUSR|S_IWUSR);
|
||||||
|
|
||||||
|
/* pad password with nulls */
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
if (i < strlen(passwd)) {
|
||||||
|
encryptedPasswd[i] = passwd[i];
|
||||||
|
} else {
|
||||||
|
encryptedPasswd[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do encryption in-place - this way we overwrite our copy of the plaintext
|
||||||
|
password */
|
||||||
|
|
||||||
|
deskey(fixedkey, EN0);
|
||||||
|
des(encryptedPasswd, encryptedPasswd);
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
putc(encryptedPasswd[i], fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decrypt a password from a file. Returns a pointer to a newly allocated
|
||||||
|
* string containing the password or a null pointer if the password could
|
||||||
|
* not be retrieved for some reason.
|
||||||
|
*/
|
||||||
|
|
||||||
|
char *
|
||||||
|
vncDecryptPasswdFromFile(char *fname)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int i, ch;
|
||||||
|
unsigned char *passwd = (unsigned char *)malloc(9);
|
||||||
|
|
||||||
|
if ((fp = fopen(fname,"r")) == NULL) return NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
ch = getc(fp);
|
||||||
|
if (ch == EOF) {
|
||||||
|
fclose(fp);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
passwd[i] = ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
deskey(fixedkey, DE1);
|
||||||
|
des(passwd, passwd);
|
||||||
|
|
||||||
|
passwd[8] = 0;
|
||||||
|
|
||||||
|
return (char *)passwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generate CHALLENGESIZE random bytes for use in challenge-response
|
||||||
|
* authentication.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
vncRandomBytes(unsigned char *bytes)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
unsigned int seed = (unsigned int) time(0);
|
||||||
|
|
||||||
|
srandom(seed);
|
||||||
|
for (i = 0; i < CHALLENGESIZE; i++) {
|
||||||
|
bytes[i] = (unsigned char)(random() & 255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encrypt CHALLENGESIZE bytes in memory using a password.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
vncEncryptBytes(unsigned char *bytes, char *passwd)
|
||||||
|
{
|
||||||
|
unsigned char key[8];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* key is simply password padded with nulls */
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
if (i < strlen(passwd)) {
|
||||||
|
key[i] = passwd[i];
|
||||||
|
} else {
|
||||||
|
key[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deskey(key, EN0);
|
||||||
|
|
||||||
|
for (i = 0; i < CHALLENGESIZE; i += 8) {
|
||||||
|
des(bytes+i, bytes+i);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vncauth.h - describes the functions provided by the vncauth library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MAXPWLEN 8
|
||||||
|
#define CHALLENGESIZE 16
|
||||||
|
|
||||||
|
extern int vncEncryptAndStorePasswd(char *passwd, char *fname);
|
||||||
|
extern char *vncDecryptPasswdFromFile(char *fname);
|
||||||
|
extern void vncRandomBytes(unsigned char *bytes);
|
||||||
|
extern void vncEncryptBytes(unsigned char *bytes, char *passwd);
|
@ -0,0 +1,388 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Cut in two parts by Johannes Schindelin (2001): libvncserver and OSXvnc.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This file implements every system specific function for Mac OS X.
|
||||||
|
*
|
||||||
|
* It includes the init function:
|
||||||
|
*
|
||||||
|
void rfbScreenInit(void)
|
||||||
|
*
|
||||||
|
* the function to get the address of the framebuffer:
|
||||||
|
*
|
||||||
|
char *rfbGetFramebuffer(void)
|
||||||
|
*
|
||||||
|
* keyboard functions:
|
||||||
|
*
|
||||||
|
void KbdAddEvent(down, keySym, cl)
|
||||||
|
Bool down;
|
||||||
|
KeySym keySym;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
void KbdReleaseAllKeys()
|
||||||
|
*
|
||||||
|
* the mouse functions:
|
||||||
|
*
|
||||||
|
void PtrAddEvent(buttonMask, x, y, cl)
|
||||||
|
int buttonMask;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
*
|
||||||
|
* and the EventLoop:
|
||||||
|
*
|
||||||
|
void runEventLoop()
|
||||||
|
*
|
||||||
|
* These six functions have to be defined by every VNC server using
|
||||||
|
* libvncserver.
|
||||||
|
*
|
||||||
|
* The main function just calls runVNCServer. This is different
|
||||||
|
* for more complex users of libvncserver.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "rfb.h"
|
||||||
|
#include <ApplicationServices/ApplicationServices.h>
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbScreenInit(void)
|
||||||
|
{
|
||||||
|
int bitsPerSample;
|
||||||
|
int samplesPerPixel;
|
||||||
|
|
||||||
|
rfbScreen.width = CGDisplayPixelsWide(kCGDirectMainDisplay);
|
||||||
|
rfbScreen.height = CGDisplayPixelsHigh(kCGDirectMainDisplay);
|
||||||
|
rfbScreen.bitsPerPixel = rfbScreen.depth =
|
||||||
|
CGDisplayBitsPerPixel(kCGDirectMainDisplay);
|
||||||
|
gethostname(rfbThisHost, 255);
|
||||||
|
rfbScreen.paddedWidthInBytes = CGDisplayBytesPerRow(kCGDirectMainDisplay);
|
||||||
|
rfbServerFormat.bitsPerPixel = rfbScreen.bitsPerPixel;
|
||||||
|
rfbServerFormat.depth = rfbScreen.depth;
|
||||||
|
rfbServerFormat.bigEndian = !(*(char *)&rfbEndianTest);
|
||||||
|
rfbServerFormat.trueColour = TRUE;
|
||||||
|
|
||||||
|
bitsPerSample = CGDisplayBitsPerSample(kCGDirectMainDisplay);
|
||||||
|
samplesPerPixel = CGDisplaySamplesPerPixel(kCGDirectMainDisplay);
|
||||||
|
if (samplesPerPixel != 3) {
|
||||||
|
rfbLog("screen format not supported. exiting.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This works for 16 and 32-bit, but not for 8-bit.
|
||||||
|
What should it be for 8-bit? (Shouldn't 8-bit use a colormap?) */
|
||||||
|
rfbServerFormat.redMax = (1 << bitsPerSample) - 1;
|
||||||
|
rfbServerFormat.greenMax = (1 << bitsPerSample) - 1;
|
||||||
|
rfbServerFormat.blueMax = (1 << bitsPerSample) - 1;
|
||||||
|
rfbServerFormat.redShift = bitsPerSample * 2;
|
||||||
|
rfbServerFormat.greenShift = bitsPerSample;
|
||||||
|
rfbServerFormat.blueShift = 0;
|
||||||
|
|
||||||
|
/* We want to use the X11 REGION_* macros without having an actual
|
||||||
|
X11 ScreenPtr, so we do this. Pretty ugly, but at least it lets us
|
||||||
|
avoid hacking up regionstr.h, or changing every call to REGION_*
|
||||||
|
(which actually I should probably do eventually). */
|
||||||
|
hackScreen.RegionCreate = miRegionCreate;
|
||||||
|
hackScreen.RegionInit = miRegionInit;
|
||||||
|
hackScreen.RegionCopy = miRegionCopy;
|
||||||
|
hackScreen.RegionDestroy = miRegionDestroy;
|
||||||
|
hackScreen.RegionUninit = miRegionUninit;
|
||||||
|
hackScreen.Intersect = miIntersect;
|
||||||
|
hackScreen.Union = miUnion;
|
||||||
|
hackScreen.Subtract = miSubtract;
|
||||||
|
hackScreen.Inverse = miInverse;
|
||||||
|
hackScreen.RegionReset = miRegionReset;
|
||||||
|
hackScreen.TranslateRegion = miTranslateRegion;
|
||||||
|
hackScreen.RectIn = miRectIn;
|
||||||
|
hackScreen.PointInRegion = miPointInRegion;
|
||||||
|
hackScreen.RegionNotEmpty = miRegionNotEmpty;
|
||||||
|
hackScreen.RegionEmpty = miRegionEmpty;
|
||||||
|
hackScreen.RegionExtents = miRegionExtents;
|
||||||
|
hackScreen.RegionAppend = miRegionAppend;
|
||||||
|
hackScreen.RegionValidate = miRegionValidate;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
rfbGetFramebuffer(void)
|
||||||
|
{
|
||||||
|
return (char *)CGDisplayBaseAddress(kCGDirectMainDisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Where do I get the "official" list of Mac key codes?
|
||||||
|
Ripped these out of a Mac II emulator called Basilisk II
|
||||||
|
that I found on the net. */
|
||||||
|
static int keyTable[] = {
|
||||||
|
/* The alphabet */
|
||||||
|
XK_A, 0, /* A */
|
||||||
|
XK_B, 11, /* B */
|
||||||
|
XK_C, 8, /* C */
|
||||||
|
XK_D, 2, /* D */
|
||||||
|
XK_E, 14, /* E */
|
||||||
|
XK_F, 3, /* F */
|
||||||
|
XK_G, 5, /* G */
|
||||||
|
XK_H, 4, /* H */
|
||||||
|
XK_I, 34, /* I */
|
||||||
|
XK_J, 38, /* J */
|
||||||
|
XK_K, 40, /* K */
|
||||||
|
XK_L, 37, /* L */
|
||||||
|
XK_M, 46, /* M */
|
||||||
|
XK_N, 45, /* N */
|
||||||
|
XK_O, 31, /* O */
|
||||||
|
XK_P, 35, /* P */
|
||||||
|
XK_Q, 12, /* Q */
|
||||||
|
XK_R, 15, /* R */
|
||||||
|
XK_S, 1, /* S */
|
||||||
|
XK_T, 17, /* T */
|
||||||
|
XK_U, 32, /* U */
|
||||||
|
XK_V, 9, /* V */
|
||||||
|
XK_W, 13, /* W */
|
||||||
|
XK_X, 7, /* X */
|
||||||
|
XK_Y, 16, /* Y */
|
||||||
|
XK_Z, 6, /* Z */
|
||||||
|
XK_a, 0, /* a */
|
||||||
|
XK_b, 11, /* b */
|
||||||
|
XK_c, 8, /* c */
|
||||||
|
XK_d, 2, /* d */
|
||||||
|
XK_e, 14, /* e */
|
||||||
|
XK_f, 3, /* f */
|
||||||
|
XK_g, 5, /* g */
|
||||||
|
XK_h, 4, /* h */
|
||||||
|
XK_i, 34, /* i */
|
||||||
|
XK_j, 38, /* j */
|
||||||
|
XK_k, 40, /* k */
|
||||||
|
XK_l, 37, /* l */
|
||||||
|
XK_m, 46, /* m */
|
||||||
|
XK_n, 45, /* n */
|
||||||
|
XK_o, 31, /* o */
|
||||||
|
XK_p, 35, /* p */
|
||||||
|
XK_q, 12, /* q */
|
||||||
|
XK_r, 15, /* r */
|
||||||
|
XK_s, 1, /* s */
|
||||||
|
XK_t, 17, /* t */
|
||||||
|
XK_u, 32, /* u */
|
||||||
|
XK_v, 9, /* v */
|
||||||
|
XK_w, 13, /* w */
|
||||||
|
XK_x, 7, /* x */
|
||||||
|
XK_y, 16, /* y */
|
||||||
|
XK_z, 6, /* z */
|
||||||
|
|
||||||
|
/* Numbers */
|
||||||
|
XK_0, 29, /* 0 */
|
||||||
|
XK_1, 18, /* 1 */
|
||||||
|
XK_2, 19, /* 2 */
|
||||||
|
XK_3, 20, /* 3 */
|
||||||
|
XK_4, 21, /* 4 */
|
||||||
|
XK_5, 23, /* 5 */
|
||||||
|
XK_6, 22, /* 6 */
|
||||||
|
XK_7, 26, /* 7 */
|
||||||
|
XK_8, 28, /* 8 */
|
||||||
|
XK_9, 25, /* 9 */
|
||||||
|
|
||||||
|
/* Symbols */
|
||||||
|
XK_exclam, 18, /* ! */
|
||||||
|
XK_at, 19, /* @ */
|
||||||
|
XK_numbersign, 20, /* # */
|
||||||
|
XK_dollar, 21, /* $ */
|
||||||
|
XK_percent, 23, /* % */
|
||||||
|
XK_asciicircum, 22, /* ^ */
|
||||||
|
XK_ampersand, 26, /* & */
|
||||||
|
XK_asterisk, 28, /* * */
|
||||||
|
XK_parenleft, 25, /* ( */
|
||||||
|
XK_parenright, 29, /* ) */
|
||||||
|
XK_minus, 27, /* - */
|
||||||
|
XK_underscore, 27, /* _ */
|
||||||
|
XK_equal, 24, /* = */
|
||||||
|
XK_plus, 24, /* + */
|
||||||
|
XK_grave, 10, /* ` */ /* XXX ? */
|
||||||
|
XK_asciitilde, 10, /* ~ */
|
||||||
|
XK_bracketleft, 33, /* [ */
|
||||||
|
XK_braceleft, 33, /* { */
|
||||||
|
XK_bracketright, 30, /* ] */
|
||||||
|
XK_braceright, 30, /* } */
|
||||||
|
XK_semicolon, 41, /* ; */
|
||||||
|
XK_colon, 41, /* : */
|
||||||
|
XK_apostrophe, 39, /* ' */
|
||||||
|
XK_quotedbl, 39, /* " */
|
||||||
|
XK_comma, 43, /* , */
|
||||||
|
XK_less, 43, /* < */
|
||||||
|
XK_period, 47, /* . */
|
||||||
|
XK_greater, 47, /* > */
|
||||||
|
XK_slash, 44, /* / */
|
||||||
|
XK_question, 44, /* ? */
|
||||||
|
XK_backslash, 42, /* \ */
|
||||||
|
XK_bar, 42, /* | */
|
||||||
|
|
||||||
|
/* "Special" keys */
|
||||||
|
XK_space, 49, /* Space */
|
||||||
|
XK_Return, 36, /* Return */
|
||||||
|
XK_Delete, 117, /* Delete */
|
||||||
|
XK_Tab, 48, /* Tab */
|
||||||
|
XK_Escape, 53, /* Esc */
|
||||||
|
XK_Caps_Lock, 57, /* Caps Lock */
|
||||||
|
XK_Num_Lock, 71, /* Num Lock */
|
||||||
|
XK_Scroll_Lock, 107, /* Scroll Lock */
|
||||||
|
XK_Pause, 113, /* Pause */
|
||||||
|
XK_BackSpace, 51, /* Backspace */
|
||||||
|
XK_Insert, 114, /* Insert */
|
||||||
|
|
||||||
|
/* Cursor movement */
|
||||||
|
XK_Up, 126, /* Cursor Up */
|
||||||
|
XK_Down, 125, /* Cursor Down */
|
||||||
|
XK_Left, 123, /* Cursor Left */
|
||||||
|
XK_Right, 124, /* Cursor Right */
|
||||||
|
XK_Page_Up, 116, /* Page Up */
|
||||||
|
XK_Page_Down, 121, /* Page Down */
|
||||||
|
XK_Home, 115, /* Home */
|
||||||
|
XK_End, 119, /* End */
|
||||||
|
|
||||||
|
/* Numeric keypad */
|
||||||
|
XK_KP_0, 82, /* KP 0 */
|
||||||
|
XK_KP_1, 83, /* KP 1 */
|
||||||
|
XK_KP_2, 84, /* KP 2 */
|
||||||
|
XK_KP_3, 85, /* KP 3 */
|
||||||
|
XK_KP_4, 86, /* KP 4 */
|
||||||
|
XK_KP_5, 87, /* KP 5 */
|
||||||
|
XK_KP_6, 88, /* KP 6 */
|
||||||
|
XK_KP_7, 89, /* KP 7 */
|
||||||
|
XK_KP_8, 91, /* KP 8 */
|
||||||
|
XK_KP_9, 92, /* KP 9 */
|
||||||
|
XK_KP_Enter, 76, /* KP Enter */
|
||||||
|
XK_KP_Decimal, 65, /* KP . */
|
||||||
|
XK_KP_Add, 69, /* KP + */
|
||||||
|
XK_KP_Subtract, 78, /* KP - */
|
||||||
|
XK_KP_Multiply, 67, /* KP * */
|
||||||
|
XK_KP_Divide, 75, /* KP / */
|
||||||
|
|
||||||
|
/* Function keys */
|
||||||
|
XK_F1, 122, /* F1 */
|
||||||
|
XK_F2, 120, /* F2 */
|
||||||
|
XK_F3, 99, /* F3 */
|
||||||
|
XK_F4, 118, /* F4 */
|
||||||
|
XK_F5, 96, /* F5 */
|
||||||
|
XK_F6, 97, /* F6 */
|
||||||
|
XK_F7, 98, /* F7 */
|
||||||
|
XK_F8, 100, /* F8 */
|
||||||
|
XK_F9, 101, /* F9 */
|
||||||
|
XK_F10, 109, /* F10 */
|
||||||
|
XK_F11, 103, /* F11 */
|
||||||
|
XK_F12, 111, /* F12 */
|
||||||
|
|
||||||
|
/* Modifier keys */
|
||||||
|
XK_Shift_L, 56, /* Shift Left */
|
||||||
|
XK_Shift_R, 56, /* Shift Right */
|
||||||
|
XK_Control_L, 59, /* Ctrl Left */
|
||||||
|
XK_Control_R, 59, /* Ctrl Right */
|
||||||
|
XK_Meta_L, 58, /* Logo Left (-> Option) */
|
||||||
|
XK_Meta_R, 58, /* Logo Right (-> Option) */
|
||||||
|
XK_Alt_L, 55, /* Alt Left (-> Command) */
|
||||||
|
XK_Alt_R, 55, /* Alt Right (-> Command) */
|
||||||
|
|
||||||
|
/* Weirdness I can't figure out */
|
||||||
|
/* XK_3270_PrintScreen, 105, /* PrintScrn */ /* XXX ? */
|
||||||
|
/* ??? 94, 50, /* International */
|
||||||
|
XK_Menu, 50, /* Menu (-> International) */
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
KbdAddEvent(down, keySym, cl)
|
||||||
|
Bool down;
|
||||||
|
KeySym keySym;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
CGKeyCode keyCode = -1;
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < (sizeof(keyTable) / sizeof(int)); i += 2) {
|
||||||
|
if (keyTable[i] == keySym) {
|
||||||
|
keyCode = keyTable[i+1];
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
rfbLog("warning: couldn't figure out keycode for X keysym %d (0x%x)\n",
|
||||||
|
(int)keySym, (int)keySym);
|
||||||
|
} else {
|
||||||
|
/* Hopefully I can get away with not specifying a CGCharCode.
|
||||||
|
(Why would you need both?) */
|
||||||
|
CGPostKeyboardEvent((CGCharCode)0, keyCode, down);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
PtrAddEvent(buttonMask, x, y, cl)
|
||||||
|
int buttonMask;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
CGPoint position;
|
||||||
|
|
||||||
|
position.x = x;
|
||||||
|
position.y = y;
|
||||||
|
|
||||||
|
CGPostMouseEvent(position, TRUE, 8,
|
||||||
|
(buttonMask & (1 << 0)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 1)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 2)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 3)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 4)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 5)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 6)) ? TRUE : FALSE,
|
||||||
|
(buttonMask & (1 << 7)) ? TRUE : FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
KbdReleaseAllKeys()
|
||||||
|
{
|
||||||
|
/* Doesn't seem to be possible. */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
refreshCallback(CGRectCount count, const CGRect *rectArray, void *ignore)
|
||||||
|
{
|
||||||
|
BoxRec box;
|
||||||
|
RegionRec region;
|
||||||
|
rfbClientIteratorPtr iterator;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
box.x1 = rectArray[i].origin.x;
|
||||||
|
box.y1 = rectArray[i].origin.y;
|
||||||
|
box.x2 = box.x1 + rectArray[i].size.width;
|
||||||
|
box.y2 = box.y1 + rectArray[i].size.height;
|
||||||
|
|
||||||
|
SAFE_REGION_INIT(&hackScreen, ®ion, &box, 0);
|
||||||
|
|
||||||
|
iterator = rfbGetClientIterator();
|
||||||
|
while ((cl = rfbClientIteratorNext(iterator)) != NULL) {
|
||||||
|
pthread_mutex_lock(&cl->updateMutex);
|
||||||
|
REGION_UNION(&hackScreen,&cl->modifiedRegion,&cl->modifiedRegion,®ion);
|
||||||
|
pthread_cond_signal(&cl->updateCond);
|
||||||
|
pthread_mutex_unlock(&cl->updateMutex);
|
||||||
|
}
|
||||||
|
rfbReleaseClientIterator(iterator);
|
||||||
|
|
||||||
|
REGION_UNINIT(&hackScreen, ®ion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void runEventLoop()
|
||||||
|
{
|
||||||
|
CGRegisterScreenRefreshCallback(refreshCallback, NULL);
|
||||||
|
|
||||||
|
RunApplicationEventLoop();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc,char *argv[])
|
||||||
|
{
|
||||||
|
runVNCServer(argc,argv);
|
||||||
|
}
|
@ -0,0 +1,426 @@
|
|||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifndef false
|
||||||
|
#define false 0
|
||||||
|
#define true -1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
#include <pthread.h>
|
||||||
|
#endif
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_t logMutex;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbLog prints a time-stamped message to the log file (stderr).
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbLog(char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
char buf[256];
|
||||||
|
time_t clock;
|
||||||
|
|
||||||
|
IF_PTHREADS(pthread_mutex_lock(&logMutex));
|
||||||
|
va_start(args, format);
|
||||||
|
|
||||||
|
time(&clock);
|
||||||
|
strftime(buf, 255, "%d/%m/%Y %T ", localtime(&clock));
|
||||||
|
fprintf(stderr, buf);
|
||||||
|
|
||||||
|
vfprintf(stderr, format, args);
|
||||||
|
fflush(stderr);
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
IF_PTHREADS(pthread_mutex_unlock(&logMutex));
|
||||||
|
}
|
||||||
|
|
||||||
|
void rfbLogPerror(char *str)
|
||||||
|
{
|
||||||
|
rfbLog("%s: %s\n", str, strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void rfbMarkRegionAsModified(rfbScreenInfoPtr rfbScreen,RegionPtr modRegion)
|
||||||
|
{
|
||||||
|
rfbClientIteratorPtr iterator;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
iterator=rfbGetClientIterator(rfbScreen);
|
||||||
|
while((cl=rfbClientIteratorNext(iterator))) {
|
||||||
|
REGION_UNION(cl->screen,&cl->modifiedRegion,&cl->modifiedRegion,modRegion);
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbReleaseClientIterator(iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rfbMarkRectAsModified(rfbScreenInfoPtr rfbScreen,int x1,int y1,int x2,int y2)
|
||||||
|
{
|
||||||
|
BoxRec box;
|
||||||
|
RegionRec region;
|
||||||
|
box.x1=x1; box.y1=y1; box.x2=x2; box.y2=y2;
|
||||||
|
REGION_INIT(cl->screen,®ion,&box,0);
|
||||||
|
rfbMarkRegionAsModified(rfbScreen,®ion);
|
||||||
|
}
|
||||||
|
|
||||||
|
int rfbDeferUpdateTime = 40; /* ms */
|
||||||
|
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
static void *
|
||||||
|
clientOutput(void *data)
|
||||||
|
{
|
||||||
|
rfbClientPtr cl = (rfbClientPtr)data;
|
||||||
|
Bool haveUpdate;
|
||||||
|
RegionRec updateRegion;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
haveUpdate = false;
|
||||||
|
pthread_mutex_lock(&cl->updateMutex);
|
||||||
|
while (!haveUpdate) {
|
||||||
|
if (cl->sock == -1) {
|
||||||
|
/* Client has disconnected. */
|
||||||
|
pthread_mutex_unlock(&cl->updateMutex);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
REGION_INIT(&hackScreen, &updateRegion, NullBox, 0);
|
||||||
|
REGION_INTERSECT(&hackScreen, &updateRegion,
|
||||||
|
&cl->modifiedRegion, &cl->requestedRegion);
|
||||||
|
haveUpdate = REGION_NOTEMPTY(&hackScreen, &updateRegion);
|
||||||
|
REGION_UNINIT(&hackScreen, &updateRegion);
|
||||||
|
|
||||||
|
if (!haveUpdate) {
|
||||||
|
pthread_cond_wait(&cl->updateCond, &cl->updateMutex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* OK, now, to save bandwidth, wait a little while for more
|
||||||
|
updates to come along. */
|
||||||
|
pthread_mutex_unlock(&cl->updateMutex);
|
||||||
|
usleep(rfbDeferUpdateTime * 1000);
|
||||||
|
|
||||||
|
/* Now, get the region we're going to update, and remove
|
||||||
|
it from cl->modifiedRegion _before_ we send the update.
|
||||||
|
That way, if anything that overlaps the region we're sending
|
||||||
|
is updated, we'll be sure to do another update later. */
|
||||||
|
pthread_mutex_lock(&cl->updateMutex);
|
||||||
|
REGION_INIT(&hackScreen, &updateRegion, NullBox, 0);
|
||||||
|
REGION_INTERSECT(&hackScreen, &updateRegion,
|
||||||
|
&cl->modifiedRegion, &cl->requestedRegion);
|
||||||
|
REGION_SUBTRACT(&hackScreen, &cl->modifiedRegion,
|
||||||
|
&cl->modifiedRegion, &updateRegion);
|
||||||
|
pthread_mutex_unlock(&cl->updateMutex);
|
||||||
|
|
||||||
|
/* Now actually send the update. */
|
||||||
|
rfbSendFramebufferUpdate(cl, updateRegion);
|
||||||
|
|
||||||
|
REGION_UNINIT(&hackScreen, &updateRegion);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
clientInput(void *data)
|
||||||
|
{
|
||||||
|
rfbClientPtr cl = (rfbClientPtr)data;
|
||||||
|
pthread_t output_thread;
|
||||||
|
pthread_create(&output_thread, NULL, clientOutput, (void *)cl);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
rfbProcessClientMessage(cl);
|
||||||
|
if (cl->sock == -1) {
|
||||||
|
/* Client has disconnected. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get rid of the output thread. */
|
||||||
|
pthread_mutex_lock(&cl->updateMutex);
|
||||||
|
pthread_cond_signal(&cl->updateCond);
|
||||||
|
pthread_mutex_unlock(&cl->updateMutex);
|
||||||
|
pthread_join(output_thread, NULL);
|
||||||
|
|
||||||
|
rfbClientConnectionGone(cl);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void*
|
||||||
|
listenerRun(void *data)
|
||||||
|
{
|
||||||
|
rfbScreenInfoPtr rfbScreen=(rfbScreenInfoPtr)data;
|
||||||
|
int listen_fd, client_fd;
|
||||||
|
struct sockaddr_in sin, peer;
|
||||||
|
pthread_t client_thread;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int len, value;
|
||||||
|
|
||||||
|
sin.sin_family = AF_INET;
|
||||||
|
sin.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
sin.sin_port = htons(rfbScreen->rfbPort ? rfbScreen->rfbPort : 5901);
|
||||||
|
|
||||||
|
if ((listen_fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
value = 1;
|
||||||
|
if (setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR,
|
||||||
|
&value, sizeof(value)) < 0) {
|
||||||
|
rfbLog("setsockopt SO_REUSEADDR failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bind(listen_fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
|
||||||
|
rfbLog("failed to bind socket\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (listen(listen_fd, 5) < 0) {
|
||||||
|
rfbLog("listen failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
len = sizeof(peer);
|
||||||
|
while ((client_fd = accept(listen_fd,
|
||||||
|
(struct sockaddr *)&peer, &len)) >= 0) {
|
||||||
|
cl = rfbNewClient(rfbScreen,client_fd);
|
||||||
|
|
||||||
|
pthread_create(&client_thread, NULL, clientInput, (void *)cl);
|
||||||
|
len = sizeof(peer);
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbLog("accept failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage(void)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "-rfbport port TCP port for RFB protocol\n");
|
||||||
|
fprintf(stderr, "-rfbwait time max time in ms to wait for RFB client\n");
|
||||||
|
fprintf(stderr, "-rfbauth passwd-file use authentication on RFB protocol\n"
|
||||||
|
" (use 'storepasswd' to create a password file)\n");
|
||||||
|
fprintf(stderr, "-deferupdate time time in ms to defer updates "
|
||||||
|
"(default 40)\n");
|
||||||
|
fprintf(stderr, "-desktop name VNC desktop name (default \"LibVNCServer\")\n");
|
||||||
|
fprintf(stderr, "-alwaysshared always treat new clients as shared\n");
|
||||||
|
fprintf(stderr, "-nevershared never treat new clients as shared\n");
|
||||||
|
fprintf(stderr, "-dontdisconnect don't disconnect existing clients when a "
|
||||||
|
"new non-shared\n"
|
||||||
|
" connection comes in (refuse new connection "
|
||||||
|
"instead)\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
processArguments(rfbScreenInfoPtr rfbScreen,int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (strcmp(argv[i], "-rfbport") == 0) { /* -rfbport port */
|
||||||
|
if (i + 1 >= argc) usage();
|
||||||
|
rfbScreen->rfbPort = atoi(argv[++i]);
|
||||||
|
} else if (strcmp(argv[i], "-rfbwait") == 0) { /* -rfbwait ms */
|
||||||
|
if (i + 1 >= argc) usage();
|
||||||
|
rfbScreen->rfbMaxClientWait = atoi(argv[++i]);
|
||||||
|
} else if (strcmp(argv[i], "-rfbauth") == 0) { /* -rfbauth passwd-file */
|
||||||
|
if (i + 1 >= argc) usage();
|
||||||
|
rfbScreen->rfbAuthPasswdFile = argv[++i];
|
||||||
|
} else if (strcmp(argv[i], "-deferupdate") == 0) { /* -deferupdate ms */
|
||||||
|
if (i + 1 >= argc) usage();
|
||||||
|
rfbScreen->rfbDeferUpdateTime = atoi(argv[++i]);
|
||||||
|
} else if (strcmp(argv[i], "-desktop") == 0) { /* -desktop desktop-name */
|
||||||
|
if (i + 1 >= argc) usage();
|
||||||
|
rfbScreen->desktopName = argv[++i];
|
||||||
|
} else if (strcmp(argv[i], "-alwaysshared") == 0) {
|
||||||
|
rfbScreen->rfbAlwaysShared = TRUE;
|
||||||
|
} else if (strcmp(argv[i], "-nevershared") == 0) {
|
||||||
|
rfbScreen->rfbNeverShared = TRUE;
|
||||||
|
} else if (strcmp(argv[i], "-dontdisconnect") == 0) {
|
||||||
|
rfbScreen->rfbDontDisconnect = TRUE;
|
||||||
|
} else {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DefaultKbdAddEvent(down, keySym, cl)
|
||||||
|
Bool down;
|
||||||
|
KeySym keySym;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DefaultPtrAddEvent(buttonMask, x, y, cl)
|
||||||
|
int buttonMask;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DefaultKbdReleaseAllKeys(cl)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DefaultSetXCutText(text,len,cl)
|
||||||
|
char* text;
|
||||||
|
int len;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbScreenInfoPtr rfbDefaultScreenInit(int argc,char** argv)
|
||||||
|
{
|
||||||
|
int bitsPerSample,samplesPerPixel;
|
||||||
|
|
||||||
|
rfbScreenInfoPtr rfbScreen=malloc(sizeof(rfbScreenInfo));
|
||||||
|
rfbScreen->rfbPort=5900;
|
||||||
|
rfbScreen->socketInitDone=FALSE;
|
||||||
|
rfbScreen->inetdSock=-1;
|
||||||
|
rfbScreen->udpSock=-1;
|
||||||
|
rfbScreen->udpSockConnected=FALSE;
|
||||||
|
rfbScreen->maxFd=0;
|
||||||
|
rfbScreen->rfbListenSock=-1;
|
||||||
|
rfbScreen->udpPort=0;
|
||||||
|
rfbScreen->inetdInitDone = FALSE;
|
||||||
|
rfbScreen->desktopName = "LibVNCServer";
|
||||||
|
rfbScreen->rfbAlwaysShared = FALSE;
|
||||||
|
rfbScreen->rfbNeverShared = FALSE;
|
||||||
|
rfbScreen->rfbDontDisconnect = FALSE;
|
||||||
|
|
||||||
|
processArguments(rfbScreen,argc,argv);
|
||||||
|
|
||||||
|
rfbScreen->width = 640;
|
||||||
|
rfbScreen->height = 480;
|
||||||
|
rfbScreen->bitsPerPixel = rfbScreen->depth = 32;
|
||||||
|
gethostname(rfbScreen->rfbThisHost, 255);
|
||||||
|
rfbScreen->paddedWidthInBytes = 640*4;
|
||||||
|
rfbScreen->rfbServerFormat.bitsPerPixel = rfbScreen->bitsPerPixel;
|
||||||
|
rfbScreen->rfbServerFormat.depth = rfbScreen->depth;
|
||||||
|
rfbScreen->rfbServerFormat.bigEndian = !(*(char *)&rfbEndianTest);
|
||||||
|
rfbScreen->rfbServerFormat.trueColour = TRUE;
|
||||||
|
|
||||||
|
bitsPerSample = 8;
|
||||||
|
samplesPerPixel = 3;
|
||||||
|
if (samplesPerPixel != 3) {
|
||||||
|
rfbLog("screen format not supported. exiting.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This works for 16 and 32-bit, but not for 8-bit.
|
||||||
|
What should it be for 8-bit? (Shouldn't 8-bit use a colormap?) */
|
||||||
|
rfbScreen->rfbServerFormat.redMax = (1 << bitsPerSample) - 1;
|
||||||
|
rfbScreen->rfbServerFormat.greenMax = (1 << bitsPerSample) - 1;
|
||||||
|
rfbScreen->rfbServerFormat.blueMax = (1 << bitsPerSample) - 1;
|
||||||
|
rfbScreen->rfbServerFormat.redShift = bitsPerSample * 2;
|
||||||
|
rfbScreen->rfbServerFormat.greenShift = bitsPerSample;
|
||||||
|
rfbScreen->rfbServerFormat.blueShift = 0;
|
||||||
|
|
||||||
|
/* We want to use the X11 REGION_* macros without having an actual
|
||||||
|
X11 ScreenPtr, so we do this. Pretty ugly, but at least it lets us
|
||||||
|
avoid hacking up regionstr.h, or changing every call to REGION_*
|
||||||
|
(which actually I should probably do eventually). */
|
||||||
|
rfbScreen->screen.RegionCreate = miRegionCreate;
|
||||||
|
rfbScreen->screen.RegionInit = miRegionInit;
|
||||||
|
rfbScreen->screen.RegionCopy = miRegionCopy;
|
||||||
|
rfbScreen->screen.RegionDestroy = miRegionDestroy;
|
||||||
|
rfbScreen->screen.RegionUninit = miRegionUninit;
|
||||||
|
rfbScreen->screen.Intersect = miIntersect;
|
||||||
|
rfbScreen->screen.Union = miUnion;
|
||||||
|
rfbScreen->screen.Subtract = miSubtract;
|
||||||
|
rfbScreen->screen.Inverse = miInverse;
|
||||||
|
rfbScreen->screen.RegionReset = miRegionReset;
|
||||||
|
rfbScreen->screen.TranslateRegion = miTranslateRegion;
|
||||||
|
rfbScreen->screen.RectIn = miRectIn;
|
||||||
|
rfbScreen->screen.PointInRegion = miPointInRegion;
|
||||||
|
rfbScreen->screen.RegionNotEmpty = miRegionNotEmpty;
|
||||||
|
rfbScreen->screen.RegionEmpty = miRegionEmpty;
|
||||||
|
rfbScreen->screen.RegionExtents = miRegionExtents;
|
||||||
|
rfbScreen->screen.RegionAppend = miRegionAppend;
|
||||||
|
rfbScreen->screen.RegionValidate = miRegionValidate;
|
||||||
|
|
||||||
|
rfbScreen->kbdAddEvent = DefaultKbdAddEvent;
|
||||||
|
rfbScreen->kbdReleaseAllKeys = DefaultKbdReleaseAllKeys;
|
||||||
|
rfbScreen->ptrAddEvent = DefaultPtrAddEvent;
|
||||||
|
rfbScreen->setXCutText = DefaultSetXCutText;
|
||||||
|
return(rfbScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
processEvents(rfbScreenInfoPtr rfbScreen,long usec)
|
||||||
|
{
|
||||||
|
rfbCheckFds(rfbScreen,usec);
|
||||||
|
//httpCheckFds(rfbScreen);
|
||||||
|
#ifdef CORBA
|
||||||
|
corbaCheckFds(rfbScreen);
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
rfbClientIteratorPtr iterator;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
iterator=rfbGetClientIterator(rfbScreen);
|
||||||
|
while((cl=rfbClientIteratorNext(iterator)))
|
||||||
|
if(cl->sock>=0 && FB_UPDATE_PENDING(cl)) {
|
||||||
|
rfbSendFramebufferUpdate(cl,cl->modifiedRegion);
|
||||||
|
}
|
||||||
|
rfbReleaseClientIterator(iterator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void runEventLoop(rfbScreenInfoPtr rfbScreen, long usec, Bool runInBackground)
|
||||||
|
{
|
||||||
|
if(runInBackground) {
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_t listener_thread;
|
||||||
|
|
||||||
|
rfbClientListInit(rfbScreen);
|
||||||
|
//pthread_mutex_init(&logMutex, NULL);
|
||||||
|
pthread_create(&listener_thread, NULL, listenerRun, rfbScreen);
|
||||||
|
return;
|
||||||
|
#else
|
||||||
|
fprintf(stderr,"Can't run in background, because I don't have PThreads!\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbInitSockets(rfbScreen);
|
||||||
|
while(1)
|
||||||
|
processEvents(rfbScreen,usec);
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,522 @@
|
|||||||
|
/*
|
||||||
|
* rfb.h - header file for RFB DDX implementation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "scrnintstr.h"
|
||||||
|
|
||||||
|
/* trying to replace the above with some more minimal set of includes */
|
||||||
|
#include "misc.h"
|
||||||
|
#include "Xmd.h"
|
||||||
|
#include "regionstr.h"
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
|
#include <rfbproto.h>
|
||||||
|
#include <vncauth.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
#include <pthread.h>
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <endian.h>
|
||||||
|
#else
|
||||||
|
#include <sys/endian.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BYTE_ORDER
|
||||||
|
#define _BYTE_ORDER __BYTE_ORDER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _LITTLE_ENDIAN
|
||||||
|
#define _LITTLE_ENDIAN __LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MAX_ENCODINGS 10
|
||||||
|
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
#define IF_PTHREADS(x) (x)
|
||||||
|
#else
|
||||||
|
#define IF_PTHREADS(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct rfbClientRec;
|
||||||
|
//typedef struct rfbClientInfo* rfbClientPtr;
|
||||||
|
typedef void (*KbdAddEventProcPtr) (Bool down, KeySym keySym, struct rfbClientRec* cl);
|
||||||
|
typedef void (*KbdReleaseAllKeysProcPtr) (struct rfbClientRec* cl);
|
||||||
|
typedef void (*PtrAddEventProcPtr) (int buttonMask, int x, int y, struct rfbClientRec* cl);
|
||||||
|
typedef void (*SetXCutTextProcPtr) (char* str,int len, struct rfbClientRec* cl);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Per-screen (framebuffer) structure. There is only one of these, since we
|
||||||
|
* don't allow the X server to have multiple screens.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int width;
|
||||||
|
int paddedWidthInBytes;
|
||||||
|
int height;
|
||||||
|
int depth;
|
||||||
|
int bitsPerPixel;
|
||||||
|
int sizeInBytes;
|
||||||
|
|
||||||
|
Pixel blackPixel;
|
||||||
|
Pixel whitePixel;
|
||||||
|
|
||||||
|
/* The following two members are used to minimise the amount of unnecessary
|
||||||
|
drawing caused by cursor movement. Whenever any drawing affects the
|
||||||
|
part of the screen where the cursor is, the cursor is removed first and
|
||||||
|
then the drawing is done (this is what the sprite routines test for).
|
||||||
|
Afterwards, however, we do not replace the cursor, even when the cursor
|
||||||
|
is logically being moved across the screen. We only draw the cursor
|
||||||
|
again just as we are about to send the client a framebuffer update.
|
||||||
|
|
||||||
|
We need to be careful when removing and drawing the cursor because of
|
||||||
|
their relationship with the normal drawing routines. The drawing
|
||||||
|
routines can invoke the cursor routines, but also the cursor routines
|
||||||
|
themselves end up invoking drawing routines.
|
||||||
|
|
||||||
|
Removing the cursor (rfbSpriteRemoveCursor) is eventually achieved by
|
||||||
|
doing a CopyArea from a pixmap to the screen, where the pixmap contains
|
||||||
|
the saved contents of the screen under the cursor. Before doing this,
|
||||||
|
however, we set cursorIsDrawn to FALSE. Then, when CopyArea is called,
|
||||||
|
it sees that cursorIsDrawn is FALSE and so doesn't feel the need to
|
||||||
|
(recursively!) remove the cursor before doing it.
|
||||||
|
|
||||||
|
Putting up the cursor (rfbSpriteRestoreCursor) involves a call to
|
||||||
|
PushPixels. While this is happening, cursorIsDrawn must be FALSE so
|
||||||
|
that PushPixels doesn't think it has to remove the cursor first.
|
||||||
|
Obviously cursorIsDrawn is set to TRUE afterwards.
|
||||||
|
|
||||||
|
Another problem we face is that drawing routines sometimes cause a
|
||||||
|
framebuffer update to be sent to the RFB client. When the RFB client is
|
||||||
|
already waiting for a framebuffer update and some drawing to the
|
||||||
|
framebuffer then happens, the drawing routine sees that the client is
|
||||||
|
ready, so it calls rfbSendFramebufferUpdate. If the cursor is not drawn
|
||||||
|
at this stage, it must be put up, and so rfbSpriteRestoreCursor is
|
||||||
|
called. However, if the original drawing routine was actually called
|
||||||
|
from within rfbSpriteRestoreCursor or rfbSpriteRemoveCursor we don't
|
||||||
|
want this to happen. So both the cursor routines set
|
||||||
|
dontSendFramebufferUpdate to TRUE, and all the drawing routines check
|
||||||
|
this before calling rfbSendFramebufferUpdate. */
|
||||||
|
|
||||||
|
Bool cursorIsDrawn; /* TRUE if the cursor is currently drawn */
|
||||||
|
Bool dontSendFramebufferUpdate; /* TRUE while removing or drawing the
|
||||||
|
cursor */
|
||||||
|
|
||||||
|
/* wrapped screen functions */
|
||||||
|
|
||||||
|
CloseScreenProcPtr CloseScreen;
|
||||||
|
CreateGCProcPtr CreateGC;
|
||||||
|
PaintWindowBackgroundProcPtr PaintWindowBackground;
|
||||||
|
PaintWindowBorderProcPtr PaintWindowBorder;
|
||||||
|
CopyWindowProcPtr CopyWindow;
|
||||||
|
ClearToBackgroundProcPtr ClearToBackground;
|
||||||
|
RestoreAreasProcPtr RestoreAreas;
|
||||||
|
|
||||||
|
/* additions by libvncserver */
|
||||||
|
|
||||||
|
ScreenRec screen;
|
||||||
|
rfbPixelFormat rfbServerFormat;
|
||||||
|
char* desktopName;
|
||||||
|
char rfbThisHost[255];
|
||||||
|
int rfbPort;
|
||||||
|
Bool socketInitDone;
|
||||||
|
int inetdSock;
|
||||||
|
int maxSock;
|
||||||
|
int maxFd;
|
||||||
|
int rfbListenSock;
|
||||||
|
int udpPort;
|
||||||
|
int udpSock;
|
||||||
|
Bool udpSockConnected;
|
||||||
|
struct sockaddr_in udpRemoteAddr;
|
||||||
|
Bool inetdInitDone;
|
||||||
|
fd_set allFds;
|
||||||
|
int rfbMaxClientWait;
|
||||||
|
char* rfbAuthPasswdFile;
|
||||||
|
int rfbDeferUpdateTime;
|
||||||
|
char* rfbScreen;
|
||||||
|
Bool rfbAlwaysShared;
|
||||||
|
Bool rfbNeverShared;
|
||||||
|
Bool rfbDontDisconnect;
|
||||||
|
struct rfbClientRec* rfbClientHead;
|
||||||
|
|
||||||
|
/* the following members have to be supplied by the serving process */
|
||||||
|
char* frameBuffer;
|
||||||
|
KbdAddEventProcPtr kbdAddEvent;
|
||||||
|
KbdReleaseAllKeysProcPtr kbdReleaseAllKeys;
|
||||||
|
PtrAddEventProcPtr ptrAddEvent;
|
||||||
|
SetXCutTextProcPtr setXCutText;
|
||||||
|
} rfbScreenInfo, *rfbScreenInfoPtr;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbTranslateFnType is the type of translation functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct rfbClientRec;
|
||||||
|
typedef void (*rfbTranslateFnType)(char *table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out,
|
||||||
|
char *iptr, char *optr,
|
||||||
|
int bytesBetweenInputLines,
|
||||||
|
int width, int height);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Per-client structure.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct rfbClientRec {
|
||||||
|
rfbScreenInfoPtr screen;
|
||||||
|
|
||||||
|
int sock;
|
||||||
|
char *host;
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_t outputMutex;
|
||||||
|
#endif
|
||||||
|
/* Possible client states: */
|
||||||
|
enum {
|
||||||
|
RFB_PROTOCOL_VERSION, /* establishing protocol version */
|
||||||
|
RFB_AUTHENTICATION, /* authenticating */
|
||||||
|
RFB_INITIALISATION, /* sending initialisation messages */
|
||||||
|
RFB_NORMAL /* normal protocol messages */
|
||||||
|
} state;
|
||||||
|
|
||||||
|
Bool reverseConnection;
|
||||||
|
|
||||||
|
Bool readyForSetColourMapEntries;
|
||||||
|
|
||||||
|
Bool useCopyRect;
|
||||||
|
int preferredEncoding;
|
||||||
|
int correMaxWidth, correMaxHeight;
|
||||||
|
|
||||||
|
/* The following member is only used during VNC authentication */
|
||||||
|
|
||||||
|
CARD8 authChallenge[CHALLENGESIZE];
|
||||||
|
|
||||||
|
/* The following members represent the update needed to get the client's
|
||||||
|
framebuffer from its present state to the current state of our
|
||||||
|
framebuffer.
|
||||||
|
|
||||||
|
If the client does not accept CopyRect encoding then the update is
|
||||||
|
simply represented as the region of the screen which has been modified
|
||||||
|
(modifiedRegion).
|
||||||
|
|
||||||
|
If the client does accept CopyRect encoding, then the update consists of
|
||||||
|
two parts. First we have a single copy from one region of the screen to
|
||||||
|
another (the destination of the copy is copyRegion), and second we have
|
||||||
|
the region of the screen which has been modified in some other way
|
||||||
|
(modifiedRegion).
|
||||||
|
|
||||||
|
Although the copy is of a single region, this region may have many
|
||||||
|
rectangles. When sending an update, the copyRegion is always sent
|
||||||
|
before the modifiedRegion. This is because the modifiedRegion may
|
||||||
|
overlap parts of the screen which are in the source of the copy.
|
||||||
|
|
||||||
|
In fact during normal processing, the modifiedRegion may even overlap
|
||||||
|
the destination copyRegion. Just before an update is sent we remove
|
||||||
|
from the copyRegion anything in the modifiedRegion. */
|
||||||
|
|
||||||
|
RegionRec copyRegion; /* the destination region of the copy */
|
||||||
|
int copyDX, copyDY; /* the translation by which the copy happens */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_t updateMutex;
|
||||||
|
pthread_cond_t updateCond;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
RegionRec modifiedRegion;
|
||||||
|
|
||||||
|
/* As part of the FramebufferUpdateRequest, a client can express interest
|
||||||
|
in a subrectangle of the whole framebuffer. This is stored in the
|
||||||
|
requestedRegion member. In the normal case this is the whole
|
||||||
|
framebuffer if the client is ready, empty if it's not. */
|
||||||
|
|
||||||
|
RegionRec requestedRegion;
|
||||||
|
|
||||||
|
/* The following members represent the state of the "deferred update" timer
|
||||||
|
- when the framebuffer is modified and the client is ready, in most
|
||||||
|
cases it is more efficient to defer sending the update by a few
|
||||||
|
milliseconds so that several changes to the framebuffer can be combined
|
||||||
|
into a single update. */
|
||||||
|
|
||||||
|
Bool deferredUpdateScheduled;
|
||||||
|
OsTimerPtr deferredUpdateTimer;
|
||||||
|
|
||||||
|
/* translateFn points to the translation function which is used to copy
|
||||||
|
and translate a rectangle from the framebuffer to an output buffer. */
|
||||||
|
|
||||||
|
rfbTranslateFnType translateFn;
|
||||||
|
|
||||||
|
char *translateLookupTable;
|
||||||
|
|
||||||
|
rfbPixelFormat format;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* UPDATE_BUF_SIZE must be big enough to send at least one whole line of the
|
||||||
|
* framebuffer. So for a max screen width of say 2K with 32-bit pixels this
|
||||||
|
* means 8K minimum.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define UPDATE_BUF_SIZE 30000
|
||||||
|
|
||||||
|
char updateBuf[UPDATE_BUF_SIZE];
|
||||||
|
int ublen;
|
||||||
|
|
||||||
|
/* statistics */
|
||||||
|
|
||||||
|
int rfbBytesSent[MAX_ENCODINGS];
|
||||||
|
int rfbRectanglesSent[MAX_ENCODINGS];
|
||||||
|
int rfbLastRectMarkersSent;
|
||||||
|
int rfbLastRectBytesSent;
|
||||||
|
int rfbCursorBytesSent;
|
||||||
|
int rfbCursorUpdatesSent;
|
||||||
|
int rfbFramebufferUpdateMessagesSent;
|
||||||
|
int rfbRawBytesEquivalent;
|
||||||
|
int rfbKeyEventsRcvd;
|
||||||
|
int rfbPointerEventsRcvd;
|
||||||
|
|
||||||
|
/* zlib encoding -- necessary compression state info per client */
|
||||||
|
|
||||||
|
struct z_stream_s compStream;
|
||||||
|
Bool compStreamInited;
|
||||||
|
|
||||||
|
CARD32 zlibCompressLevel;
|
||||||
|
|
||||||
|
/* tight encoding -- preserve zlib streams' state for each client */
|
||||||
|
|
||||||
|
z_stream zsStruct[4];
|
||||||
|
Bool zsActive[4];
|
||||||
|
int zsLevel[4];
|
||||||
|
int tightCompressLevel;
|
||||||
|
int tightQualityLevel;
|
||||||
|
|
||||||
|
Bool enableLastRectEncoding; /* client supports LastRect encoding */
|
||||||
|
Bool enableCursorShapeUpdates; /* client supports cursor shape updates */
|
||||||
|
Bool useRichCursorEncoding; /* rfbEncodingRichCursor is preferred */
|
||||||
|
Bool cursorWasChanged; /* cursor shape update should be sent */
|
||||||
|
|
||||||
|
struct rfbClientRec *prev;
|
||||||
|
struct rfbClientRec *next;
|
||||||
|
|
||||||
|
} rfbClientRec, *rfbClientPtr;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This macro is used to test whether there is a framebuffer update needing to
|
||||||
|
* be sent to the client.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FB_UPDATE_PENDING(cl) \
|
||||||
|
((!(cl)->enableCursorShapeUpdates && !(cl)->screen->cursorIsDrawn) || \
|
||||||
|
((cl)->enableCursorShapeUpdates && (cl)->cursorWasChanged) || \
|
||||||
|
REGION_NOTEMPTY(&((cl)->screenInfo->screen),&(cl)->copyRegion) || \
|
||||||
|
REGION_NOTEMPTY(&((cl)->screenInfo->screen),&(cl)->modifiedRegion))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This macro creates an empty region (ie. a region with no areas) if it is
|
||||||
|
* given a rectangle with a width or height of zero. It appears that
|
||||||
|
* REGION_INTERSECT does not quite do the right thing with zero-width
|
||||||
|
* rectangles, but it should with completely empty regions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SAFE_REGION_INIT(pscreen, preg, rect, size) \
|
||||||
|
{ \
|
||||||
|
if ( ( (rect) ) && \
|
||||||
|
( ( (rect)->x2 == (rect)->x1 ) || \
|
||||||
|
( (rect)->y2 == (rect)->y1 ) ) ) { \
|
||||||
|
REGION_INIT( (pscreen), (preg), NullBox, 0 ); \
|
||||||
|
} else { \
|
||||||
|
REGION_INIT( (pscreen), (preg), (rect), (size) ); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros for endian swapping.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define Swap16(s) ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff))
|
||||||
|
|
||||||
|
#define Swap32(l) (((l) >> 24) | \
|
||||||
|
(((l) & 0x00ff0000) >> 8) | \
|
||||||
|
(((l) & 0x0000ff00) << 8) | \
|
||||||
|
((l) << 24))
|
||||||
|
|
||||||
|
|
||||||
|
static const int rfbEndianTest = (_BYTE_ORDER == _LITTLE_ENDIAN);
|
||||||
|
|
||||||
|
#define Swap16IfLE(s) (*(const char *)&rfbEndianTest ? Swap16(s) : (s))
|
||||||
|
|
||||||
|
#define Swap32IfLE(l) (*(const char *)&rfbEndianTest ? Swap32(l) : (l))
|
||||||
|
|
||||||
|
/* main.c */
|
||||||
|
|
||||||
|
extern void rfbLog(char *format, ...);
|
||||||
|
extern void rfbLogPerror(char *str);
|
||||||
|
extern int runVNCServer(int argc, char *argv[]);
|
||||||
|
|
||||||
|
|
||||||
|
/* sockets.c */
|
||||||
|
|
||||||
|
extern int rfbMaxClientWait;
|
||||||
|
|
||||||
|
extern void rfbCloseClient(rfbClientPtr cl);
|
||||||
|
extern int ReadExact(rfbClientPtr cl, char *buf, int len);
|
||||||
|
extern int WriteExact(rfbClientPtr cl, char *buf, int len);
|
||||||
|
extern void rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec);
|
||||||
|
extern int ListenOnTCPPort(int port);
|
||||||
|
extern int ListenOnUDPPort(int port);
|
||||||
|
|
||||||
|
/* rfbserver.c */
|
||||||
|
|
||||||
|
extern rfbClientPtr pointerClient;
|
||||||
|
|
||||||
|
|
||||||
|
/* Routines to iterate over the client list in a thread-safe way.
|
||||||
|
Only a single iterator can be in use at a time process-wide. */
|
||||||
|
typedef struct rfbClientIterator *rfbClientIteratorPtr;
|
||||||
|
|
||||||
|
extern void rfbClientListInit(rfbScreenInfoPtr rfbScreen);
|
||||||
|
extern rfbClientIteratorPtr rfbGetClientIterator(rfbScreenInfoPtr rfbScreen);
|
||||||
|
extern rfbClientPtr rfbClientIteratorNext(rfbClientIteratorPtr iterator);
|
||||||
|
extern void rfbReleaseClientIterator(rfbClientIteratorPtr iterator);
|
||||||
|
|
||||||
|
extern void rfbNewClientConnection(rfbScreenInfoPtr rfbScreen,int sock);
|
||||||
|
extern rfbClientPtr rfbNewClient(rfbScreenInfoPtr rfbScreen,int sock);
|
||||||
|
extern rfbClientPtr rfbReverseConnection(char *host, int port);
|
||||||
|
extern void rfbClientConnectionGone(rfbClientPtr cl);
|
||||||
|
extern void rfbProcessClientMessage(rfbClientPtr cl);
|
||||||
|
extern void rfbClientConnFailed(rfbClientPtr cl, char *reason);
|
||||||
|
extern void rfbNewUDPConnection(rfbScreenInfoPtr rfbScreen,int sock);
|
||||||
|
extern void rfbProcessUDPInput(rfbClientPtr cl);
|
||||||
|
extern Bool rfbSendFramebufferUpdate(rfbClientPtr cl, RegionRec updateRegion);
|
||||||
|
extern Bool rfbSendRectEncodingRaw(rfbClientPtr cl, int x,int y,int w,int h);
|
||||||
|
extern Bool rfbSendUpdateBuf(rfbClientPtr cl);
|
||||||
|
extern void rfbSendServerCutText(rfbScreenInfoPtr rfbScreen,char *str, int len);
|
||||||
|
|
||||||
|
void rfbGotXCutText(rfbScreenInfoPtr rfbScreen, char *str, int len);
|
||||||
|
|
||||||
|
/* translate.c */
|
||||||
|
|
||||||
|
extern Bool rfbEconomicTranslate;
|
||||||
|
|
||||||
|
extern void rfbTranslateNone(char *table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out,
|
||||||
|
char *iptr, char *optr,
|
||||||
|
int bytesBetweenInputLines,
|
||||||
|
int width, int height);
|
||||||
|
extern Bool rfbSetTranslateFunction(rfbClientPtr cl);
|
||||||
|
|
||||||
|
|
||||||
|
/* httpd.c */
|
||||||
|
|
||||||
|
extern int httpPort;
|
||||||
|
extern char *httpDir;
|
||||||
|
|
||||||
|
extern void httpInitSockets();
|
||||||
|
extern void httpCheckFds();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* auth.c */
|
||||||
|
|
||||||
|
extern char *rfbAuthPasswdFile;
|
||||||
|
extern Bool rfbAuthenticating;
|
||||||
|
|
||||||
|
extern void rfbAuthNewClient(rfbClientPtr cl);
|
||||||
|
extern void rfbAuthProcessClientMessage(rfbClientPtr cl);
|
||||||
|
|
||||||
|
|
||||||
|
/* rre.c */
|
||||||
|
|
||||||
|
extern Bool rfbSendRectEncodingRRE(rfbClientPtr cl, int x,int y,int w,int h);
|
||||||
|
|
||||||
|
|
||||||
|
/* corre.c */
|
||||||
|
|
||||||
|
extern Bool rfbSendRectEncodingCoRRE(rfbClientPtr cl, int x,int y,int w,int h);
|
||||||
|
|
||||||
|
|
||||||
|
/* hextile.c */
|
||||||
|
|
||||||
|
extern Bool rfbSendRectEncodingHextile(rfbClientPtr cl, int x, int y, int w,
|
||||||
|
int h);
|
||||||
|
|
||||||
|
|
||||||
|
/* zlib.c */
|
||||||
|
|
||||||
|
/* Minimum zlib rectangle size in bytes. Anything smaller will
|
||||||
|
* not compress well due to overhead.
|
||||||
|
*/
|
||||||
|
#define VNC_ENCODE_ZLIB_MIN_COMP_SIZE (17)
|
||||||
|
|
||||||
|
/* Set maximum zlib rectangle size in pixels. Always allow at least
|
||||||
|
* two scan lines.
|
||||||
|
*/
|
||||||
|
#define ZLIB_MAX_RECT_SIZE (128*256)
|
||||||
|
#define ZLIB_MAX_SIZE(min) ((( min * 2 ) > ZLIB_MAX_RECT_SIZE ) ? \
|
||||||
|
( min * 2 ) : ZLIB_MAX_RECT_SIZE )
|
||||||
|
|
||||||
|
extern Bool rfbSendRectEncodingZlib(rfbClientPtr cl, int x, int y, int w,
|
||||||
|
int h);
|
||||||
|
|
||||||
|
|
||||||
|
/* tight.c */
|
||||||
|
|
||||||
|
#define TIGHT_DEFAULT_COMPRESSION 6
|
||||||
|
|
||||||
|
extern Bool rfbTightDisableGradient;
|
||||||
|
|
||||||
|
extern int rfbNumCodedRectsTight(rfbClientPtr cl, int x,int y,int w,int h);
|
||||||
|
extern Bool rfbSendRectEncodingTight(rfbClientPtr cl, int x,int y,int w,int h);
|
||||||
|
|
||||||
|
|
||||||
|
/* cursor.c */
|
||||||
|
|
||||||
|
extern Bool rfbSendCursorShape(rfbClientPtr cl, ScreenPtr pScreen);
|
||||||
|
|
||||||
|
|
||||||
|
/* stats.c */
|
||||||
|
|
||||||
|
extern void rfbResetStats(rfbClientPtr cl);
|
||||||
|
extern void rfbPrintStats(rfbClientPtr cl);
|
||||||
|
|
||||||
|
extern void rfbInitSockets(rfbScreenInfoPtr rfbScreen);
|
||||||
|
extern void rfbDisconnectUDPSock(rfbScreenInfoPtr cl);
|
||||||
|
|
||||||
|
void rfbMarkRectAsModified(rfbScreenInfoPtr rfbScreen,int x1,int y1,int x2,int y2);
|
||||||
|
void rfbMarkRegionAsModified(rfbScreenInfoPtr rfbScreen,RegionPtr modRegion);
|
||||||
|
|
||||||
|
|
||||||
|
/* functions to make a vnc server */
|
||||||
|
extern rfbScreenInfoPtr rfbDefaultScreenInit(int argc,char** argv);
|
||||||
|
extern void rfbScreenCleanup(rfbScreenInfoPtr screenInfo);
|
||||||
|
|
||||||
|
/* call one of these two functions to service the vnc clients.
|
||||||
|
usec are the microseconds the select on the fds waits.
|
||||||
|
if you are using the event loop, set this to some value > 0. */
|
||||||
|
|
||||||
|
extern void runEventLoop(rfbScreenInfoPtr screenInfo, long usec, Bool runInBackground);
|
||||||
|
extern void processEvents(rfbScreenInfoPtr screenInfo,long usec);
|
@ -0,0 +1,785 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2000, 2001 Const Kaplinsky. All Rights Reserved.
|
||||||
|
* Copyright (C) 2000 Tridia Corporation. All Rights Reserved.
|
||||||
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbproto.h - header file for the RFB protocol version 3.3
|
||||||
|
*
|
||||||
|
* Uses types CARD<n> for an n-bit unsigned integer, INT<n> for an n-bit signed
|
||||||
|
* integer (for n = 8, 16 and 32).
|
||||||
|
*
|
||||||
|
* All multiple byte integers are in big endian (network) order (most
|
||||||
|
* significant byte first). Unless noted otherwise there is no special
|
||||||
|
* alignment of protocol structures.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Once the initial handshaking is done, all messages start with a type byte,
|
||||||
|
* (usually) followed by message-specific data. The order of definitions in
|
||||||
|
* this file is as follows:
|
||||||
|
*
|
||||||
|
* (1) Structures used in several types of message.
|
||||||
|
* (2) Structures used in the initial handshaking.
|
||||||
|
* (3) Message types.
|
||||||
|
* (4) Encoding types.
|
||||||
|
* (5) For each message type, the form of the data following the type byte.
|
||||||
|
* Sometimes this is defined by a single structure but the more complex
|
||||||
|
* messages have to be explained by comments.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Structures used in several messages
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Structure used to specify a rectangle. This structure is a multiple of 4
|
||||||
|
* bytes so that it can be interspersed with 32-bit pixel data without
|
||||||
|
* affecting alignment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD16 x;
|
||||||
|
CARD16 y;
|
||||||
|
CARD16 w;
|
||||||
|
CARD16 h;
|
||||||
|
} rfbRectangle;
|
||||||
|
|
||||||
|
#define sz_rfbRectangle 8
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Structure used to specify pixel format.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
|
||||||
|
CARD8 bitsPerPixel; /* 8,16,32 only */
|
||||||
|
|
||||||
|
CARD8 depth; /* 8 to 32 */
|
||||||
|
|
||||||
|
CARD8 bigEndian; /* True if multi-byte pixels are interpreted
|
||||||
|
as big endian, or if single-bit-per-pixel
|
||||||
|
has most significant bit of the byte
|
||||||
|
corresponding to first (leftmost) pixel. Of
|
||||||
|
course this is meaningless for 8 bits/pix */
|
||||||
|
|
||||||
|
CARD8 trueColour; /* If false then we need a "colour map" to
|
||||||
|
convert pixels to RGB. If true, xxxMax and
|
||||||
|
xxxShift specify bits used for red, green
|
||||||
|
and blue */
|
||||||
|
|
||||||
|
/* the following fields are only meaningful if trueColour is true */
|
||||||
|
|
||||||
|
CARD16 redMax; /* maximum red value (= 2^n - 1 where n is the
|
||||||
|
number of bits used for red). Note this
|
||||||
|
value is always in big endian order. */
|
||||||
|
|
||||||
|
CARD16 greenMax; /* similar for green */
|
||||||
|
|
||||||
|
CARD16 blueMax; /* and blue */
|
||||||
|
|
||||||
|
CARD8 redShift; /* number of shifts needed to get the red
|
||||||
|
value in a pixel to the least significant
|
||||||
|
bit. To find the red value from a given
|
||||||
|
pixel, do the following:
|
||||||
|
1) Swap pixel value according to bigEndian
|
||||||
|
(e.g. if bigEndian is false and host byte
|
||||||
|
order is big endian, then swap).
|
||||||
|
2) Shift right by redShift.
|
||||||
|
3) AND with redMax (in host byte order).
|
||||||
|
4) You now have the red value between 0 and
|
||||||
|
redMax. */
|
||||||
|
|
||||||
|
CARD8 greenShift; /* similar for green */
|
||||||
|
|
||||||
|
CARD8 blueShift; /* and blue */
|
||||||
|
|
||||||
|
CARD8 pad1;
|
||||||
|
CARD16 pad2;
|
||||||
|
|
||||||
|
} rfbPixelFormat;
|
||||||
|
|
||||||
|
#define sz_rfbPixelFormat 16
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Initial handshaking messages
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Protocol Version
|
||||||
|
*
|
||||||
|
* The server always sends 12 bytes to start which identifies the latest RFB
|
||||||
|
* protocol version number which it supports. These bytes are interpreted
|
||||||
|
* as a string of 12 ASCII characters in the format "RFB xxx.yyy\n" where
|
||||||
|
* xxx and yyy are the major and minor version numbers (for version 3.3
|
||||||
|
* this is "RFB 003.003\n").
|
||||||
|
*
|
||||||
|
* The client then replies with a similar 12-byte message giving the version
|
||||||
|
* number of the protocol which should actually be used (which may be different
|
||||||
|
* to that quoted by the server).
|
||||||
|
*
|
||||||
|
* It is intended that both clients and servers may provide some level of
|
||||||
|
* backwards compatibility by this mechanism. Servers in particular should
|
||||||
|
* attempt to provide backwards compatibility, and even forwards compatibility
|
||||||
|
* to some extent. For example if a client demands version 3.1 of the
|
||||||
|
* protocol, a 3.0 server can probably assume that by ignoring requests for
|
||||||
|
* encoding types it doesn't understand, everything will still work OK. This
|
||||||
|
* will probably not be the case for changes in the major version number.
|
||||||
|
*
|
||||||
|
* The format string below can be used in sprintf or sscanf to generate or
|
||||||
|
* decode the version string respectively.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define rfbProtocolVersionFormat "RFB %03d.%03d\n"
|
||||||
|
#define rfbProtocolMajorVersion 3
|
||||||
|
#define rfbProtocolMinorVersion 3
|
||||||
|
|
||||||
|
typedef char rfbProtocolVersionMsg[13]; /* allow extra byte for null */
|
||||||
|
|
||||||
|
#define sz_rfbProtocolVersionMsg 12
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Authentication
|
||||||
|
*
|
||||||
|
* Once the protocol version has been decided, the server then sends a 32-bit
|
||||||
|
* word indicating whether any authentication is needed on the connection.
|
||||||
|
* The value of this word determines the authentication scheme in use. For
|
||||||
|
* version 3.0 of the protocol this may have one of the following values:
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define rfbConnFailed 0
|
||||||
|
#define rfbNoAuth 1
|
||||||
|
#define rfbVncAuth 2
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbConnFailed: For some reason the connection failed (e.g. the server
|
||||||
|
* cannot support the desired protocol version). This is
|
||||||
|
* followed by a string describing the reason (where a
|
||||||
|
* string is specified as a 32-bit length followed by that
|
||||||
|
* many ASCII characters).
|
||||||
|
*
|
||||||
|
* rfbNoAuth: No authentication is needed.
|
||||||
|
*
|
||||||
|
* rfbVncAuth: The VNC authentication scheme is to be used. A 16-byte
|
||||||
|
* challenge follows, which the client encrypts as
|
||||||
|
* appropriate using the password and sends the resulting
|
||||||
|
* 16-byte response. If the response is correct, the
|
||||||
|
* server sends the 32-bit word rfbVncAuthOK. If a simple
|
||||||
|
* failure happens, the server sends rfbVncAuthFailed and
|
||||||
|
* closes the connection. If the server decides that too
|
||||||
|
* many failures have occurred, it sends rfbVncAuthTooMany
|
||||||
|
* and closes the connection. In the latter case, the
|
||||||
|
* server should not allow an immediate reconnection by
|
||||||
|
* the client.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define rfbVncAuthOK 0
|
||||||
|
#define rfbVncAuthFailed 1
|
||||||
|
#define rfbVncAuthTooMany 2
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Client Initialisation Message
|
||||||
|
*
|
||||||
|
* Once the client and server are sure that they're happy to talk to one
|
||||||
|
* another, the client sends an initialisation message. At present this
|
||||||
|
* message only consists of a boolean indicating whether the server should try
|
||||||
|
* to share the desktop by leaving other clients connected, or give exclusive
|
||||||
|
* access to this client by disconnecting all other clients.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 shared;
|
||||||
|
} rfbClientInitMsg;
|
||||||
|
|
||||||
|
#define sz_rfbClientInitMsg 1
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Server Initialisation Message
|
||||||
|
*
|
||||||
|
* After the client initialisation message, the server sends one of its own.
|
||||||
|
* This tells the client the width and height of the server's framebuffer,
|
||||||
|
* its pixel format and the name associated with the desktop.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD16 framebufferWidth;
|
||||||
|
CARD16 framebufferHeight;
|
||||||
|
rfbPixelFormat format; /* the server's preferred pixel format */
|
||||||
|
CARD32 nameLength;
|
||||||
|
/* followed by char name[nameLength] */
|
||||||
|
} rfbServerInitMsg;
|
||||||
|
|
||||||
|
#define sz_rfbServerInitMsg (8 + sz_rfbPixelFormat)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Following the server initialisation message it's up to the client to send
|
||||||
|
* whichever protocol messages it wants. Typically it will send a
|
||||||
|
* SetPixelFormat message and a SetEncodings message, followed by a
|
||||||
|
* FramebufferUpdateRequest. From then on the server will send
|
||||||
|
* FramebufferUpdate messages in response to the client's
|
||||||
|
* FramebufferUpdateRequest messages. The client should send
|
||||||
|
* FramebufferUpdateRequest messages with incremental set to true when it has
|
||||||
|
* finished processing one FramebufferUpdate and is ready to process another.
|
||||||
|
* With a fast client, the rate at which FramebufferUpdateRequests are sent
|
||||||
|
* should be regulated to avoid hogging the network.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Message types
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/* server -> client */
|
||||||
|
|
||||||
|
#define rfbFramebufferUpdate 0
|
||||||
|
#define rfbSetColourMapEntries 1
|
||||||
|
#define rfbBell 2
|
||||||
|
#define rfbServerCutText 3
|
||||||
|
|
||||||
|
|
||||||
|
/* client -> server */
|
||||||
|
|
||||||
|
#define rfbSetPixelFormat 0
|
||||||
|
#define rfbFixColourMapEntries 1 /* not currently supported */
|
||||||
|
#define rfbSetEncodings 2
|
||||||
|
#define rfbFramebufferUpdateRequest 3
|
||||||
|
#define rfbKeyEvent 4
|
||||||
|
#define rfbPointerEvent 5
|
||||||
|
#define rfbClientCutText 6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Encoding types
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#define rfbEncodingRaw 0
|
||||||
|
#define rfbEncodingCopyRect 1
|
||||||
|
#define rfbEncodingRRE 2
|
||||||
|
#define rfbEncodingCoRRE 4
|
||||||
|
#define rfbEncodingHextile 5
|
||||||
|
#define rfbEncodingZlib 6
|
||||||
|
#define rfbEncodingTight 7
|
||||||
|
#define rfbEncodingZlibHex 8
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Special encoding numbers:
|
||||||
|
* 0xFFFFFF00 .. 0xFFFFFF0F -- encoding-specific compression levels;
|
||||||
|
* 0xFFFFFF10 .. 0xFFFFFF1F -- mouse cursor shape data;
|
||||||
|
* 0xFFFFFF20 .. 0xFFFFFF2F -- various protocol extensions;
|
||||||
|
* 0xFFFFFF30 .. 0xFFFFFFDF -- not allocated yet;
|
||||||
|
* 0xFFFFFFE0 .. 0xFFFFFFEF -- quality level for JPEG compressor;
|
||||||
|
* 0xFFFFFFF0 .. 0xFFFFFFFF -- cross-encoding compression levels.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define rfbEncodingCompressLevel0 0xFFFFFF00
|
||||||
|
#define rfbEncodingCompressLevel1 0xFFFFFF01
|
||||||
|
#define rfbEncodingCompressLevel2 0xFFFFFF02
|
||||||
|
#define rfbEncodingCompressLevel3 0xFFFFFF03
|
||||||
|
#define rfbEncodingCompressLevel4 0xFFFFFF04
|
||||||
|
#define rfbEncodingCompressLevel5 0xFFFFFF05
|
||||||
|
#define rfbEncodingCompressLevel6 0xFFFFFF06
|
||||||
|
#define rfbEncodingCompressLevel7 0xFFFFFF07
|
||||||
|
#define rfbEncodingCompressLevel8 0xFFFFFF08
|
||||||
|
#define rfbEncodingCompressLevel9 0xFFFFFF09
|
||||||
|
|
||||||
|
#define rfbEncodingXCursor 0xFFFFFF10
|
||||||
|
#define rfbEncodingRichCursor 0xFFFFFF11
|
||||||
|
|
||||||
|
#define rfbEncodingLastRect 0xFFFFFF20
|
||||||
|
|
||||||
|
#define rfbEncodingQualityLevel0 0xFFFFFFE0
|
||||||
|
#define rfbEncodingQualityLevel1 0xFFFFFFE1
|
||||||
|
#define rfbEncodingQualityLevel2 0xFFFFFFE2
|
||||||
|
#define rfbEncodingQualityLevel3 0xFFFFFFE3
|
||||||
|
#define rfbEncodingQualityLevel4 0xFFFFFFE4
|
||||||
|
#define rfbEncodingQualityLevel5 0xFFFFFFE5
|
||||||
|
#define rfbEncodingQualityLevel6 0xFFFFFFE6
|
||||||
|
#define rfbEncodingQualityLevel7 0xFFFFFFE7
|
||||||
|
#define rfbEncodingQualityLevel8 0xFFFFFFE8
|
||||||
|
#define rfbEncodingQualityLevel9 0xFFFFFFE9
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Server -> client message definitions
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* FramebufferUpdate - a block of rectangles to be copied to the framebuffer.
|
||||||
|
*
|
||||||
|
* This message consists of a header giving the number of rectangles of pixel
|
||||||
|
* data followed by the rectangles themselves. The header is padded so that
|
||||||
|
* together with the type byte it is an exact multiple of 4 bytes (to help
|
||||||
|
* with alignment of 32-bit pixels):
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbFramebufferUpdate */
|
||||||
|
CARD8 pad;
|
||||||
|
CARD16 nRects;
|
||||||
|
/* followed by nRects rectangles */
|
||||||
|
} rfbFramebufferUpdateMsg;
|
||||||
|
|
||||||
|
#define sz_rfbFramebufferUpdateMsg 4
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Each rectangle of pixel data consists of a header describing the position
|
||||||
|
* and size of the rectangle and a type word describing the encoding of the
|
||||||
|
* pixel data, followed finally by the pixel data. Note that if the client has
|
||||||
|
* not sent a SetEncodings message then it will only receive raw pixel data.
|
||||||
|
* Also note again that this structure is a multiple of 4 bytes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
rfbRectangle r;
|
||||||
|
CARD32 encoding; /* one of the encoding types rfbEncoding... */
|
||||||
|
} rfbFramebufferUpdateRectHeader;
|
||||||
|
|
||||||
|
#define sz_rfbFramebufferUpdateRectHeader (sz_rfbRectangle + 4)
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* Raw Encoding. Pixels are sent in top-to-bottom scanline order,
|
||||||
|
* left-to-right within a scanline with no padding in between.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* CopyRect Encoding. The pixels are specified simply by the x and y position
|
||||||
|
* of the source rectangle.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD16 srcX;
|
||||||
|
CARD16 srcY;
|
||||||
|
} rfbCopyRect;
|
||||||
|
|
||||||
|
#define sz_rfbCopyRect 4
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* RRE - Rise-and-Run-length Encoding. We have an rfbRREHeader structure
|
||||||
|
* giving the number of subrectangles following. Finally the data follows in
|
||||||
|
* the form [<bgpixel><subrect><subrect>...] where each <subrect> is
|
||||||
|
* [<pixel><rfbRectangle>].
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD32 nSubrects;
|
||||||
|
} rfbRREHeader;
|
||||||
|
|
||||||
|
#define sz_rfbRREHeader 4
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* CoRRE - Compact RRE Encoding. We have an rfbRREHeader structure giving
|
||||||
|
* the number of subrectangles following. Finally the data follows in the form
|
||||||
|
* [<bgpixel><subrect><subrect>...] where each <subrect> is
|
||||||
|
* [<pixel><rfbCoRRERectangle>]. This means that
|
||||||
|
* the whole rectangle must be at most 255x255 pixels.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 x;
|
||||||
|
CARD8 y;
|
||||||
|
CARD8 w;
|
||||||
|
CARD8 h;
|
||||||
|
} rfbCoRRERectangle;
|
||||||
|
|
||||||
|
#define sz_rfbCoRRERectangle 4
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* Hextile Encoding. The rectangle is divided up into "tiles" of 16x16 pixels,
|
||||||
|
* starting at the top left going in left-to-right, top-to-bottom order. If
|
||||||
|
* the width of the rectangle is not an exact multiple of 16 then the width of
|
||||||
|
* the last tile in each row will be correspondingly smaller. Similarly if the
|
||||||
|
* height is not an exact multiple of 16 then the height of each tile in the
|
||||||
|
* final row will also be smaller. Each tile begins with a "subencoding" type
|
||||||
|
* byte, which is a mask made up of a number of bits. If the Raw bit is set
|
||||||
|
* then the other bits are irrelevant; w*h pixel values follow (where w and h
|
||||||
|
* are the width and height of the tile). Otherwise the tile is encoded in a
|
||||||
|
* similar way to RRE, except that the position and size of each subrectangle
|
||||||
|
* can be specified in just two bytes. The other bits in the mask are as
|
||||||
|
* follows:
|
||||||
|
*
|
||||||
|
* BackgroundSpecified - if set, a pixel value follows which specifies
|
||||||
|
* the background colour for this tile. The first non-raw tile in a
|
||||||
|
* rectangle must have this bit set. If this bit isn't set then the
|
||||||
|
* background is the same as the last tile.
|
||||||
|
*
|
||||||
|
* ForegroundSpecified - if set, a pixel value follows which specifies
|
||||||
|
* the foreground colour to be used for all subrectangles in this tile.
|
||||||
|
* If this bit is set then the SubrectsColoured bit must be zero.
|
||||||
|
*
|
||||||
|
* AnySubrects - if set, a single byte follows giving the number of
|
||||||
|
* subrectangles following. If not set, there are no subrectangles (i.e.
|
||||||
|
* the whole tile is just solid background colour).
|
||||||
|
*
|
||||||
|
* SubrectsColoured - if set then each subrectangle is preceded by a pixel
|
||||||
|
* value giving the colour of that subrectangle. If not set, all
|
||||||
|
* subrectangles are the same colour, the foreground colour; if the
|
||||||
|
* ForegroundSpecified bit wasn't set then the foreground is the same as
|
||||||
|
* the last tile.
|
||||||
|
*
|
||||||
|
* The position and size of each subrectangle is specified in two bytes. The
|
||||||
|
* Pack macros below can be used to generate the two bytes from x, y, w, h,
|
||||||
|
* and the Extract macros can be used to extract the x, y, w, h values from
|
||||||
|
* the two bytes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define rfbHextileRaw (1 << 0)
|
||||||
|
#define rfbHextileBackgroundSpecified (1 << 1)
|
||||||
|
#define rfbHextileForegroundSpecified (1 << 2)
|
||||||
|
#define rfbHextileAnySubrects (1 << 3)
|
||||||
|
#define rfbHextileSubrectsColoured (1 << 4)
|
||||||
|
|
||||||
|
#define rfbHextilePackXY(x,y) (((x) << 4) | (y))
|
||||||
|
#define rfbHextilePackWH(w,h) ((((w)-1) << 4) | ((h)-1))
|
||||||
|
#define rfbHextileExtractX(byte) ((byte) >> 4)
|
||||||
|
#define rfbHextileExtractY(byte) ((byte) & 0xf)
|
||||||
|
#define rfbHextileExtractW(byte) (((byte) >> 4) + 1)
|
||||||
|
#define rfbHextileExtractH(byte) (((byte) & 0xf) + 1)
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* zlib - zlib compressed Encoding. We have an rfbZlibHeader structure
|
||||||
|
* giving the number of bytes following. Finally the data follows is
|
||||||
|
* zlib compressed version of the raw pixel data as negotiated.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD32 nBytes;
|
||||||
|
} rfbZlibHeader;
|
||||||
|
|
||||||
|
#define sz_rfbZlibHeader 4
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* Tight Encoding. FIXME: Add more documentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define rfbTightExplicitFilter 0x04
|
||||||
|
#define rfbTightFill 0x08
|
||||||
|
#define rfbTightJpeg 0x09
|
||||||
|
#define rfbTightMaxSubencoding 0x09
|
||||||
|
|
||||||
|
/* Filters to improve compression efficiency */
|
||||||
|
#define rfbTightFilterCopy 0x00
|
||||||
|
#define rfbTightFilterPalette 0x01
|
||||||
|
#define rfbTightFilterGradient 0x02
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* XCursor encoding. This is a special encoding used to transmit X-style
|
||||||
|
* cursor shapes from server to clients. Note that for this encoding,
|
||||||
|
* coordinates in rfbFramebufferUpdateRectHeader structure hold hotspot
|
||||||
|
* position (r.x, r.y) and cursor size (r.w, r.h). If (w * h != 0), two RGB
|
||||||
|
* samples are sent after header in the rfbXCursorColors structure. They
|
||||||
|
* denote foreground and background colors of the cursor. If a client
|
||||||
|
* supports only black-and-white cursors, it should ignore these colors and
|
||||||
|
* assume that foreground is black and background is white. Next, two bitmaps
|
||||||
|
* (1 bits per pixel) follow: first one with actual data (value 0 denotes
|
||||||
|
* background color, value 1 denotes foreground color), second one with
|
||||||
|
* transparency data (bits with zero value mean that these pixels are
|
||||||
|
* transparent). Both bitmaps represent cursor data in a byte stream, from
|
||||||
|
* left to right, from top to bottom, and each row is byte-aligned. Most
|
||||||
|
* significant bits correspond to leftmost pixels. The number of bytes in
|
||||||
|
* each row can be calculated as ((w + 7) / 8). If (w * h == 0), cursor
|
||||||
|
* should be hidden (or default local cursor should be set by the client).
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 foreRed;
|
||||||
|
CARD8 foreGreen;
|
||||||
|
CARD8 foreBlue;
|
||||||
|
CARD8 backRed;
|
||||||
|
CARD8 backGreen;
|
||||||
|
CARD8 backBlue;
|
||||||
|
} rfbXCursorColors;
|
||||||
|
|
||||||
|
#define sz_rfbXCursorColors 6
|
||||||
|
|
||||||
|
|
||||||
|
/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
* RichCursor encoding. This is a special encoding used to transmit cursor
|
||||||
|
* shapes from server to clients. It is similar to the XCursor encoding but
|
||||||
|
* uses client pixel format instead of two RGB colors to represent cursor
|
||||||
|
* image. For this encoding, coordinates in rfbFramebufferUpdateRectHeader
|
||||||
|
* structure hold hotspot position (r.x, r.y) and cursor size (r.w, r.h).
|
||||||
|
* After header, two pixmaps follow: first one with cursor image in current
|
||||||
|
* client pixel format (like in raw encoding), second with transparency data
|
||||||
|
* (1 bit per pixel, exactly the same format as used for transparency bitmap
|
||||||
|
* in the XCursor encoding). If (w * h == 0), cursor should be hidden (or
|
||||||
|
* default local cursor should be set by the client).
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* SetColourMapEntries - these messages are only sent if the pixel
|
||||||
|
* format uses a "colour map" (i.e. trueColour false) and the client has not
|
||||||
|
* fixed the entire colour map using FixColourMapEntries. In addition they
|
||||||
|
* will only start being sent after the client has sent its first
|
||||||
|
* FramebufferUpdateRequest. So if the client always tells the server to use
|
||||||
|
* trueColour then it never needs to process this type of message.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbSetColourMapEntries */
|
||||||
|
CARD8 pad;
|
||||||
|
CARD16 firstColour;
|
||||||
|
CARD16 nColours;
|
||||||
|
|
||||||
|
/* Followed by nColours * 3 * CARD16
|
||||||
|
r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */
|
||||||
|
|
||||||
|
} rfbSetColourMapEntriesMsg;
|
||||||
|
|
||||||
|
#define sz_rfbSetColourMapEntriesMsg 6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Bell - ring a bell on the client if it has one.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbBell */
|
||||||
|
} rfbBellMsg;
|
||||||
|
|
||||||
|
#define sz_rfbBellMsg 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* ServerCutText - the server has new text in its cut buffer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbServerCutText */
|
||||||
|
CARD8 pad1;
|
||||||
|
CARD16 pad2;
|
||||||
|
CARD32 length;
|
||||||
|
/* followed by char text[length] */
|
||||||
|
} rfbServerCutTextMsg;
|
||||||
|
|
||||||
|
#define sz_rfbServerCutTextMsg 8
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Union of all server->client messages.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
CARD8 type;
|
||||||
|
rfbFramebufferUpdateMsg fu;
|
||||||
|
rfbSetColourMapEntriesMsg scme;
|
||||||
|
rfbBellMsg b;
|
||||||
|
rfbServerCutTextMsg sct;
|
||||||
|
} rfbServerToClientMsg;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Message definitions (client -> server)
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* SetPixelFormat - tell the RFB server the format in which the client wants
|
||||||
|
* pixels sent.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbSetPixelFormat */
|
||||||
|
CARD8 pad1;
|
||||||
|
CARD16 pad2;
|
||||||
|
rfbPixelFormat format;
|
||||||
|
} rfbSetPixelFormatMsg;
|
||||||
|
|
||||||
|
#define sz_rfbSetPixelFormatMsg (sz_rfbPixelFormat + 4)
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* FixColourMapEntries - when the pixel format uses a "colour map", fix
|
||||||
|
* read-only colour map entries.
|
||||||
|
*
|
||||||
|
* ***************** NOT CURRENTLY SUPPORTED *****************
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbFixColourMapEntries */
|
||||||
|
CARD8 pad;
|
||||||
|
CARD16 firstColour;
|
||||||
|
CARD16 nColours;
|
||||||
|
|
||||||
|
/* Followed by nColours * 3 * CARD16
|
||||||
|
r1, g1, b1, r2, g2, b2, r3, g3, b3, ..., rn, bn, gn */
|
||||||
|
|
||||||
|
} rfbFixColourMapEntriesMsg;
|
||||||
|
|
||||||
|
#define sz_rfbFixColourMapEntriesMsg 6
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* SetEncodings - tell the RFB server which encoding types we accept. Put them
|
||||||
|
* in order of preference, if we have any. We may always receive raw
|
||||||
|
* encoding, even if we don't specify it here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbSetEncodings */
|
||||||
|
CARD8 pad;
|
||||||
|
CARD16 nEncodings;
|
||||||
|
/* followed by nEncodings * CARD32 encoding types */
|
||||||
|
} rfbSetEncodingsMsg;
|
||||||
|
|
||||||
|
#define sz_rfbSetEncodingsMsg 4
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* FramebufferUpdateRequest - request for a framebuffer update. If incremental
|
||||||
|
* is true then the client just wants the changes since the last update. If
|
||||||
|
* false then it wants the whole of the specified rectangle.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbFramebufferUpdateRequest */
|
||||||
|
CARD8 incremental;
|
||||||
|
CARD16 x;
|
||||||
|
CARD16 y;
|
||||||
|
CARD16 w;
|
||||||
|
CARD16 h;
|
||||||
|
} rfbFramebufferUpdateRequestMsg;
|
||||||
|
|
||||||
|
#define sz_rfbFramebufferUpdateRequestMsg 10
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* KeyEvent - key press or release
|
||||||
|
*
|
||||||
|
* Keys are specified using the "keysym" values defined by the X Window System.
|
||||||
|
* For most ordinary keys, the keysym is the same as the corresponding ASCII
|
||||||
|
* value. Other common keys are:
|
||||||
|
*
|
||||||
|
* BackSpace 0xff08
|
||||||
|
* Tab 0xff09
|
||||||
|
* Return or Enter 0xff0d
|
||||||
|
* Escape 0xff1b
|
||||||
|
* Insert 0xff63
|
||||||
|
* Delete 0xffff
|
||||||
|
* Home 0xff50
|
||||||
|
* End 0xff57
|
||||||
|
* Page Up 0xff55
|
||||||
|
* Page Down 0xff56
|
||||||
|
* Left 0xff51
|
||||||
|
* Up 0xff52
|
||||||
|
* Right 0xff53
|
||||||
|
* Down 0xff54
|
||||||
|
* F1 0xffbe
|
||||||
|
* F2 0xffbf
|
||||||
|
* ... ...
|
||||||
|
* F12 0xffc9
|
||||||
|
* Shift 0xffe1
|
||||||
|
* Control 0xffe3
|
||||||
|
* Meta 0xffe7
|
||||||
|
* Alt 0xffe9
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbKeyEvent */
|
||||||
|
CARD8 down; /* true if down (press), false if up */
|
||||||
|
CARD16 pad;
|
||||||
|
CARD32 key; /* key is specified as an X keysym */
|
||||||
|
} rfbKeyEventMsg;
|
||||||
|
|
||||||
|
#define sz_rfbKeyEventMsg 8
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* PointerEvent - mouse/pen move and/or button press.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbPointerEvent */
|
||||||
|
CARD8 buttonMask; /* bits 0-7 are buttons 1-8, 0=up, 1=down */
|
||||||
|
CARD16 x;
|
||||||
|
CARD16 y;
|
||||||
|
} rfbPointerEventMsg;
|
||||||
|
|
||||||
|
#define rfbButton1Mask 1
|
||||||
|
#define rfbButton2Mask 2
|
||||||
|
#define rfbButton3Mask 4
|
||||||
|
|
||||||
|
#define sz_rfbPointerEventMsg 6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* ClientCutText - the client has new text in its cut buffer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
CARD8 type; /* always rfbClientCutText */
|
||||||
|
CARD8 pad1;
|
||||||
|
CARD16 pad2;
|
||||||
|
CARD32 length;
|
||||||
|
/* followed by char text[length] */
|
||||||
|
} rfbClientCutTextMsg;
|
||||||
|
|
||||||
|
#define sz_rfbClientCutTextMsg 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Union of all client->server messages.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
CARD8 type;
|
||||||
|
rfbSetPixelFormatMsg spf;
|
||||||
|
rfbFixColourMapEntriesMsg fcme;
|
||||||
|
rfbSetEncodingsMsg se;
|
||||||
|
rfbFramebufferUpdateRequestMsg fur;
|
||||||
|
rfbKeyEventMsg ke;
|
||||||
|
rfbPointerEventMsg pe;
|
||||||
|
rfbClientCutTextMsg cct;
|
||||||
|
} rfbClientToServerMsg;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,322 @@
|
|||||||
|
/*
|
||||||
|
* rre.c
|
||||||
|
*
|
||||||
|
* Routines to implement Rise-and-Run-length Encoding (RRE). This
|
||||||
|
* code is based on krw's original javatel rfbserver.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rreBeforeBuf contains pixel data in the client's format.
|
||||||
|
* rreAfterBuf contains the RRE encoded version. If the RRE encoded version is
|
||||||
|
* larger than the raw data or if it exceeds rreAfterBufSize then
|
||||||
|
* raw encoding is used instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int rreBeforeBufSize = 0;
|
||||||
|
static char *rreBeforeBuf = NULL;
|
||||||
|
|
||||||
|
static int rreAfterBufSize = 0;
|
||||||
|
static char *rreAfterBuf = NULL;
|
||||||
|
static int rreAfterBufLen;
|
||||||
|
|
||||||
|
static int subrectEncode8(CARD8 *data, int w, int h);
|
||||||
|
static int subrectEncode16(CARD16 *data, int w, int h);
|
||||||
|
static int subrectEncode32(CARD32 *data, int w, int h);
|
||||||
|
static CARD32 getBgColour(char *data, int size, int bpp);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSendRectEncodingRRE - send a given rectangle using RRE encoding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSendRectEncodingRRE(cl, x, y, w, h)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int x, y, w, h;
|
||||||
|
{
|
||||||
|
rfbFramebufferUpdateRectHeader rect;
|
||||||
|
rfbRREHeader hdr;
|
||||||
|
int nSubrects;
|
||||||
|
int i;
|
||||||
|
char *fbptr = (cl->screen->frameBuffer + (cl->screen->paddedWidthInBytes * y)
|
||||||
|
+ (x * (cl->screen->bitsPerPixel / 8)));
|
||||||
|
|
||||||
|
int maxRawSize = (cl->screen->width * cl->screen->height
|
||||||
|
* (cl->format.bitsPerPixel / 8));
|
||||||
|
|
||||||
|
if (rreBeforeBufSize < maxRawSize) {
|
||||||
|
rreBeforeBufSize = maxRawSize;
|
||||||
|
if (rreBeforeBuf == NULL)
|
||||||
|
rreBeforeBuf = (char *)xalloc(rreBeforeBufSize);
|
||||||
|
else
|
||||||
|
rreBeforeBuf = (char *)xrealloc(rreBeforeBuf, rreBeforeBufSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rreAfterBufSize < maxRawSize) {
|
||||||
|
rreAfterBufSize = maxRawSize;
|
||||||
|
if (rreAfterBuf == NULL)
|
||||||
|
rreAfterBuf = (char *)xalloc(rreAfterBufSize);
|
||||||
|
else
|
||||||
|
rreAfterBuf = (char *)xrealloc(rreAfterBuf, rreAfterBufSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
(*cl->translateFn)(cl->translateLookupTable,
|
||||||
|
&(cl->screen->rfbServerFormat),
|
||||||
|
&cl->format, fbptr, rreBeforeBuf,
|
||||||
|
cl->screen->paddedWidthInBytes, w, h);
|
||||||
|
|
||||||
|
switch (cl->format.bitsPerPixel) {
|
||||||
|
case 8:
|
||||||
|
nSubrects = subrectEncode8((CARD8 *)rreBeforeBuf, w, h);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
nSubrects = subrectEncode16((CARD16 *)rreBeforeBuf, w, h);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
nSubrects = subrectEncode32((CARD32 *)rreBeforeBuf, w, h);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rfbLog("getBgColour: bpp %d?\n",cl->format.bitsPerPixel);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nSubrects < 0) {
|
||||||
|
|
||||||
|
/* RRE encoding was too large, use raw */
|
||||||
|
|
||||||
|
return rfbSendRectEncodingRaw(cl, x, y, w, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
cl->rfbRectanglesSent[rfbEncodingRRE]++;
|
||||||
|
cl->rfbBytesSent[rfbEncodingRRE] += (sz_rfbFramebufferUpdateRectHeader
|
||||||
|
+ sz_rfbRREHeader + rreAfterBufLen);
|
||||||
|
|
||||||
|
if (cl->ublen + sz_rfbFramebufferUpdateRectHeader + sz_rfbRREHeader
|
||||||
|
> UPDATE_BUF_SIZE)
|
||||||
|
{
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.r.x = Swap16IfLE(x);
|
||||||
|
rect.r.y = Swap16IfLE(y);
|
||||||
|
rect.r.w = Swap16IfLE(w);
|
||||||
|
rect.r.h = Swap16IfLE(h);
|
||||||
|
rect.encoding = Swap32IfLE(rfbEncodingRRE);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&rect,
|
||||||
|
sz_rfbFramebufferUpdateRectHeader);
|
||||||
|
cl->ublen += sz_rfbFramebufferUpdateRectHeader;
|
||||||
|
|
||||||
|
hdr.nSubrects = Swap32IfLE(nSubrects);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&hdr, sz_rfbRREHeader);
|
||||||
|
cl->ublen += sz_rfbRREHeader;
|
||||||
|
|
||||||
|
for (i = 0; i < rreAfterBufLen;) {
|
||||||
|
|
||||||
|
int bytesToCopy = UPDATE_BUF_SIZE - cl->ublen;
|
||||||
|
|
||||||
|
if (i + bytesToCopy > rreAfterBufLen) {
|
||||||
|
bytesToCopy = rreAfterBufLen - i;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], &rreAfterBuf[i], bytesToCopy);
|
||||||
|
|
||||||
|
cl->ublen += bytesToCopy;
|
||||||
|
i += bytesToCopy;
|
||||||
|
|
||||||
|
if (cl->ublen == UPDATE_BUF_SIZE) {
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* subrectEncode() encodes the given multicoloured rectangle as a background
|
||||||
|
* colour overwritten by single-coloured rectangles. It returns the number
|
||||||
|
* of subrectangles in the encoded buffer, or -1 if subrect encoding won't
|
||||||
|
* fit in the buffer. It puts the encoded rectangles in rreAfterBuf. The
|
||||||
|
* single-colour rectangle partition is not optimal, but does find the biggest
|
||||||
|
* horizontal or vertical rectangle top-left anchored to each consecutive
|
||||||
|
* coordinate position.
|
||||||
|
*
|
||||||
|
* The coding scheme is simply [<bgcolour><subrect><subrect>...] where each
|
||||||
|
* <subrect> is [<colour><x><y><w><h>].
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DEFINE_SUBRECT_ENCODE(bpp) \
|
||||||
|
static int \
|
||||||
|
subrectEncode##bpp(data,w,h) \
|
||||||
|
CARD##bpp *data; \
|
||||||
|
int w; \
|
||||||
|
int h; \
|
||||||
|
{ \
|
||||||
|
CARD##bpp cl; \
|
||||||
|
rfbRectangle subrect; \
|
||||||
|
int x,y; \
|
||||||
|
int i,j; \
|
||||||
|
int hx=0,hy,vx=0,vy; \
|
||||||
|
int hyflag; \
|
||||||
|
CARD##bpp *seg; \
|
||||||
|
CARD##bpp *line; \
|
||||||
|
int hw,hh,vw,vh; \
|
||||||
|
int thex,they,thew,theh; \
|
||||||
|
int numsubs = 0; \
|
||||||
|
int newLen; \
|
||||||
|
CARD##bpp bg = (CARD##bpp)getBgColour((char*)data,w*h,bpp); \
|
||||||
|
\
|
||||||
|
*((CARD##bpp*)rreAfterBuf) = bg; \
|
||||||
|
\
|
||||||
|
rreAfterBufLen = (bpp/8); \
|
||||||
|
\
|
||||||
|
for (y=0; y<h; y++) { \
|
||||||
|
line = data+(y*w); \
|
||||||
|
for (x=0; x<w; x++) { \
|
||||||
|
if (line[x] != bg) { \
|
||||||
|
cl = line[x]; \
|
||||||
|
hy = y-1; \
|
||||||
|
hyflag = 1; \
|
||||||
|
for (j=y; j<h; j++) { \
|
||||||
|
seg = data+(j*w); \
|
||||||
|
if (seg[x] != cl) {break;} \
|
||||||
|
i = x; \
|
||||||
|
while ((seg[i] == cl) && (i < w)) i += 1; \
|
||||||
|
i -= 1; \
|
||||||
|
if (j == y) vx = hx = i; \
|
||||||
|
if (i < vx) vx = i; \
|
||||||
|
if ((hyflag > 0) && (i >= hx)) {hy += 1;} else {hyflag = 0;} \
|
||||||
|
} \
|
||||||
|
vy = j-1; \
|
||||||
|
\
|
||||||
|
/* We now have two possible subrects: (x,y,hx,hy) and (x,y,vx,vy) \
|
||||||
|
* We'll choose the bigger of the two. \
|
||||||
|
*/ \
|
||||||
|
hw = hx-x+1; \
|
||||||
|
hh = hy-y+1; \
|
||||||
|
vw = vx-x+1; \
|
||||||
|
vh = vy-y+1; \
|
||||||
|
\
|
||||||
|
thex = x; \
|
||||||
|
they = y; \
|
||||||
|
\
|
||||||
|
if ((hw*hh) > (vw*vh)) { \
|
||||||
|
thew = hw; \
|
||||||
|
theh = hh; \
|
||||||
|
} else { \
|
||||||
|
thew = vw; \
|
||||||
|
theh = vh; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
subrect.x = Swap16IfLE(thex); \
|
||||||
|
subrect.y = Swap16IfLE(they); \
|
||||||
|
subrect.w = Swap16IfLE(thew); \
|
||||||
|
subrect.h = Swap16IfLE(theh); \
|
||||||
|
\
|
||||||
|
newLen = rreAfterBufLen + (bpp/8) + sz_rfbRectangle; \
|
||||||
|
if ((newLen > (w * h * (bpp/8))) || (newLen > rreAfterBufSize)) \
|
||||||
|
return -1; \
|
||||||
|
\
|
||||||
|
numsubs += 1; \
|
||||||
|
*((CARD##bpp*)(rreAfterBuf + rreAfterBufLen)) = cl; \
|
||||||
|
rreAfterBufLen += (bpp/8); \
|
||||||
|
memcpy(&rreAfterBuf[rreAfterBufLen],&subrect,sz_rfbRectangle); \
|
||||||
|
rreAfterBufLen += sz_rfbRectangle; \
|
||||||
|
\
|
||||||
|
/* \
|
||||||
|
* Now mark the subrect as done. \
|
||||||
|
*/ \
|
||||||
|
for (j=they; j < (they+theh); j++) { \
|
||||||
|
for (i=thex; i < (thex+thew); i++) { \
|
||||||
|
data[j*w+i] = bg; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
return numsubs; \
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_SUBRECT_ENCODE(8)
|
||||||
|
DEFINE_SUBRECT_ENCODE(16)
|
||||||
|
DEFINE_SUBRECT_ENCODE(32)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getBgColour() gets the most prevalent colour in a byte array.
|
||||||
|
*/
|
||||||
|
static CARD32
|
||||||
|
getBgColour(data,size,bpp)
|
||||||
|
char *data;
|
||||||
|
int size;
|
||||||
|
int bpp;
|
||||||
|
{
|
||||||
|
|
||||||
|
#define NUMCLRS 256
|
||||||
|
|
||||||
|
static int counts[NUMCLRS];
|
||||||
|
int i,j,k;
|
||||||
|
|
||||||
|
int maxcount = 0;
|
||||||
|
CARD8 maxclr = 0;
|
||||||
|
|
||||||
|
if (bpp != 8) {
|
||||||
|
if (bpp == 16) {
|
||||||
|
return ((CARD16 *)data)[0];
|
||||||
|
} else if (bpp == 32) {
|
||||||
|
return ((CARD32 *)data)[0];
|
||||||
|
} else {
|
||||||
|
rfbLog("getBgColour: bpp %d?\n",bpp);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0; i<NUMCLRS; i++) {
|
||||||
|
counts[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j=0; j<size; j++) {
|
||||||
|
k = (int)(((CARD8 *)data)[j]);
|
||||||
|
if (k >= NUMCLRS) {
|
||||||
|
rfbLog("getBgColour: unusual colour = %d\n", k);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
counts[k] += 1;
|
||||||
|
if (counts[k] > maxcount) {
|
||||||
|
maxcount = counts[k];
|
||||||
|
maxclr = ((CARD8 *)data)[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return maxclr;
|
||||||
|
}
|
@ -0,0 +1,450 @@
|
|||||||
|
/*
|
||||||
|
* sockets.c - deal with TCP & UDP sockets.
|
||||||
|
*
|
||||||
|
* This code should be independent of any changes in the RFB protocol. It just
|
||||||
|
* deals with the X server scheduling stuff, calling rfbNewClientConnection and
|
||||||
|
* rfbProcessClientMessage to actually deal with the protocol. If a socket
|
||||||
|
* needs to be closed for any reason then rfbCloseClient should be called, and
|
||||||
|
* this in turn will call rfbClientConnectionGone. To make an active
|
||||||
|
* connection out, call rfbConnect - note that this does _not_ call
|
||||||
|
* rfbNewClientConnection.
|
||||||
|
*
|
||||||
|
* This file is divided into two types of function. Those beginning with
|
||||||
|
* "rfb" are specific to sockets using the RFB protocol. Those without the
|
||||||
|
* "rfb" prefix are more general socket routines (which are used by the http
|
||||||
|
* code).
|
||||||
|
*
|
||||||
|
* Thanks to Karl Hakimian for pointing out that some platforms return EAGAIN
|
||||||
|
* not EWOULDBLOCK.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#if defined(__linux__) && defined(NEED_TIMEVAL)
|
||||||
|
struct timeval
|
||||||
|
{
|
||||||
|
long int tv_sec,tv_usec;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
#endif
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
int rfbMaxClientWait = 20000; /* time (ms) after which we decide client has
|
||||||
|
gone away - needed to stop us hanging */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbInitSockets sets up the TCP and UDP sockets to listen for RFB
|
||||||
|
* connections. It does nothing if called again.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbInitSockets(rfbScreenInfoPtr rfbScreen)
|
||||||
|
{
|
||||||
|
if (rfbScreen->socketInitDone)
|
||||||
|
return;
|
||||||
|
|
||||||
|
rfbScreen->socketInitDone = TRUE;
|
||||||
|
|
||||||
|
if (rfbScreen->inetdSock != -1) {
|
||||||
|
const int one = 1;
|
||||||
|
|
||||||
|
if (fcntl(rfbScreen->inetdSock, F_SETFL, O_NONBLOCK) < 0) {
|
||||||
|
rfbLogPerror("fcntl");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setsockopt(rfbScreen->inetdSock, IPPROTO_TCP, TCP_NODELAY,
|
||||||
|
(char *)&one, sizeof(one)) < 0) {
|
||||||
|
rfbLogPerror("setsockopt");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FD_ZERO(&(rfbScreen->allFds));
|
||||||
|
FD_SET(rfbScreen->inetdSock, &(rfbScreen->allFds));
|
||||||
|
rfbScreen->maxFd = rfbScreen->inetdSock;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbLog("Listening for VNC connections on TCP port %d\n", rfbScreen->rfbPort);
|
||||||
|
|
||||||
|
if ((rfbScreen->rfbListenSock = ListenOnTCPPort(rfbScreen->rfbPort)) < 0) {
|
||||||
|
rfbLogPerror("ListenOnTCPPort");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
FD_ZERO(&(rfbScreen->allFds));
|
||||||
|
FD_SET(rfbScreen->rfbListenSock, &(rfbScreen->allFds));
|
||||||
|
rfbScreen->maxFd = rfbScreen->rfbListenSock;
|
||||||
|
|
||||||
|
if (rfbScreen->udpPort != 0) {
|
||||||
|
rfbLog("rfbInitSockets: listening for input on UDP port %d\n",rfbScreen->udpPort);
|
||||||
|
|
||||||
|
if ((rfbScreen->udpSock = ListenOnUDPPort(rfbScreen->udpPort)) < 0) {
|
||||||
|
rfbLogPerror("ListenOnUDPPort");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
FD_SET(rfbScreen->udpSock, &(rfbScreen->allFds));
|
||||||
|
rfbScreen->maxFd = max(rfbScreen->udpSock,rfbScreen->maxFd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbCheckFds is called from ProcessInputEvents to check for input on the RFB
|
||||||
|
* socket(s). If there is input to process, the appropriate function in the
|
||||||
|
* RFB server code will be called (rfbNewClientConnection,
|
||||||
|
* rfbProcessClientMessage, etc).
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbCheckFds(rfbScreenInfoPtr rfbScreen,long usec)
|
||||||
|
{
|
||||||
|
int nfds;
|
||||||
|
fd_set fds;
|
||||||
|
struct timeval tv;
|
||||||
|
struct sockaddr_in addr;
|
||||||
|
int addrlen = sizeof(addr);
|
||||||
|
char buf[6];
|
||||||
|
const int one = 1;
|
||||||
|
int sock;
|
||||||
|
rfbClientPtr cl;
|
||||||
|
|
||||||
|
if (!rfbScreen->inetdInitDone && rfbScreen->inetdSock != -1) {
|
||||||
|
rfbNewClientConnection(rfbScreen,rfbScreen->inetdSock);
|
||||||
|
rfbScreen->inetdInitDone = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy((char *)&fds, (char *)&(rfbScreen->allFds), sizeof(fd_set));
|
||||||
|
tv.tv_sec = 0;
|
||||||
|
tv.tv_usec = usec;
|
||||||
|
nfds = select(rfbScreen->maxFd + 1, &fds, NULL, NULL, &tv);
|
||||||
|
if (nfds == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (nfds < 0) {
|
||||||
|
rfbLogPerror("rfbCheckFds: select");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rfbScreen->rfbListenSock != -1 && FD_ISSET(rfbScreen->rfbListenSock, &fds)) {
|
||||||
|
|
||||||
|
if ((sock = accept(rfbScreen->rfbListenSock,
|
||||||
|
(struct sockaddr *)&addr, &addrlen)) < 0) {
|
||||||
|
rfbLogPerror("rfbCheckFds: accept");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) {
|
||||||
|
rfbLogPerror("rfbCheckFds: fcntl");
|
||||||
|
close(sock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
|
||||||
|
(char *)&one, sizeof(one)) < 0) {
|
||||||
|
rfbLogPerror("rfbCheckFds: setsockopt");
|
||||||
|
close(sock);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(stderr,"\n");
|
||||||
|
rfbLog("Got connection from client %s\n", inet_ntoa(addr.sin_addr));
|
||||||
|
|
||||||
|
FD_SET(sock, &(rfbScreen->allFds));
|
||||||
|
rfbScreen->maxFd = max(sock,rfbScreen->maxFd);
|
||||||
|
|
||||||
|
rfbNewClient(rfbScreen,sock);
|
||||||
|
|
||||||
|
FD_CLR(rfbScreen->rfbListenSock, &fds);
|
||||||
|
if (--nfds == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((rfbScreen->udpSock != -1) && FD_ISSET(rfbScreen->udpSock, &fds)) {
|
||||||
|
|
||||||
|
if (recvfrom(rfbScreen->udpSock, buf, 1, MSG_PEEK,
|
||||||
|
(struct sockaddr *)&addr, &addrlen) < 0) {
|
||||||
|
|
||||||
|
rfbLogPerror("rfbCheckFds: UDP: recvfrom");
|
||||||
|
rfbDisconnectUDPSock(rfbScreen);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (!rfbScreen->udpSockConnected ||
|
||||||
|
(memcmp(&addr, &rfbScreen->udpRemoteAddr, addrlen) != 0))
|
||||||
|
{
|
||||||
|
/* new remote end */
|
||||||
|
rfbLog("rfbCheckFds: UDP: got connection\n");
|
||||||
|
|
||||||
|
memcpy(&rfbScreen->udpRemoteAddr, &addr, addrlen);
|
||||||
|
rfbScreen->udpSockConnected = TRUE;
|
||||||
|
|
||||||
|
if (connect(rfbScreen->udpSock,
|
||||||
|
(struct sockaddr *)&addr, addrlen) < 0) {
|
||||||
|
rfbLogPerror("rfbCheckFds: UDP: connect");
|
||||||
|
rfbDisconnectUDPSock(rfbScreen);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbNewUDPConnection(rfbScreen,rfbScreen->udpSock);
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: UDP also needs a client
|
||||||
|
//rfbProcessUDPInput(rfbScreen,rfbScreen->udpSock);
|
||||||
|
}
|
||||||
|
|
||||||
|
FD_CLR(rfbScreen->udpSock, &fds);
|
||||||
|
if (--nfds == 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (cl = rfbScreen->rfbClientHead; cl; cl=cl->next) {
|
||||||
|
if (FD_ISSET(cl->sock, &fds) && FD_ISSET(cl->sock, &(rfbScreen->allFds))) {
|
||||||
|
rfbProcessClientMessage(cl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbDisconnectUDPSock(rfbScreenInfoPtr rfbScreen)
|
||||||
|
{
|
||||||
|
rfbScreen->udpSockConnected = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbCloseClient(cl)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
FD_CLR(cl->sock,&(cl->screen->allFds));
|
||||||
|
rfbClientConnectionGone(cl);
|
||||||
|
close(cl->sock);
|
||||||
|
cl->sock = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ReadExact reads an exact number of bytes from a client. Returns 1 if
|
||||||
|
* those bytes have been read, 0 if the other end has closed, or -1 if an error
|
||||||
|
* occurred (errno is set to ETIMEDOUT if it timed out).
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
ReadExact(cl, buf, len)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
char *buf;
|
||||||
|
int len;
|
||||||
|
{
|
||||||
|
int sock = cl->sock;
|
||||||
|
int n;
|
||||||
|
fd_set fds;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
while (len > 0) {
|
||||||
|
n = read(sock, buf, len);
|
||||||
|
|
||||||
|
if (n > 0) {
|
||||||
|
|
||||||
|
buf += n;
|
||||||
|
len -= n;
|
||||||
|
|
||||||
|
} else if (n == 0) {
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (errno != EWOULDBLOCK && errno != EAGAIN) {
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(sock, &fds);
|
||||||
|
tv.tv_sec = rfbMaxClientWait / 1000;
|
||||||
|
tv.tv_usec = (rfbMaxClientWait % 1000) * 1000;
|
||||||
|
n = select(sock+1, &fds, NULL, NULL, &tv);
|
||||||
|
if (n < 0) {
|
||||||
|
rfbLogPerror("ReadExact: select");
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
if (n == 0) {
|
||||||
|
errno = ETIMEDOUT;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WriteExact writes an exact number of bytes to a client. Returns 1 if
|
||||||
|
* those bytes have been written, or -1 if an error occurred (errno is set to
|
||||||
|
* ETIMEDOUT if it timed out).
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
WriteExact(cl, buf, len)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
char *buf;
|
||||||
|
int len;
|
||||||
|
{
|
||||||
|
int sock = cl->sock;
|
||||||
|
int n;
|
||||||
|
fd_set fds;
|
||||||
|
struct timeval tv;
|
||||||
|
int totalTimeWaited = 0;
|
||||||
|
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_lock(&cl->outputMutex);
|
||||||
|
#endif
|
||||||
|
while (len > 0) {
|
||||||
|
n = write(sock, buf, len);
|
||||||
|
|
||||||
|
if (n > 0) {
|
||||||
|
|
||||||
|
buf += n;
|
||||||
|
len -= n;
|
||||||
|
|
||||||
|
} else if (n == 0) {
|
||||||
|
|
||||||
|
rfbLog("WriteExact: write returned 0?\n");
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (errno != EWOULDBLOCK && errno != EAGAIN) {
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_unlock(&cl->outputMutex);
|
||||||
|
#endif
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Retry every 5 seconds until we exceed rfbMaxClientWait. We
|
||||||
|
need to do this because select doesn't necessarily return
|
||||||
|
immediately when the other end has gone away */
|
||||||
|
|
||||||
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(sock, &fds);
|
||||||
|
tv.tv_sec = 5;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
n = select(sock+1, NULL, &fds, NULL, &tv);
|
||||||
|
if (n < 0) {
|
||||||
|
rfbLogPerror("WriteExact: select");
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_unlock(&cl->outputMutex);
|
||||||
|
#endif
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
if (n == 0) {
|
||||||
|
totalTimeWaited += 5000;
|
||||||
|
if (totalTimeWaited >= rfbMaxClientWait) {
|
||||||
|
errno = ETIMEDOUT;
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_unlock(&cl->outputMutex);
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
totalTimeWaited = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef HAVE_PTHREADS
|
||||||
|
pthread_mutex_unlock(&cl->outputMutex);
|
||||||
|
#endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
ListenOnTCPPort(port)
|
||||||
|
int port;
|
||||||
|
{
|
||||||
|
struct sockaddr_in addr;
|
||||||
|
int sock;
|
||||||
|
int one = 1;
|
||||||
|
|
||||||
|
addr.sin_family = AF_INET;
|
||||||
|
addr.sin_port = htons(port);
|
||||||
|
//addr.sin_addr.s_addr = interface.s_addr;
|
||||||
|
addr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
|
||||||
|
(char *)&one, sizeof(one)) < 0) {
|
||||||
|
close(sock);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
|
close(sock);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (listen(sock, 5) < 0) {
|
||||||
|
close(sock);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ListenOnUDPPort(port)
|
||||||
|
int port;
|
||||||
|
{
|
||||||
|
struct sockaddr_in addr;
|
||||||
|
int sock;
|
||||||
|
int one = 1;
|
||||||
|
|
||||||
|
addr.sin_family = AF_INET;
|
||||||
|
addr.sin_port = htons(port);
|
||||||
|
//addr.sin_addr.s_addr = interface.s_addr;
|
||||||
|
addr.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
|
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
|
||||||
|
(char *)&one, sizeof(one)) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sock;
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* stats.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
static char* encNames[] = {
|
||||||
|
"raw", "copyRect", "RRE", "[encoding 3]", "CoRRE", "hextile",
|
||||||
|
"zlib", "tight", "[encoding 8]", "[encoding 9]"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbResetStats(rfbClientPtr cl)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < MAX_ENCODINGS; i++) {
|
||||||
|
cl->rfbBytesSent[i] = 0;
|
||||||
|
cl->rfbRectanglesSent[i] = 0;
|
||||||
|
}
|
||||||
|
cl->rfbLastRectMarkersSent = 0;
|
||||||
|
cl->rfbLastRectBytesSent = 0;
|
||||||
|
cl->rfbCursorBytesSent = 0;
|
||||||
|
cl->rfbCursorUpdatesSent = 0;
|
||||||
|
cl->rfbFramebufferUpdateMessagesSent = 0;
|
||||||
|
cl->rfbRawBytesEquivalent = 0;
|
||||||
|
cl->rfbKeyEventsRcvd = 0;
|
||||||
|
cl->rfbPointerEventsRcvd = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbPrintStats(rfbClientPtr cl)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int totalRectanglesSent = 0;
|
||||||
|
int totalBytesSent = 0;
|
||||||
|
|
||||||
|
rfbLog("Statistics:\n");
|
||||||
|
|
||||||
|
if ((cl->rfbKeyEventsRcvd != 0) || (cl->rfbPointerEventsRcvd != 0))
|
||||||
|
rfbLog(" key events received %d, pointer events %d\n",
|
||||||
|
cl->rfbKeyEventsRcvd, cl->rfbPointerEventsRcvd);
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_ENCODINGS; i++) {
|
||||||
|
totalRectanglesSent += cl->rfbRectanglesSent[i];
|
||||||
|
totalBytesSent += cl->rfbBytesSent[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
rfbLog(" framebuffer updates %d, rectangles %d, bytes %d\n",
|
||||||
|
cl->rfbFramebufferUpdateMessagesSent, totalRectanglesSent,
|
||||||
|
totalBytesSent);
|
||||||
|
|
||||||
|
if (cl->rfbLastRectMarkersSent != 0)
|
||||||
|
rfbLog(" LastRect markers %d, bytes %d\n",
|
||||||
|
cl->rfbLastRectMarkersSent, cl->rfbLastRectBytesSent);
|
||||||
|
|
||||||
|
if (cl->rfbCursorUpdatesSent != 0)
|
||||||
|
rfbLog(" cursor shape updates %d, bytes %d\n",
|
||||||
|
cl->rfbCursorUpdatesSent, cl->rfbCursorBytesSent);
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_ENCODINGS; i++) {
|
||||||
|
if (cl->rfbRectanglesSent[i] != 0)
|
||||||
|
rfbLog(" %s rectangles %d, bytes %d\n",
|
||||||
|
encNames[i], cl->rfbRectanglesSent[i], cl->rfbBytesSent[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((totalBytesSent - cl->rfbBytesSent[rfbEncodingCopyRect]) != 0) {
|
||||||
|
rfbLog(" raw bytes equivalent %d, compression ratio %f\n",
|
||||||
|
cl->rfbRawBytesEquivalent,
|
||||||
|
(double)cl->rfbRawBytesEquivalent
|
||||||
|
/ (double)(totalBytesSent
|
||||||
|
- cl->rfbBytesSent[rfbEncodingCopyRect]-
|
||||||
|
cl->rfbCursorBytesSent -
|
||||||
|
cl->rfbLastRectBytesSent));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "vncauth.h"
|
||||||
|
|
||||||
|
void usage(void)
|
||||||
|
{
|
||||||
|
printf("\nusage: storepasswd <password> <filename>\n\n");
|
||||||
|
|
||||||
|
printf("Stores a password in encrypted format.\n");
|
||||||
|
printf("The resulting file can be used with the -rfbauth argument to OSXvnc.\n\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc != 3)
|
||||||
|
usage();
|
||||||
|
|
||||||
|
if (vncEncryptAndStorePasswd(argv[1], argv[2]) != 0) {
|
||||||
|
printf("storing password failed.\n");
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
printf("storing password succeeded.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* tableinitcmtemplate.c - template for initialising lookup tables for
|
||||||
|
* translation from a colour map to true colour.
|
||||||
|
*
|
||||||
|
* This file shouldn't be compiled. It is included multiple times by
|
||||||
|
* translate.c, each time with a different definition of the macro OUT.
|
||||||
|
* For each value of OUT, this file defines a function which allocates an
|
||||||
|
* appropriately sized lookup table and initialises it.
|
||||||
|
*
|
||||||
|
* I know this code isn't nice to read because of all the macros, but
|
||||||
|
* efficiency is important here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(OUT)
|
||||||
|
#error "This file shouldn't be compiled."
|
||||||
|
#error "It is included as part of translate.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define OUT_T CONCAT2E(CARD,OUT)
|
||||||
|
#define SwapOUT(x) CONCAT2E(Swap,OUT(x))
|
||||||
|
#define rfbInitColourMapSingleTableOUT \
|
||||||
|
CONCAT2E(rfbInitColourMapSingleTable,OUT)
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbInitColourMapSingleTableOUT (char **table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out)
|
||||||
|
{
|
||||||
|
int i, r, g, b;
|
||||||
|
OUT_T *t;
|
||||||
|
EntryPtr pent;
|
||||||
|
int nEntries = 1 << in->bitsPerPixel;
|
||||||
|
|
||||||
|
if (*table) free(*table);
|
||||||
|
*table = (char *)malloc(nEntries * sizeof(OUT_T));
|
||||||
|
t = (OUT_T *)*table;
|
||||||
|
|
||||||
|
pent = (EntryPtr)&rfbInstalledColormap->red[0];
|
||||||
|
|
||||||
|
for (i = 0; i < nEntries; i++) {
|
||||||
|
if (pent->fShared) {
|
||||||
|
r = pent->co.shco.red->color;
|
||||||
|
g = pent->co.shco.green->color;
|
||||||
|
b = pent->co.shco.blue->color;
|
||||||
|
} else {
|
||||||
|
r = pent->co.local.red;
|
||||||
|
g = pent->co.local.green;
|
||||||
|
b = pent->co.local.blue;
|
||||||
|
}
|
||||||
|
t[i] = ((((r * out->redMax + 32767) / 65535) << out->redShift) |
|
||||||
|
(((g * out->greenMax + 32767) / 65535) << out->greenShift) |
|
||||||
|
(((b * out->blueMax + 32767) / 65535) << out->blueShift));
|
||||||
|
#if (OUT != 8)
|
||||||
|
if (out->bigEndian != in->bigEndian) {
|
||||||
|
t[i] = SwapOUT(t[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
pent++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef OUT_T
|
||||||
|
#undef SwapOUT
|
||||||
|
#undef rfbInitColourMapSingleTableOUT
|
@ -0,0 +1,142 @@
|
|||||||
|
/*
|
||||||
|
* tableinittctemplate.c - template for initialising lookup tables for
|
||||||
|
* truecolour to truecolour translation.
|
||||||
|
*
|
||||||
|
* This file shouldn't be compiled. It is included multiple times by
|
||||||
|
* translate.c, each time with a different definition of the macro OUT.
|
||||||
|
* For each value of OUT, this file defines two functions for initialising
|
||||||
|
* lookup tables. One is for truecolour translation using a single lookup
|
||||||
|
* table, the other is for truecolour translation using three separate
|
||||||
|
* lookup tables for the red, green and blue values.
|
||||||
|
*
|
||||||
|
* I know this code isn't nice to read because of all the macros, but
|
||||||
|
* efficiency is important here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(OUT)
|
||||||
|
#error "This file shouldn't be compiled."
|
||||||
|
#error "It is included as part of translate.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define OUT_T CONCAT2E(CARD,OUT)
|
||||||
|
#define SwapOUT(x) CONCAT2E(Swap,OUT(x))
|
||||||
|
#define rfbInitTrueColourSingleTableOUT \
|
||||||
|
CONCAT2E(rfbInitTrueColourSingleTable,OUT)
|
||||||
|
#define rfbInitTrueColourRGBTablesOUT CONCAT2E(rfbInitTrueColourRGBTables,OUT)
|
||||||
|
#define rfbInitOneRGBTableOUT CONCAT2E(rfbInitOneRGBTable,OUT)
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbInitOneRGBTableOUT (OUT_T *table, int inMax, int outMax, int outShift,
|
||||||
|
int swap);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbInitTrueColourSingleTable sets up a single lookup table for truecolour
|
||||||
|
* translation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbInitTrueColourSingleTableOUT (char **table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int inRed, inGreen, inBlue, outRed, outGreen, outBlue;
|
||||||
|
OUT_T *t;
|
||||||
|
int nEntries = 1 << in->bitsPerPixel;
|
||||||
|
|
||||||
|
if (*table) free(*table);
|
||||||
|
*table = (char *)xalloc(nEntries * sizeof(OUT_T));
|
||||||
|
t = (OUT_T *)*table;
|
||||||
|
|
||||||
|
for (i = 0; i < nEntries; i++) {
|
||||||
|
inRed = (i >> in->redShift) & in->redMax;
|
||||||
|
inGreen = (i >> in->greenShift) & in->greenMax;
|
||||||
|
inBlue = (i >> in->blueShift) & in->blueMax;
|
||||||
|
|
||||||
|
outRed = (inRed * out->redMax + in->redMax / 2) / in->redMax;
|
||||||
|
outGreen = (inGreen * out->greenMax + in->greenMax / 2) / in->greenMax;
|
||||||
|
outBlue = (inBlue * out->blueMax + in->blueMax / 2) / in->blueMax;
|
||||||
|
|
||||||
|
t[i] = ((outRed << out->redShift) |
|
||||||
|
(outGreen << out->greenShift) |
|
||||||
|
(outBlue << out->blueShift));
|
||||||
|
#if (OUT != 8)
|
||||||
|
if (out->bigEndian != in->bigEndian) {
|
||||||
|
t[i] = SwapOUT(t[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbInitTrueColourRGBTables sets up three separate lookup tables for the
|
||||||
|
* red, green and blue values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbInitTrueColourRGBTablesOUT (char **table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out)
|
||||||
|
{
|
||||||
|
OUT_T *redTable;
|
||||||
|
OUT_T *greenTable;
|
||||||
|
OUT_T *blueTable;
|
||||||
|
|
||||||
|
if (*table) free(*table);
|
||||||
|
*table = (char *)xalloc((in->redMax + in->greenMax + in->blueMax + 3)
|
||||||
|
* sizeof(OUT_T));
|
||||||
|
redTable = (OUT_T *)*table;
|
||||||
|
greenTable = redTable + in->redMax + 1;
|
||||||
|
blueTable = greenTable + in->greenMax + 1;
|
||||||
|
|
||||||
|
rfbInitOneRGBTableOUT (redTable, in->redMax, out->redMax,
|
||||||
|
out->redShift, (out->bigEndian != in->bigEndian));
|
||||||
|
rfbInitOneRGBTableOUT (greenTable, in->greenMax, out->greenMax,
|
||||||
|
out->greenShift, (out->bigEndian != in->bigEndian));
|
||||||
|
rfbInitOneRGBTableOUT (blueTable, in->blueMax, out->blueMax,
|
||||||
|
out->blueShift, (out->bigEndian != in->bigEndian));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbInitOneRGBTableOUT (OUT_T *table, int inMax, int outMax, int outShift,
|
||||||
|
int swap)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int nEntries = inMax + 1;
|
||||||
|
|
||||||
|
for (i = 0; i < nEntries; i++) {
|
||||||
|
table[i] = ((i * outMax + inMax / 2) / inMax) << outShift;
|
||||||
|
#if (OUT != 8)
|
||||||
|
if (swap) {
|
||||||
|
table[i] = SwapOUT(table[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef OUT_T
|
||||||
|
#undef SwapOUT
|
||||||
|
#undef rfbInitTrueColourSingleTableOUT
|
||||||
|
#undef rfbInitTrueColourRGBTablesOUT
|
||||||
|
#undef rfbInitOneRGBTableOUT
|
@ -0,0 +1,117 @@
|
|||||||
|
/*
|
||||||
|
* tabletranstemplate.c - template for translation using lookup tables.
|
||||||
|
*
|
||||||
|
* This file shouldn't be compiled. It is included multiple times by
|
||||||
|
* translate.c, each time with different definitions of the macros IN and OUT.
|
||||||
|
*
|
||||||
|
* For each pair of values IN and OUT, this file defines two functions for
|
||||||
|
* translating a given rectangle of pixel data. One uses a single lookup
|
||||||
|
* table, and the other uses three separate lookup tables for the red, green
|
||||||
|
* and blue values.
|
||||||
|
*
|
||||||
|
* I know this code isn't nice to read because of all the macros, but
|
||||||
|
* efficiency is important here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(IN) || !defined(OUT)
|
||||||
|
#error "This file shouldn't be compiled."
|
||||||
|
#error "It is included as part of translate.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define IN_T CONCAT2E(CARD,IN)
|
||||||
|
#define OUT_T CONCAT2E(CARD,OUT)
|
||||||
|
#define rfbTranslateWithSingleTableINtoOUT \
|
||||||
|
CONCAT4E(rfbTranslateWithSingleTable,IN,to,OUT)
|
||||||
|
#define rfbTranslateWithRGBTablesINtoOUT \
|
||||||
|
CONCAT4E(rfbTranslateWithRGBTables,IN,to,OUT)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbTranslateWithSingleTableINtoOUT translates a rectangle of pixel data
|
||||||
|
* using a single lookup table.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbTranslateWithSingleTableINtoOUT (char *table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out,
|
||||||
|
char *iptr, char *optr,
|
||||||
|
int bytesBetweenInputLines,
|
||||||
|
int width, int height)
|
||||||
|
{
|
||||||
|
IN_T *ip = (IN_T *)iptr;
|
||||||
|
OUT_T *op = (OUT_T *)optr;
|
||||||
|
int ipextra = bytesBetweenInputLines / sizeof(IN_T) - width;
|
||||||
|
OUT_T *opLineEnd;
|
||||||
|
OUT_T *t = (OUT_T *)table;
|
||||||
|
|
||||||
|
while (height > 0) {
|
||||||
|
opLineEnd = op + width;
|
||||||
|
|
||||||
|
while (op < opLineEnd) {
|
||||||
|
*(op++) = t[*(ip++)];
|
||||||
|
}
|
||||||
|
|
||||||
|
ip += ipextra;
|
||||||
|
height--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbTranslateWithRGBTablesINtoOUT translates a rectangle of pixel data
|
||||||
|
* using three separate lookup tables for the red, green and blue values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
rfbTranslateWithRGBTablesINtoOUT (char *table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out,
|
||||||
|
char *iptr, char *optr,
|
||||||
|
int bytesBetweenInputLines,
|
||||||
|
int width, int height)
|
||||||
|
{
|
||||||
|
IN_T *ip = (IN_T *)iptr;
|
||||||
|
OUT_T *op = (OUT_T *)optr;
|
||||||
|
int ipextra = bytesBetweenInputLines / sizeof(IN_T) - width;
|
||||||
|
OUT_T *opLineEnd;
|
||||||
|
OUT_T *redTable = (OUT_T *)table;
|
||||||
|
OUT_T *greenTable = redTable + in->redMax + 1;
|
||||||
|
OUT_T *blueTable = greenTable + in->greenMax + 1;
|
||||||
|
|
||||||
|
while (height > 0) {
|
||||||
|
opLineEnd = op + width;
|
||||||
|
|
||||||
|
while (op < opLineEnd) {
|
||||||
|
*(op++) = (redTable[(*ip >> in->redShift) & in->redMax] |
|
||||||
|
greenTable[(*ip >> in->greenShift) & in->greenMax] |
|
||||||
|
blueTable[(*ip >> in->blueShift) & in->blueMax]);
|
||||||
|
ip++;
|
||||||
|
}
|
||||||
|
ip += ipextra;
|
||||||
|
height--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef IN_T
|
||||||
|
#undef OUT_T
|
||||||
|
#undef rfbTranslateWithSingleTableINtoOUT
|
||||||
|
#undef rfbTranslateWithRGBTablesINtoOUT
|
@ -0,0 +1,400 @@
|
|||||||
|
/*
|
||||||
|
* translate.c - translate between different pixel formats
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* OSXvnc Copyright (C) 2001 Dan McGuirk <mcguirk@incompleteness.net>.
|
||||||
|
* Original Xvnc code Copyright (C) 1999 AT&T Laboratories Cambridge.
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
static void PrintPixelFormat(rfbPixelFormat *pf);
|
||||||
|
static Bool rfbSetClientColourMapBGR233();
|
||||||
|
|
||||||
|
Bool rfbEconomicTranslate = FALSE;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some standard pixel formats.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static const rfbPixelFormat BGR233Format = {
|
||||||
|
8, 8, 0, 1, 7, 7, 3, 0, 3, 6
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macro to compare pixel formats.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PF_EQ(x,y) \
|
||||||
|
((x.bitsPerPixel == y.bitsPerPixel) && \
|
||||||
|
(x.depth == y.depth) && \
|
||||||
|
((x.bigEndian == y.bigEndian) || (x.bitsPerPixel == 8)) && \
|
||||||
|
(x.trueColour == y.trueColour) && \
|
||||||
|
(!x.trueColour || ((x.redMax == y.redMax) && \
|
||||||
|
(x.greenMax == y.greenMax) && \
|
||||||
|
(x.blueMax == y.blueMax) && \
|
||||||
|
(x.redShift == y.redShift) && \
|
||||||
|
(x.greenShift == y.greenShift) && \
|
||||||
|
(x.blueShift == y.blueShift))))
|
||||||
|
|
||||||
|
#define CONCAT2(a,b) a##b
|
||||||
|
#define CONCAT2E(a,b) CONCAT2(a,b)
|
||||||
|
#define CONCAT4(a,b,c,d) a##b##c##d
|
||||||
|
#define CONCAT4E(a,b,c,d) CONCAT4(a,b,c,d)
|
||||||
|
|
||||||
|
#define OUT 8
|
||||||
|
#include "tableinittctemplate.c"
|
||||||
|
#define IN 8
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#define IN 16
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#define IN 32
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#undef OUT
|
||||||
|
|
||||||
|
#define OUT 16
|
||||||
|
#include "tableinittctemplate.c"
|
||||||
|
#define IN 8
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#define IN 16
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#define IN 32
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#undef OUT
|
||||||
|
|
||||||
|
#define OUT 32
|
||||||
|
#include "tableinittctemplate.c"
|
||||||
|
#define IN 8
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#define IN 16
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#define IN 32
|
||||||
|
#include "tabletranstemplate.c"
|
||||||
|
#undef IN
|
||||||
|
#undef OUT
|
||||||
|
|
||||||
|
typedef void (*rfbInitTableFnType)(char **table, rfbPixelFormat *in,
|
||||||
|
rfbPixelFormat *out);
|
||||||
|
|
||||||
|
rfbInitTableFnType rfbInitTrueColourSingleTableFns[3] = {
|
||||||
|
rfbInitTrueColourSingleTable8,
|
||||||
|
rfbInitTrueColourSingleTable16,
|
||||||
|
rfbInitTrueColourSingleTable32
|
||||||
|
};
|
||||||
|
|
||||||
|
rfbInitTableFnType rfbInitTrueColourRGBTablesFns[3] = {
|
||||||
|
rfbInitTrueColourRGBTables8,
|
||||||
|
rfbInitTrueColourRGBTables16,
|
||||||
|
rfbInitTrueColourRGBTables32
|
||||||
|
};
|
||||||
|
|
||||||
|
rfbTranslateFnType rfbTranslateWithSingleTableFns[3][3] = {
|
||||||
|
{ rfbTranslateWithSingleTable8to8,
|
||||||
|
rfbTranslateWithSingleTable8to16,
|
||||||
|
rfbTranslateWithSingleTable8to32 },
|
||||||
|
{ rfbTranslateWithSingleTable16to8,
|
||||||
|
rfbTranslateWithSingleTable16to16,
|
||||||
|
rfbTranslateWithSingleTable16to32 },
|
||||||
|
{ rfbTranslateWithSingleTable32to8,
|
||||||
|
rfbTranslateWithSingleTable32to16,
|
||||||
|
rfbTranslateWithSingleTable32to32 }
|
||||||
|
};
|
||||||
|
|
||||||
|
rfbTranslateFnType rfbTranslateWithRGBTablesFns[3][3] = {
|
||||||
|
{ rfbTranslateWithRGBTables8to8,
|
||||||
|
rfbTranslateWithRGBTables8to16,
|
||||||
|
rfbTranslateWithRGBTables8to32 },
|
||||||
|
{ rfbTranslateWithRGBTables16to8,
|
||||||
|
rfbTranslateWithRGBTables16to16,
|
||||||
|
rfbTranslateWithRGBTables16to32 },
|
||||||
|
{ rfbTranslateWithRGBTables32to8,
|
||||||
|
rfbTranslateWithRGBTables32to16,
|
||||||
|
rfbTranslateWithRGBTables32to32 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbTranslateNone is used when no translation is required.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbTranslateNone(char *table, rfbPixelFormat *in, rfbPixelFormat *out,
|
||||||
|
char *iptr, char *optr, int bytesBetweenInputLines,
|
||||||
|
int width, int height)
|
||||||
|
{
|
||||||
|
int bytesPerOutputLine = width * (out->bitsPerPixel / 8);
|
||||||
|
|
||||||
|
while (height > 0) {
|
||||||
|
memcpy(optr, iptr, bytesPerOutputLine);
|
||||||
|
iptr += bytesBetweenInputLines;
|
||||||
|
optr += bytesPerOutputLine;
|
||||||
|
height--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSetTranslateFunction sets the translation function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSetTranslateFunction(cl)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
rfbLog("Pixel format for client %s:\n",cl->host);
|
||||||
|
PrintPixelFormat(&cl->format);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check that bits per pixel values are valid
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((cl->screen->rfbServerFormat.bitsPerPixel != 8) &&
|
||||||
|
(cl->screen->rfbServerFormat.bitsPerPixel != 16) &&
|
||||||
|
(cl->screen->rfbServerFormat.bitsPerPixel != 32))
|
||||||
|
{
|
||||||
|
rfbLog("%s: server bits per pixel not 8, 16 or 32\n",
|
||||||
|
"rfbSetTranslateFunction");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((cl->format.bitsPerPixel != 8) &&
|
||||||
|
(cl->format.bitsPerPixel != 16) &&
|
||||||
|
(cl->format.bitsPerPixel != 32))
|
||||||
|
{
|
||||||
|
rfbLog("%s: client bits per pixel not 8, 16 or 32\n",
|
||||||
|
"rfbSetTranslateFunction");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!cl->format.trueColour && (cl->format.bitsPerPixel != 8)) {
|
||||||
|
rfbLog("rfbSetTranslateFunction: client has colour map "
|
||||||
|
"but %d-bit - can only cope with 8-bit colour maps\n",
|
||||||
|
cl->format.bitsPerPixel);
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bpp is valid, now work out how to translate
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!cl->format.trueColour) {
|
||||||
|
/*
|
||||||
|
* truecolour -> colour map
|
||||||
|
*
|
||||||
|
* Set client's colour map to BGR233, then effectively it's
|
||||||
|
* truecolour as well
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!rfbSetClientColourMapBGR233(cl))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
cl->format = BGR233Format;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* truecolour -> truecolour */
|
||||||
|
|
||||||
|
if (PF_EQ(cl->format,cl->screen->rfbServerFormat)) {
|
||||||
|
|
||||||
|
/* client & server the same */
|
||||||
|
|
||||||
|
rfbLog("no translation needed\n");
|
||||||
|
cl->translateFn = rfbTranslateNone;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((cl->screen->rfbServerFormat.bitsPerPixel < 16) ||
|
||||||
|
(!rfbEconomicTranslate && (cl->screen->rfbServerFormat.bitsPerPixel == 16))) {
|
||||||
|
|
||||||
|
/* we can use a single lookup table for <= 16 bpp */
|
||||||
|
|
||||||
|
cl->translateFn = rfbTranslateWithSingleTableFns
|
||||||
|
[cl->screen->rfbServerFormat.bitsPerPixel / 16]
|
||||||
|
[cl->format.bitsPerPixel / 16];
|
||||||
|
|
||||||
|
(*rfbInitTrueColourSingleTableFns
|
||||||
|
[cl->format.bitsPerPixel / 16]) (&cl->translateLookupTable,
|
||||||
|
&(cl->screen->rfbServerFormat), &cl->format);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* otherwise we use three separate tables for red, green and blue */
|
||||||
|
|
||||||
|
cl->translateFn = rfbTranslateWithRGBTablesFns
|
||||||
|
[cl->screen->rfbServerFormat.bitsPerPixel / 16]
|
||||||
|
[cl->format.bitsPerPixel / 16];
|
||||||
|
|
||||||
|
(*rfbInitTrueColourRGBTablesFns
|
||||||
|
[cl->format.bitsPerPixel / 16]) (&cl->translateLookupTable,
|
||||||
|
&(cl->screen->rfbServerFormat), &cl->format);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSetClientColourMapBGR233 sets the client's colour map so that it's
|
||||||
|
* just like an 8-bit BGR233 true colour client.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
rfbSetClientColourMapBGR233(cl)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
{
|
||||||
|
char buf[sz_rfbSetColourMapEntriesMsg + 256 * 3 * 2];
|
||||||
|
rfbSetColourMapEntriesMsg *scme = (rfbSetColourMapEntriesMsg *)buf;
|
||||||
|
CARD16 *rgb = (CARD16 *)(&buf[sz_rfbSetColourMapEntriesMsg]);
|
||||||
|
int i, len;
|
||||||
|
int r, g, b;
|
||||||
|
|
||||||
|
if (cl->format.bitsPerPixel != 8) {
|
||||||
|
rfbLog("%s: client not 8 bits per pixel\n",
|
||||||
|
"rfbSetClientColourMapBGR233");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
scme->type = rfbSetColourMapEntries;
|
||||||
|
|
||||||
|
scme->firstColour = Swap16IfLE(0);
|
||||||
|
scme->nColours = Swap16IfLE(256);
|
||||||
|
|
||||||
|
len = sz_rfbSetColourMapEntriesMsg;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
for (b = 0; b < 4; b++) {
|
||||||
|
for (g = 0; g < 8; g++) {
|
||||||
|
for (r = 0; r < 8; r++) {
|
||||||
|
rgb[i++] = Swap16IfLE(r * 65535 / 7);
|
||||||
|
rgb[i++] = Swap16IfLE(g * 65535 / 7);
|
||||||
|
rgb[i++] = Swap16IfLE(b * 65535 / 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len += 256 * 3 * 2;
|
||||||
|
|
||||||
|
if (WriteExact(cl, buf, len) < 0) {
|
||||||
|
rfbLogPerror("rfbSetClientColourMapBGR233: write");
|
||||||
|
rfbCloseClient(cl);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NOT_YET
|
||||||
|
/*
|
||||||
|
* rfbSetClientColourMap is called to set the client's colour map. If the
|
||||||
|
* client is a true colour client, we simply update our own translation table
|
||||||
|
* and mark the whole screen as having been modified.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSetClientColourMap(cl, firstColour, nColours)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int firstColour;
|
||||||
|
int nColours;
|
||||||
|
{
|
||||||
|
EntryPtr pent;
|
||||||
|
int i, r, g, b;
|
||||||
|
BoxRec box;
|
||||||
|
|
||||||
|
if (nColours == 0) {
|
||||||
|
nColours = rfbInstalledColormap->pVisual->ColormapEntries;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rfbServerFormat.trueColour || !cl->readyForSetColourMapEntries) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cl->format.trueColour) {
|
||||||
|
(*rfbInitColourMapSingleTableFns
|
||||||
|
[cl->format.bitsPerPixel / 16]) (&cl->translateLookupTable,
|
||||||
|
&rfbServerFormat, &cl->format);
|
||||||
|
|
||||||
|
REGION_UNINIT(pScreen,&cl->modifiedRegion);
|
||||||
|
box.x1 = box.y1 = 0;
|
||||||
|
box.x2 = rfbScreen.width;
|
||||||
|
box.y2 = rfbScreen.height;
|
||||||
|
REGION_INIT(pScreen,&cl->modifiedRegion,&box,0);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rfbSendSetColourMapEntries(cl, firstColour, nColours);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSetClientColourMaps sets the colour map for each RFB client.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
rfbSetClientColourMaps(rfbScreen, firstColour, nColours)
|
||||||
|
rfbScreenInfoPtr rfbScreen;
|
||||||
|
int firstColour;
|
||||||
|
int nColours;
|
||||||
|
{
|
||||||
|
rfbClientPtr cl, nextCl;
|
||||||
|
|
||||||
|
for (cl = rfbScreen->rfbClientHead; cl; cl = nextCl) {
|
||||||
|
nextCl = cl->next;
|
||||||
|
rfbSetClientColourMap(cl, firstColour, nColours);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
PrintPixelFormat(pf)
|
||||||
|
rfbPixelFormat *pf;
|
||||||
|
{
|
||||||
|
if (pf->bitsPerPixel == 1) {
|
||||||
|
rfbLog(" 1 bpp, %s sig bit in each byte is leftmost on the screen.\n",
|
||||||
|
(pf->bigEndian ? "most" : "least"));
|
||||||
|
} else {
|
||||||
|
rfbLog(" %d bpp, depth %d%s\n",pf->bitsPerPixel,pf->depth,
|
||||||
|
((pf->bitsPerPixel == 8) ? ""
|
||||||
|
: (pf->bigEndian ? ", big endian" : ", little endian")));
|
||||||
|
if (pf->trueColour) {
|
||||||
|
rfbLog(" true colour: max r %d g %d b %d, shift r %d g %d b %d\n",
|
||||||
|
pf->redMax, pf->greenMax, pf->blueMax,
|
||||||
|
pf->redShift, pf->greenShift, pf->blueShift);
|
||||||
|
} else {
|
||||||
|
rfbLog(" uses a colour map (not true colour).\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,205 @@
|
|||||||
|
/* XALLOC -- X's internal memory allocator. Why does it return unsigned
|
||||||
|
* long * instead of the more common char *? Well, if you read K&R you'll
|
||||||
|
* see they say that alloc must return a pointer "suitable for conversion"
|
||||||
|
* to whatever type you really want. In a full-blown generic allocator
|
||||||
|
* there's no way to solve the alignment problems without potentially
|
||||||
|
* wasting lots of space. But we have a more limited problem. We know
|
||||||
|
* we're only ever returning pointers to structures which will have to
|
||||||
|
* be long word aligned. So we are making a stronger guarantee. It might
|
||||||
|
* have made sense to make Xalloc return char * to conform with people's
|
||||||
|
* expectations of malloc, but this makes lint happier.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <X11/Xwinsock.h>
|
||||||
|
#endif
|
||||||
|
#include "Xos.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "misc.h"
|
||||||
|
#include "X.h"
|
||||||
|
#include "input.h"
|
||||||
|
#include "opaque.h"
|
||||||
|
#ifdef X_POSIX_C_SOURCE
|
||||||
|
#define _POSIX_C_SOURCE X_POSIX_C_SOURCE
|
||||||
|
#include <signal.h>
|
||||||
|
#undef _POSIX_C_SOURCE
|
||||||
|
#else
|
||||||
|
#if defined(X_NOT_POSIX) || defined(_POSIX_SOURCE)
|
||||||
|
#include <signal.h>
|
||||||
|
#else
|
||||||
|
#define _POSIX_SOURCE
|
||||||
|
#include <signal.h>
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if !defined(SYSV) && !defined(AMOEBA) && !defined(_MINIX) && !defined(WIN32) && !defined(Lynx)
|
||||||
|
#include <sys/resource.h>
|
||||||
|
#endif
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <ctype.h> /* for isspace */
|
||||||
|
#if NeedVarargsPrototypes
|
||||||
|
#include <stdarg.h>
|
||||||
|
#endif
|
||||||
|
#ifdef __sgi__
|
||||||
|
#undef abs
|
||||||
|
#endif
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifndef INTERNAL_MALLOC
|
||||||
|
|
||||||
|
Bool Must_have_memory = FALSE;
|
||||||
|
|
||||||
|
unsigned long *
|
||||||
|
Xalloc (amount)
|
||||||
|
unsigned long amount;
|
||||||
|
{
|
||||||
|
#if !defined(__STDC__) && !defined(AMOEBA)
|
||||||
|
char *malloc();
|
||||||
|
#endif
|
||||||
|
register pointer ptr;
|
||||||
|
|
||||||
|
if ((long)amount <= 0) {
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
}
|
||||||
|
/* aligned extra on long word boundary */
|
||||||
|
amount = (amount + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
|
||||||
|
#ifdef MEMBUG
|
||||||
|
if (!Must_have_memory && Memory_fail &&
|
||||||
|
((random() % MEM_FAIL_SCALE) < Memory_fail))
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
#endif
|
||||||
|
if ((ptr = (pointer)malloc(amount))) {
|
||||||
|
return (unsigned long *)ptr;
|
||||||
|
}
|
||||||
|
if (Must_have_memory)
|
||||||
|
FatalError("Out of memory");
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
* XNFalloc
|
||||||
|
* "no failure" realloc, alternate interface to Xalloc w/o Must_have_memory
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
unsigned long *
|
||||||
|
XNFalloc (amount)
|
||||||
|
unsigned long amount;
|
||||||
|
{
|
||||||
|
#if !defined(__STDC__) && !defined(AMOEBA)
|
||||||
|
char *malloc();
|
||||||
|
#endif
|
||||||
|
register pointer ptr;
|
||||||
|
|
||||||
|
if ((long)amount <= 0)
|
||||||
|
{
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
}
|
||||||
|
/* aligned extra on long word boundary */
|
||||||
|
amount = (amount + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
|
||||||
|
ptr = (pointer)malloc(amount);
|
||||||
|
if (!ptr)
|
||||||
|
{
|
||||||
|
FatalError("Out of memory");
|
||||||
|
}
|
||||||
|
return ((unsigned long *)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
* Xcalloc
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
unsigned long *
|
||||||
|
Xcalloc (amount)
|
||||||
|
unsigned long amount;
|
||||||
|
{
|
||||||
|
unsigned long *ret;
|
||||||
|
|
||||||
|
ret = Xalloc (amount);
|
||||||
|
if (ret)
|
||||||
|
bzero ((char *) ret, (int) amount);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
* Xrealloc
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
unsigned long *
|
||||||
|
Xrealloc (ptr, amount)
|
||||||
|
register pointer ptr;
|
||||||
|
unsigned long amount;
|
||||||
|
{
|
||||||
|
#if !defined(__STDC__) && !defined(AMOEBA)
|
||||||
|
char *malloc();
|
||||||
|
char *realloc();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MEMBUG
|
||||||
|
if (!Must_have_memory && Memory_fail &&
|
||||||
|
((random() % MEM_FAIL_SCALE) < Memory_fail))
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
#endif
|
||||||
|
if ((long)amount <= 0)
|
||||||
|
{
|
||||||
|
if (ptr && !amount)
|
||||||
|
free(ptr);
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
}
|
||||||
|
amount = (amount + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
|
||||||
|
if (ptr)
|
||||||
|
ptr = (pointer)realloc((char *)ptr, amount);
|
||||||
|
else
|
||||||
|
ptr = (pointer)malloc(amount);
|
||||||
|
if (ptr)
|
||||||
|
return (unsigned long *)ptr;
|
||||||
|
if (Must_have_memory)
|
||||||
|
FatalError("Out of memory");
|
||||||
|
return (unsigned long *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
* XNFrealloc
|
||||||
|
* "no failure" realloc, alternate interface to Xrealloc w/o Must_have_memory
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
unsigned long *
|
||||||
|
XNFrealloc (ptr, amount)
|
||||||
|
register pointer ptr;
|
||||||
|
unsigned long amount;
|
||||||
|
{
|
||||||
|
if (( ptr = (pointer)Xrealloc( ptr, amount ) ) == NULL)
|
||||||
|
{
|
||||||
|
FatalError( "Out of memory" );
|
||||||
|
}
|
||||||
|
return ((unsigned long *)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************
|
||||||
|
* Xfree
|
||||||
|
* calls free
|
||||||
|
*****************/
|
||||||
|
|
||||||
|
void
|
||||||
|
Xfree(ptr)
|
||||||
|
register pointer ptr;
|
||||||
|
{
|
||||||
|
if (ptr)
|
||||||
|
free((char *)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
FatalError(char *f, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
fprintf(stderr, "\nFatal server error:\n");
|
||||||
|
va_start(args, f);
|
||||||
|
vfprintf(stderr, f, args);
|
||||||
|
va_end(args);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,306 @@
|
|||||||
|
/*
|
||||||
|
* zlib.c
|
||||||
|
*
|
||||||
|
* Routines to implement zlib based encoding (deflate).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2000 Tridia Corporation. All Rights Reserved.
|
||||||
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* This 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 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software 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 software; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||||
|
* USA.
|
||||||
|
*
|
||||||
|
* For the latest source code, please check:
|
||||||
|
*
|
||||||
|
* http://www.developVNC.org/
|
||||||
|
*
|
||||||
|
* or send email to feedback@developvnc.org.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "rfb.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* zlibBeforeBuf contains pixel data in the client's format.
|
||||||
|
* zlibAfterBuf contains the zlib (deflated) encoding version.
|
||||||
|
* If the zlib compressed/encoded version is
|
||||||
|
* larger than the raw data or if it exceeds zlibAfterBufSize then
|
||||||
|
* raw encoding is used instead.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int zlibBeforeBufSize = 0;
|
||||||
|
static char *zlibBeforeBuf = NULL;
|
||||||
|
|
||||||
|
static int zlibAfterBufSize = 0;
|
||||||
|
static char *zlibAfterBuf = NULL;
|
||||||
|
static int zlibAfterBufLen;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSendOneRectEncodingZlib - send a given rectangle using one Zlib
|
||||||
|
* rectangle encoding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSendOneRectEncodingZlib(cl, x, y, w, h)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int x, y, w, h;
|
||||||
|
{
|
||||||
|
rfbFramebufferUpdateRectHeader rect;
|
||||||
|
rfbZlibHeader hdr;
|
||||||
|
int deflateResult;
|
||||||
|
int previousOut;
|
||||||
|
int i;
|
||||||
|
char *fbptr = (cl->screen->frameBuffer + (cl->screen->paddedWidthInBytes * y)
|
||||||
|
+ (x * (cl->screen->bitsPerPixel / 8)));
|
||||||
|
|
||||||
|
int maxRawSize;
|
||||||
|
int maxCompSize;
|
||||||
|
|
||||||
|
maxRawSize = (cl->screen->width * cl->screen->height
|
||||||
|
* (cl->format.bitsPerPixel / 8));
|
||||||
|
|
||||||
|
if (zlibBeforeBufSize < maxRawSize) {
|
||||||
|
zlibBeforeBufSize = maxRawSize;
|
||||||
|
if (zlibBeforeBuf == NULL)
|
||||||
|
zlibBeforeBuf = (char *)xalloc(zlibBeforeBufSize);
|
||||||
|
else
|
||||||
|
zlibBeforeBuf = (char *)xrealloc(zlibBeforeBuf, zlibBeforeBufSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zlib compression is not useful for very small data sets.
|
||||||
|
* So, we just send these raw without any compression.
|
||||||
|
*/
|
||||||
|
if (( w * h * (cl->screen->bitsPerPixel / 8)) <
|
||||||
|
VNC_ENCODE_ZLIB_MIN_COMP_SIZE ) {
|
||||||
|
|
||||||
|
int result;
|
||||||
|
|
||||||
|
/* The translation function (used also by the in raw encoding)
|
||||||
|
* requires 4/2/1 byte alignment in the output buffer (which is
|
||||||
|
* updateBuf for the raw encoding) based on the bitsPerPixel of
|
||||||
|
* the viewer/client. This prevents SIGBUS errors on some
|
||||||
|
* architectures like SPARC, PARISC...
|
||||||
|
*/
|
||||||
|
if (( cl->format.bitsPerPixel > 8 ) &&
|
||||||
|
( cl->ublen % ( cl->format.bitsPerPixel / 8 )) != 0 ) {
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = rfbSendRectEncodingRaw(cl, x, y, w, h);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* zlib requires output buffer to be slightly larger than the input
|
||||||
|
* buffer, in the worst case.
|
||||||
|
*/
|
||||||
|
maxCompSize = maxRawSize + (( maxRawSize + 99 ) / 100 ) + 12;
|
||||||
|
|
||||||
|
if (zlibAfterBufSize < maxCompSize) {
|
||||||
|
zlibAfterBufSize = maxCompSize;
|
||||||
|
if (zlibAfterBuf == NULL)
|
||||||
|
zlibAfterBuf = (char *)xalloc(zlibAfterBufSize);
|
||||||
|
else
|
||||||
|
zlibAfterBuf = (char *)xrealloc(zlibAfterBuf, zlibAfterBufSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert pixel data to client format.
|
||||||
|
*/
|
||||||
|
(*cl->translateFn)(cl->translateLookupTable, &cl->screen->rfbServerFormat,
|
||||||
|
&cl->format, fbptr, zlibBeforeBuf,
|
||||||
|
cl->screen->paddedWidthInBytes, w, h);
|
||||||
|
|
||||||
|
cl->compStream.next_in = ( Bytef * )zlibBeforeBuf;
|
||||||
|
cl->compStream.avail_in = w * h * (cl->format.bitsPerPixel / 8);
|
||||||
|
cl->compStream.next_out = ( Bytef * )zlibAfterBuf;
|
||||||
|
cl->compStream.avail_out = maxCompSize;
|
||||||
|
cl->compStream.data_type = Z_BINARY;
|
||||||
|
|
||||||
|
/* Initialize the deflation state. */
|
||||||
|
if ( cl->compStreamInited == FALSE ) {
|
||||||
|
|
||||||
|
cl->compStream.total_in = 0;
|
||||||
|
cl->compStream.total_out = 0;
|
||||||
|
cl->compStream.zalloc = Z_NULL;
|
||||||
|
cl->compStream.zfree = Z_NULL;
|
||||||
|
cl->compStream.opaque = Z_NULL;
|
||||||
|
|
||||||
|
deflateInit2( &(cl->compStream),
|
||||||
|
cl->zlibCompressLevel,
|
||||||
|
Z_DEFLATED,
|
||||||
|
MAX_WBITS,
|
||||||
|
MAX_MEM_LEVEL,
|
||||||
|
Z_DEFAULT_STRATEGY );
|
||||||
|
/* deflateInit( &(cl->compStream), Z_BEST_COMPRESSION ); */
|
||||||
|
/* deflateInit( &(cl->compStream), Z_BEST_SPEED ); */
|
||||||
|
cl->compStreamInited = TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
previousOut = cl->compStream.total_out;
|
||||||
|
|
||||||
|
/* Perform the compression here. */
|
||||||
|
deflateResult = deflate( &(cl->compStream), Z_SYNC_FLUSH );
|
||||||
|
|
||||||
|
/* Find the total size of the resulting compressed data. */
|
||||||
|
zlibAfterBufLen = cl->compStream.total_out - previousOut;
|
||||||
|
|
||||||
|
if ( deflateResult != Z_OK ) {
|
||||||
|
rfbLog("zlib deflation error: %s\n", cl->compStream.msg);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Note that it is not possible to switch zlib parameters based on
|
||||||
|
* the results of the compression pass. The reason is
|
||||||
|
* that we rely on the compressor and decompressor states being
|
||||||
|
* in sync. Compressing and then discarding the results would
|
||||||
|
* cause lose of synchronization.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Update statics */
|
||||||
|
cl->rfbRectanglesSent[rfbEncodingZlib]++;
|
||||||
|
cl->rfbBytesSent[rfbEncodingZlib] += (sz_rfbFramebufferUpdateRectHeader
|
||||||
|
+ sz_rfbZlibHeader + zlibAfterBufLen);
|
||||||
|
|
||||||
|
if (cl->ublen + sz_rfbFramebufferUpdateRectHeader + sz_rfbZlibHeader
|
||||||
|
> UPDATE_BUF_SIZE)
|
||||||
|
{
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.r.x = Swap16IfLE(x);
|
||||||
|
rect.r.y = Swap16IfLE(y);
|
||||||
|
rect.r.w = Swap16IfLE(w);
|
||||||
|
rect.r.h = Swap16IfLE(h);
|
||||||
|
rect.encoding = Swap32IfLE(rfbEncodingZlib);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&rect,
|
||||||
|
sz_rfbFramebufferUpdateRectHeader);
|
||||||
|
cl->ublen += sz_rfbFramebufferUpdateRectHeader;
|
||||||
|
|
||||||
|
hdr.nBytes = Swap32IfLE(zlibAfterBufLen);
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], (char *)&hdr, sz_rfbZlibHeader);
|
||||||
|
cl->ublen += sz_rfbZlibHeader;
|
||||||
|
|
||||||
|
for (i = 0; i < zlibAfterBufLen;) {
|
||||||
|
|
||||||
|
int bytesToCopy = UPDATE_BUF_SIZE - cl->ublen;
|
||||||
|
|
||||||
|
if (i + bytesToCopy > zlibAfterBufLen) {
|
||||||
|
bytesToCopy = zlibAfterBufLen - i;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&cl->updateBuf[cl->ublen], &zlibAfterBuf[i], bytesToCopy);
|
||||||
|
|
||||||
|
cl->ublen += bytesToCopy;
|
||||||
|
i += bytesToCopy;
|
||||||
|
|
||||||
|
if (cl->ublen == UPDATE_BUF_SIZE) {
|
||||||
|
if (!rfbSendUpdateBuf(cl))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rfbSendRectEncodingZlib - send a given rectangle using one or more
|
||||||
|
* Zlib encoding rectangles.
|
||||||
|
*/
|
||||||
|
|
||||||
|
Bool
|
||||||
|
rfbSendRectEncodingZlib(cl, x, y, w, h)
|
||||||
|
rfbClientPtr cl;
|
||||||
|
int x, y, w, h;
|
||||||
|
{
|
||||||
|
int totalSize = 0;
|
||||||
|
int partialSize = 0;
|
||||||
|
int maxLines;
|
||||||
|
int linesRemaining;
|
||||||
|
rfbRectangle partialRect;
|
||||||
|
|
||||||
|
partialRect.x = x;
|
||||||
|
partialRect.y = y;
|
||||||
|
partialRect.w = w;
|
||||||
|
partialRect.h = h;
|
||||||
|
|
||||||
|
/* Determine maximum pixel/scan lines allowed per rectangle. */
|
||||||
|
maxLines = ( ZLIB_MAX_SIZE(w) / w );
|
||||||
|
|
||||||
|
/* Initialize number of scan lines left to do. */
|
||||||
|
linesRemaining = h;
|
||||||
|
|
||||||
|
/* Loop until all work is done. */
|
||||||
|
while ( linesRemaining > 0 ) {
|
||||||
|
|
||||||
|
int linesToComp;
|
||||||
|
|
||||||
|
if ( maxLines < linesRemaining )
|
||||||
|
linesToComp = maxLines;
|
||||||
|
else
|
||||||
|
linesToComp = linesRemaining;
|
||||||
|
|
||||||
|
partialRect.h = linesToComp;
|
||||||
|
|
||||||
|
/* Encode (compress) and send the next rectangle. */
|
||||||
|
if ( ! rfbSendOneRectEncodingZlib( cl,
|
||||||
|
partialRect.x,
|
||||||
|
partialRect.y,
|
||||||
|
partialRect.w,
|
||||||
|
partialRect.h )) {
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Technically, flushing the buffer here is not extrememly
|
||||||
|
* efficient. However, this improves the overall throughput
|
||||||
|
* of the system over very slow networks. By flushing
|
||||||
|
* the buffer with every maximum size zlib rectangle, we
|
||||||
|
* improve the pipelining usage of the server CPU, network,
|
||||||
|
* and viewer CPU components. Insuring that these components
|
||||||
|
* are working in parallel actually improves the performance
|
||||||
|
* seen by the user.
|
||||||
|
* Since, zlib is most useful for slow networks, this flush
|
||||||
|
* is appropriate for the desired behavior of the zlib encoding.
|
||||||
|
*/
|
||||||
|
if (( cl->ublen > 0 ) &&
|
||||||
|
( linesToComp == maxLines )) {
|
||||||
|
if (!rfbSendUpdateBuf(cl)) {
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update remaining and incremental rectangle location. */
|
||||||
|
linesRemaining -= linesToComp;
|
||||||
|
partialRect.y += linesToComp;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in new issue