Vnc: module # vnc.b { PATH : con "/dis/lib/vnc.dis"; init: fn(ctxt: ref Draw->Context, argv: list of string); Rect : adt { x, y, w, h : int; to_string : fn(r : self ref Rect) : string; }; ServerIO : adt { in, out : ref Iobuf; pick { cmd => clone : ref Sys->FD; ctl : ref Sys->FD; conn => connection : Sys->Connection; } read : fn(s : self ref ServerIO, n : int) : array of byte; read_int : fn(s : self ref ServerIO, byte_count : int) : int; read_rect : fn(s : self ref ServerIO, byte_count : int) : ref Rect; read_sint : fn(s : self ref ServerIO, byte_count : int) : int; read_string : fn(s : self ref ServerIO) : string; write : fn(s : self ref ServerIO, data : array of byte, n : int); write_int : fn(s : self ref ServerIO, i, byte_count : int); write_rect : fn(s : self ref ServerIO, r : ref Rect, byte_count : int); }; Server : adt { # vnc.b io : ref ServerIO; protocol : int; width : int; height : int; bpp : int; depth : int; big_endian : int; truecolour : int; redmax : int; greenmax : int; bluemax : int; redshift : int; greenshift : int; blueshift : int; name : string; image : ref Image; updates : chan of ref Rect; handshake : fn(s : self ref Server, password : string, protocol_ver, client_security_type, exclusive : int); init : fn(s : self ref Server); to_string : fn(s : self ref Server) : string; set_exclusive : fn(s : self ref Server, exclusive : int); send_framebuffer_request : fn(s : self ref Server, incremental : int, r : ref Rect); update_framebuffer : fn(s : self ref Server, num_rectangles : int); update_fb_raw : fn(s : self ref Server, r : ref Rect); key_event : fn(s : self ref Server, k, down : int); key_press : fn(s : self ref Server, k : int); alt_key_press : fn(s : self ref Server, k : int); ctrl_key_press : fn(s : self ref Server, k : int); string_press : fn(s : self ref Server, txt : string); }; new_server: fn(addr, password : string, protocol_ver, client_security_type, exclusive : int) : ref Server; RRE_Rectangle : adt { pixel : array of byte; x : int; y : int; w : int; h : int; }; Hextile_Rectangle : adt { pixel : array of byte; x : int; y : int; w : int; h : int; }; Rectangle : adt { x : int; y : int; w : int; h : int; pick { Raw => pixels : array of byte; CopyRect => x_src : int; y_src : int; RRE => bg_pixel : array of byte; sub_rectangles : array of RRE_Rectangle; Hextile => hextype : int; rectangles : array of Hextile_Rectangle; ZRLE => data : array of byte; Cursor => pixels : array of byte; bitmask : array of byte; Desktop => } # encoding : int; # 0 Raw, 1 CopyRect, 2 RRE, 4, CoREE, 5 Hextile, 6 zlib, 7 tight, 8 zlibhex, 15 TRLE, 16 ZRLE, 17 Hitachi ZYWRLE, -1 to -222 & -224 to -238 & -240 to-256 Tight options, -239 Cursor, -223 DesktopSize, -273 to -304 VMWare, -305 gii, 0x574d5600 to 0x574d56ff VMWare }; Colour_Map : adt { r : int; g : int; b : int; }; Server_Message : adt { pick { Version => major : int; minor : int; Security_Types => types : array of int; # 0 invalid, 1 None, 2 VNC Auth, error : string; Security_Result => status : int; # 0 ok, 1 failed error : string; VNC_Auth => challenge : array of byte; # 16 bytes } }; Client_Message : adt { pick { Version => major : int; minor : int; VNC_Auth => response : array of byte;# 16 bytes Client_Init => shared : int; Set_Pixel_Format => # 0 bpp : int; depth : int; big_endian : int; truecolour : int; redmax : int; greenmax : int; bluemax : int; redshift : int; greenshift : int; blueshift : int; Set_Encodings => # 2 encoding_types : array of int; Framebuffer_Update_Request => # 3 incremental : int; x : int; y : int; w : int; h : int; Key_Event => # 4 down : int; key : int; # see X11/keysymdef.h Pointer_Event => # 5 button_mask : int; x : int; y : int; Client_Cut_Text => # 6 text : string; Anthony_Liguori => # 255 VMWare => # 254 & 127 Gii => # 253 } }; };