1 /*
2  * Copyright 1990 Network Computing Devices;
3  * Portions Copyright 1987 by Digital Equipment Corporation
4  *
5  * Permission to use, copy, modify, distribute, and sell this software
6  * and its documentation for any purpose is hereby granted without fee,
7  * provided that the above copyright notice appear in all copies and
8  * that both that copyright notice and this permission notice appear
9  * in supporting documentation, and that the names of Network Computing
10  * Devices or Digital not be used in advertising or publicity pertaining
11  * to distribution of the software without specific, written prior
12  * permission. Network Computing Devices or Digital make no representations
13  * about the suitability of this software for any purpose.  It is provided
14  * "as is" without express or implied warranty.
15  *
16  * NETWORK COMPUTING DEVICES AND  DIGITAL DISCLAIM ALL WARRANTIES WITH
17  * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NETWORK COMPUTING DEVICES
19  * OR DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES
20  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
21  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
22  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
23  * SOFTWARE.
24  */
25 
26 /*
27 
28 Copyright 1987, 1994, 1998  The Open Group
29 
30 Permission to use, copy, modify, distribute, and sell this software and its
31 documentation for any purpose is hereby granted without fee, provided that
32 the above copyright notice appear in all copies and that both that
33 copyright notice and this permission notice appear in supporting
34 documentation.
35 
36 The above copyright notice and this permission notice shall be included in
37 all copies or substantial portions of the Software.
38 
39 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
42 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
43 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
44 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45 
46 Except as contained in this notice, the name of The Open Group shall not be
47 used in advertising or otherwise to promote the sale, use or other dealings
48 in this Software without prior written authorization from The Open Group.
49 
50 */
51 
52 /*
53  * Font server C interface library
54  */
55 
56 #ifndef _FSLIB_H_
57 #define _FSLIB_H_
58 
59 #include	<X11/Xfuncproto.h>
60 
61 #include	<X11/fonts/FS.h>
62 #include	<X11/fonts/FSproto.h>
63 
64 #define	Bool	int
65 #define	Status	int
66 #define	True	1
67 #define	False	0
68 
69 #define QueuedAlready 0
70 #define QueuedAfterReading 1
71 #define QueuedAfterFlush 2
72 
73 #define	FSServerString(svr)	((svr)->server_name)
74 #define	FSVendorRelease(svr)	((svr)->release)
75 #define	FSProtocolVersion(svr)	((svr)->proto_version)
76 #define	FSServerVendor(svr)	((svr)->vendor)
77 #define	FSAuthorizationData(svr)	((svr)->auth_data)
78 #define	FSAlternateServers(svr)	((svr)->alternate_servers)
79 #define	FSNumAlternateServers(svr)	((svr)->num_alternates)
80 #define	FSQLength(svr)		((svr)->qlen)
81 #define	FSNextRequest(svr)	((svr)->request + 1)
82 #define FSLastKnownRequestProcessed(svr)   ((svr)->last_request_read)
83 
84 #define	FSAllocID(svr)		((*(svr)->resource_alloc)((svr)))
85 
86 typedef struct _alternate {
87     Bool        subset;
88     char       *name;
89 }           AlternateServer;
90 
91 /* extension stuff */
92 typedef struct _FSExtData {
93     int         number;		/* number returned by FSRegisterExtension */
94     struct _FSExtData *next;	/* next item on list of data for structure */
95     int         (*free_private) (char *); /* called to free private storage */
96     char       *private_data;	/* data private to this extension. */
97 }           FSExtData;
98 
99 
100 typedef struct {		/* public to extension, cannot be changed */
101     int         extension;	/* extension number */
102     int         major_opcode;	/* major op-code assigned by server */
103     int         first_event;	/* first event number for the extension */
104     int         first_error;	/* first error number for the extension */
105 }           FSExtCodes;
106 
107 typedef struct _FSServer FSServer;
108 typedef union _FSEvent FSEvent;
109 
110 typedef struct _FSExtent {
111     struct _FSExtent *next;	/* next in list */
112     FSExtCodes  codes;		/* public information, all extension told */
113     int         (*close_server) (FSServer *, FSExtCodes *);	/* routine to call when connection
114 					 * closed */
115     int         (*error) (FSServer *, fsError *, FSExtCodes *, int *);	/* who to call when an error occurs */
116     int         (*error_string) (FSServer *, int, FSExtCodes *, char *, int);	/* routine to supply error string */
117     char       *name;
118 }           _FSExtension;
119 
120 typedef int (*FSSyncHandler)(FSServer *);
121 
122 /* server data structure */
123 struct _FSServer {
124     struct _FSServer *next;
125     int         fd;
126     int         proto_version;
127     char       *vendor;
128     int         byte_order;
129     int         vnumber;
130     int         release;
131     int         resource_id;
132     struct _FSQEvent *head,
133                *tail;
134     int         qlen;
135     unsigned long last_request_read;
136     unsigned long request;
137     char       *last_req;
138     char       *buffer;
139     char       *bufptr;
140     char       *bufmax;
141     unsigned    max_request_size;
142     char       *server_name;
143     char       *auth_data;
144     AlternateServer *alternate_servers;
145     int         num_alternates;
146     FSExtData  *ext_data;
147     _FSExtension *ext_procs;
148     int         ext_number;
149     Bool        (*event_vec[132]) (FSServer *, FSEvent *, fsEvent *);
150     Status	(*wire_vec[132]) (FSServer *, FSEvent *, fsEvent *);
151     void         *unused_1; /* previously scratch_buffer */
152     unsigned long unused_2; /* previously scratch_length */
153     FSSyncHandler synchandler;
154     unsigned long flags;
155     struct _XtransConnInfo *trans_conn; /* transport connection object */
156 };
157 
158 typedef struct {
159     int         type;
160     unsigned long serial;
161     Bool        send_event;
162     FSServer   *server;
163 }           FSAnyEvent;
164 
165 typedef struct {
166     int         type;
167     FSServer   *server;
168     FSID        resourceid;
169     unsigned long serial;
170     unsigned char error_code;
171     unsigned char request_code;
172     unsigned char minor_code;
173 }           FSErrorEvent;
174 
175 union _FSEvent {
176     int         type;
177     FSAnyEvent  fsany;
178 };
179 
180 typedef struct _FSQEvent {
181     struct _FSQEvent *next;
182     FSEvent     event;
183 }           _FSQEvent;
184 
185 
186 /* protocol-related stuctures */
187 
188 typedef unsigned long  FSBitmapFormat;
189 typedef unsigned long  FSBitmapFormatMask;
190 
191 typedef struct _FSChar2b {
192     unsigned char       high;
193     unsigned char       low;
194 } FSChar2b;
195 
196 typedef struct _FSRange {
197     FSChar2b    min_char;
198     FSChar2b    max_char;
199 } FSRange;
200 
201 typedef struct _FSOffset {
202     unsigned int position;
203     unsigned int length;
204 } FSOffset;
205 
206 /* use names as in xCharInfo? */
207 typedef struct _FSXCharInfo {
208     short 	left;
209     short       right;
210     short 	width;
211     short 	ascent;
212     short       descent;
213     unsigned short 	attributes;
214 } FSXCharInfo;
215 
216 typedef struct _FSPropOffset {
217     FSOffset	name;
218     FSOffset	value;
219     unsigned char 	type;
220 } FSPropOffset;
221 
222 typedef struct _FSPropInfo {
223     unsigned int	num_offsets;
224     unsigned int	data_len;
225 } FSPropInfo;
226 
227 /* should names match FontInfoRec? */
228 typedef struct _FSXFontInfoHeader {
229     int		flags;
230     FSRange     char_range;
231     unsigned	draw_direction;
232     FSChar2b    default_char;
233     FSXCharInfo	min_bounds;
234     FSXCharInfo	max_bounds;
235     short 	font_ascent;
236     short	font_descent;
237 } FSXFontInfoHeader;
238 
239 
240 
241 /* function decls */
242 
243 _XFUNCPROTOBEGIN
244 
245 extern FSServer * FSOpenServer ( const char *server );
246 
247 extern FSSyncHandler FSSynchronize(FSServer *, int);
248 extern FSSyncHandler FSSetAfterFunction(FSServer *, FSSyncHandler);
249 
250 extern const char * FSServerName ( const char *server );
251 extern char ** FSListExtensions ( FSServer *svr, int *next );
252 extern int FSQueryExtension ( FSServer *svr, const char *name, int *major_opcode,
253 			      int *first_event, int *first_error );
254 
255 extern char ** FSListCatalogues ( FSServer *svr, const char *pattern,
256 				  int maxNames, int *actualCount );
257 extern char ** FSGetCatalogues ( FSServer *svr, int *num );
258 
259 extern long FSMaxRequestSize ( FSServer *svr );
260 
261 extern char ** FSListFonts ( FSServer *svr, const char *pattern, int maxNames,
262 			     int *actualCount );
263 extern char ** FSListFontsWithXInfo ( FSServer *svr, const char *pattern,
264 				      int maxNames, int *count,
265 				      FSXFontInfoHeader ***info,
266 				      FSPropInfo ***pprops,
267 				      FSPropOffset ***offsets,
268 				      unsigned char ***prop_data );
269 extern Font FSOpenBitmapFont ( FSServer *svr, FSBitmapFormat hint,
270 			       FSBitmapFormatMask fmask, const char *name,
271 			       Font *otherid );
272 
273 extern int FSSync ( FSServer *svr, Bool discard );
274 
275 extern int FSCloseServer ( FSServer *svr );
276 extern int FSCloseFont ( FSServer *svr, Font fid );
277 extern int FSGetErrorDatabaseText ( FSServer *svr, const char *name,
278 				    const char *type, const char *defaultp,
279 				    char *buffer, int nbytes );
280 extern int FSGetErrorText ( FSServer *svr, int code, char *buffer,
281 			    int nbytes );
282 extern int FSFlush ( FSServer *svr );
283 extern int FSFreeFontNames ( char **list );
284 extern int FSFreeCatalogues ( char **list );
285 extern int FSFreeExtensionList ( char **list );
286 extern int FSNextEvent ( FSServer *svr, FSEvent *event );
287 extern int FSQueryXBitmaps8 ( FSServer *svr, Font fid, FSBitmapFormat format,
288 			      int range_type, const unsigned char *str,
289 			      unsigned long str_len, FSOffset **offsets,
290 			      unsigned char **glyphdata );
291 extern int FSQueryXBitmaps16 ( FSServer *svr, Font fid, FSBitmapFormat format,
292 			       int range_type, const FSChar2b *str,
293 			       unsigned long str_len, FSOffset **offsets,
294 			       unsigned char **glyphdata );
295 extern int FSQueryXExtents8 ( FSServer *svr, Font fid, int range_type,
296 			      const unsigned char *str, unsigned long str_len,
297 			      FSXCharInfo **extents );
298 extern int FSQueryXExtents16 ( FSServer *svr, Font fid, int range_type,
299 			       const FSChar2b *str, unsigned long str_len,
300 			       FSXCharInfo **extents );
301 extern int FSQueryXInfo ( FSServer *svr, Font fid, FSXFontInfoHeader *info,
302 			  FSPropInfo *props, FSPropOffset **offsets,
303 			  unsigned char **prop_data );
304 extern int FSSetCatalogues ( FSServer *svr, int num, char **cats );
305 extern int FSFree ( char *data );
306 extern unsigned char * FSMalloc ( unsigned size );
307 
308 _XFUNCPROTOEND
309 
310 #endif				/* _FSLIB_H_ */
311