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