1 /* 2 * xsel -- manipulate the X selection 3 * Copyright (C) 2001 Conrad Parker <conrad@vergenet.net> 4 * 5 * Permission to use, copy, modify, distribute, and sell this software and 6 * its documentation for any purpose is hereby granted without fee, provided 7 * that the above copyright notice appear in all copies and that both that 8 * copyright notice and this permission notice appear in supporting 9 * documentation. No representations are made about the suitability of this 10 * software for any purpose. It is provided "as is" without express or 11 * implied warranty. 12 */ 13 14 #define AUTHOR "Conrad Parker <conrad@vergenet.net>" 15 16 /* Default debug level (ship at 0) */ 17 #define DEBUG_LEVEL 0 18 19 #define MAX(a,b) ((a)>(b)?(a):(b)) 20 #define MIN(a,b) ((a)<(b)?(a):(b)) 21 22 #define empty_string(s) (s==NULL||s[0]=='\0') 23 #define free_string(s) { free(s); s=NULL; } 24 25 /* Maximum line length for error messages */ 26 #define MAXLINE 4096 27 28 /* Maximum filename length */ 29 #define MAXFNAME 1024 30 31 /* Maximum incremental selection size. (Ripped from Xt) */ 32 #define MAX_SELECTION_INCR(dpy) (((65536 < XMaxRequestSize(dpy)) ? \ 33 (65536 << 2) : (XMaxRequestSize(dpy) << 2))-100) 34 35 /* 36 * Debug levels (for print_debug()): 37 * 38 * 0 - Fatal errors (default/unmaskable) 39 * 1 - Non-fatal warning (essential debugging info) 40 * 2 - Informative (generally useful debugging info) 41 * 3 - Obscure (more detailed debugging info) 42 * 4 - Trace (sequential trace of progress) 43 */ 44 45 #define D_FATAL 0 46 #define D_WARN 1 47 #define D_INFO 2 48 #define D_OBSC 3 49 #define D_TRACE 4 50 51 /* An instance of a MULTIPLE SelectionRequest being served */ 52 typedef struct _MultTrack MultTrack; 53 54 struct _MultTrack { 55 MultTrack * mparent; 56 Display * display; 57 Window requestor; 58 Atom property; 59 Atom selection; 60 Time time; 61 Atom * atoms; 62 unsigned long length; 63 unsigned long index; 64 unsigned char * sel; 65 }; 66 67 /* Selection serving states */ 68 typedef enum { 69 S_NULL=0, 70 S_INCR_1, 71 S_INCR_2 72 } IncrState; 73 74 /* An instance of a selection being served */ 75 typedef struct _IncrTrack IncrTrack; 76 77 struct _IncrTrack { 78 MultTrack * mparent; 79 IncrTrack * prev, * next; 80 IncrState state; 81 Display * display; 82 Window requestor; 83 Atom property; 84 Atom selection; 85 Time time; 86 Atom target; 87 int format; 88 unsigned char * data; 89 int nelements; /* total */ 90 int offset, chunk, max_elements; /* all in terms of nelements */ 91 }; 92 93 /* Status of request handling */ 94 typedef int HandleResult; 95 #define HANDLE_OK 0 96 #define HANDLE_ERR (1<<0) 97 #define HANDLE_INCOMPLETE (1<<1) 98 #define DID_DELETE (1<<2) 99