1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
|
#ifndef __ximtool_h__
#define __ximtool_h__
#define XtPointer void *
#define Boolean int
#define String char *
#define Widget void *
#define PSImagePtr void *
/* Default values, size limiting values.
*/
#define MAX_FBCONFIG 128 /* max possible frame buf sizes */
#define MAX_FRAMES 16 /* max number of frames */
#define MAX_MAPPINGS 100 /* max number of mappings/frame */
#define MAX_CLIENTS 8 /* max display server clients */
#define MAX_ISM 8 /* max ISM module clients */
#define MAX_COLORMAPS 256 /* max number of colormaps */
#define MAX_COLORS 256 /* max size colormap */
#define MAX_PRINTERS 128 /* max number of printers */
#define FIRST_COLOR 10 /* first allocatable color */
#define DEF_NCOLORS 201 /* default number of colors */
#define DEF_COLORMAP 1 /* default colormap */
#define DEF_NFRAMES 1 /* save memory; only one frame */
#define DEF_FRAME_WIDTH 512 /* 512 square frame */
#define DEF_FRAME_HEIGHT 512 /* 512 square frame */
#define DEF_FRAME_DEPTH 8 /* 8 bits deep */
#define DEF_WIN_WIDTH 512 /* default size window */
#define DEF_WIN_HEIGHT 512 /* default size window */
#define DEF_TILE_BORDER 3 /* border width for tileFrames */
#define DEF_BORDER_COLOR "9" /* border highlight color */
#define SZ_CMAPNAME 32 /* colormap name buffer */
#define SZ_NAME 80 /* object name buffer */
#define SZ_LABEL 256 /* main frame label string */
#define SZ_IMTITLE 128 /* image title string */
#define SZ_WCTEXT 80 /* WCS box text */
#define SZ_OLD_WCSBUF 320 /* old WCS text buffer size */
#define SZ_WCSBUF 1024 /* WCS text buffer size */
#define SZ_MSGBUF 8192 /* message buffer size */
#define SZ_COLORBAR 11 /* height of colorbar in pixels */
#define SZ_FIFOBUF 4000 /* transfer size for FIFO i/o */
#define SZ_FNAME 256
#define SZ_LINE 256
#define ERR (-1)
#define OK 0
#define EOS '\0'
#define M_UNITARY 0 /* xim_setmapping */
#define M_ASPECT 1
#define M_FILL 2
/* Magic numbers. */
#define DEF_PORT 5137 /* default tcp/ip socket */
#define I_DEVNAME "/dev/imt1o" /* pseudo device names */
#define O_DEVNAME "/dev/imt1i" /* our IN is client's OUT */
#define DEF_UNIXADDR "/tmp/.IMT%d" /* default unix socket */
#define DEF_ANTIALIASTYPE "boxcar" /* default antialiasing */
#define FBCONFIG_1 ".imtoolrc"
#define FBCONFIG_2 "/usr/local/lib/imtoolrc"
#define CMAPCONFIG "/usr/local/lib/imtoolcmap"
#define FBCONFIG_ENV1 "imtoolrc"
#define FBCONFIG_ENV2 "IMTOOLRC"
#define PRINTCONFIG "/usr/local/lib/ximprint.cfg"
#define DEF_ISM_ADDR "/tmp/.ISM%d" /* default ISM unix socket */
#define DEF_ISM_TEMPLATE "/tmp/.ISM%d_%d" /* ISM client socket template */
#define DEF_ISM_TASK "wcspix"
#define DEF_ISM_CMD "ism_wcspix.e wcspix &"
#define SZ_ISMBUF 4096
/* WCS definitions. */
#define W_UNITARY 0
#define W_LINEAR 1
#define W_LOG 2
#define W_USER 3
#define W_DEFFORMAT " %7.2f %7.2f %7.1f%c"
/* Rotation matrix defining world coordinate system (WCS) of a frame. */
typedef struct {
int valid; /* has WCS been set? */
float a, b; /* x, y scale factors */
float c, d; /* x, y cross factors */
float tx, ty; /* x, y translation */
float z1, z2; /* greyscale range */
int zt; /* greyscale mapping */
char format[32]; /* wcs output format */
char imtitle[SZ_IMTITLE+1]; /* image title from WCS */
} Ctran, *CtranPtr;
/* Coordinate mappings on each frame buffer. */
typedef struct {
int id; /* object id */
Ctran ctran; /* world coordinate system */
char ref[SZ_FNAME+1]; /* image reference from WCS */
int regid; /* region id */
char region[SZ_FNAME+1]; /* region name from WCS */
float sx, sy; /* source rect */
int snx, sny;
int dx, dy; /* destination rect */
int dnx, dny;
} Mapping, *MappingPtr;
/* The frame buffers. */
typedef struct {
int frameno; /* frame number */
int raster; /* frame buffer raster */
int zoomras; /* zoom/pan raster */
int zoommap; /* zoom/pan mapping */
int dispmap; /* mapping used for display */
int colormap; /* greyscale transformation */
float offset, scale; /* transfer function */
float xscale, yscale; /* scaling at [xy]mag==1.0 */
float xmag, ymag; /* zoom/dezoom factors */
float xcen, ycen; /* center of zoomed region */
float xoff, yoff; /* offset of zoomed region */
int xflip, yflip; /* flip in X or Y? */
char label[SZ_LABEL+1]; /* frame label string */
Ctran ctran; /* world coordinate system */
char wcsbuf[SZ_WCSBUF]; /* wcs info string */
Mapping mapping[MAX_MAPPINGS]; /* coordinate mappings */
int nmaps; /* number of defined mappings */
} FrameBuf, *FrameBufPtr;
/* Possible frame buffer sizes. */
typedef struct {
int nframes; /* number of frames */
int width; /* frame buffer width */
int height; /* frame buffer height */
} FbConfig, *FbConfigPtr;
/* Predefined colormaps. */
typedef struct {
int mapno; /* widget colormap number */
char name[SZ_CMAPNAME+1]; /* colormap name */
} ColorMap, *ColorMapPtr;
/* Predefined lookup tables. */
typedef struct {
float red, green, blue;
} Triplet, *TripletPtr;
typedef struct {
int lutlen;
Triplet hue[MAX_COLORS];
} Lut, *LutPtr;
/* Client IIS I/O channel. */
typedef struct {
XtPointer xim; /* backpointer to xim descriptor */
int id; /* input callback id */
int type; /* channel type */
int datain; /* input channel */
int dataout; /* output channel */
int keepalive; /* used to keep input fifo ready */
char path[SZ_FNAME+1]; /* for unix sockets */
int reference_frame; /* reference (cmd i/o) frame */
int version; /* flags capability of client */
FrameBufPtr rf_p; /* reference frame descriptor */
} IoChan, *IoChanPtr;
#define IO_FIFO 1
#define IO_INET 2
#define IO_UNIX 3
/* Client ISM I/O channel. */
typedef struct {
XtPointer xim; /* backpointer to xim descriptor */
XtPointer id; /* input callback id */
int datain; /* input channel */
int dataout; /* output channel */
int connected; /* client connected? */
char name[SZ_FNAME+1]; /* client name */
char path[SZ_FNAME+1]; /* for unix sockets */
char msgbuf[SZ_ISMBUF+1]; /* incomplete message buffer */
} IsmIoChan, *IsmIoChanPtr;
/* Definitions for the supported ISM Modules. */
typedef void (*IsmFunc)();
typedef struct {
char name[SZ_FNAME]; /* name of the module */
char command[SZ_LINE]; /* cmd to execute for module */
IsmFunc startupCB; /* connection callback func */
IsmFunc shutdownCB; /* shutdown callback func */
IsmFunc commandCB; /* client command callback func */
int connected; /* client is connected */
int ref_count; /* reference count */
IsmIoChanPtr chan; /* i/o channel */
} ismModule, *IsmModule;
/* Printer list. */
typedef struct {
char printerName[SZ_FNAME+1]; /* printer name */
char printCmd[SZ_FNAME+1]; /* printer dispose command */
} Printer, *PrinterPtr;
/* Printer configuration struct. */
typedef struct {
int printno; /* printer number */
int seqno; /* sequence number */
int diskfile; /* print to diskfile? */
char printFile[SZ_FNAME+1]; /* disk filename template */
char printCmd[SZ_FNAME+1]; /* dispose command */
} PrintCfg, *PrintCfgPtr;
/* File save definitions and structure. */
typedef struct {
int seqno; /* sequence number */
int format; /* save format */
int colorType; /* save color type */
int w, h, d; /* dimensions of last file saved */
char fname[SZ_FNAME+1]; /* save filename */
} fileSave, *fileSavePtr;
#define XIM_GRAYSCALE 0 /* save color options */
#define XIM_PSEUDOCOLOR 1
#define XIM_RGB 2
#define XIM_RAS 0 /* save format options */
#define XIM_GIF 1
#define XIM_TIFF 2
#define XIM_JPEG 3
#define XIM_X11 4
#define XIM_FITS 5
#define XIM_RAW 6
#define XIM_EPS 7
#define XIM_OIF 8
/* File load struct. */
typedef struct {
int nfiles; /* number of files in directory */
char **FileList; /* list of directory contents */
char curdir[SZ_FNAME+1]; /* current directory */
char homedir[SZ_FNAME+1]; /* home directory */
char pattern[SZ_NAME+1]; /* file pattern to match */
int gray; /* load as a grayscale image? */
int zscale; /* zscale the image */
int zrange; /* use full data range */
float z1, z2; /* user-supplied zrange limits */
int nsample; /* number of zscale sample pts */
} fileLoad, *fileLoadPtr;
/*
* Application resources and runtime descriptor.
* ----------------------------------------------
*/
typedef struct {
/* Resources. */
Boolean autoscale; /* is XY autoscaling enabled */
Boolean antialias; /* apply antialiasing when dezooming */
Boolean tileFrames; /* tile rather than overlay frames */
Boolean highlightFrames; /* highlight tiled frames */
Boolean invert; /* use inverted colormap */
int def_config; /* default FB config */
int def_nframes; /* default number of frames */
int ncolors; /* number of image pixel colors */
int tileBorder; /* image border when tiling frames */
String borderColor; /* border color for tileFrames */
String gui; /* GUI file name */
String imtoolrc; /* imtoolrc file name */
String memModel; /* FB memory model */
String userCMap1; /* user colormap file */
String userCMap2; /* user colormap file */
String userCMapDir1; /* user colormap directory */
String userCMapDir2; /* user colormap directory */
String antialiasType; /* type of antialiasing */
String printConfig; /* printer configuration file */
String input_fifo; /* client's output, e.g. /dev/imt1o */
String output_fifo; /* client's input, e.g. /dev/imt1i */
String unixaddr; /* format for unix socket path */
String ism_addr; /* format for ISM unix socket path */
String ism_task; /* image support module taskname */
int port; /* port for INET socket */
/* Internal state. */
XtPointer obm; /* object manager */
IoChanPtr cursor_chan; /* cursor mode channel */
IoChan chan[MAX_CLIENTS]; /* client i/o descriptors */
IsmIoChan ism_chan; /* image support module channel */
IsmIoChan ism_client[MAX_ISM]; /* ISM client i/o descriptors */
Widget toplevel; /* dummy toplevel app shell */
Widget gt; /* imagewin gterm-image widget */
Widget cb; /* colorbar gterm-image widget */
XtPointer gm_border; /* border marker for tileFrames */
int tileFramesList; /* frames to be tiled (bitmask) */
int nTileFrames; /* number of frames to be tiled */
int tileRows; /* number of tile rows */
int tileCols; /* number of tile cols */
Boolean tileByRows; /* fill tiles by row vs cols */
Boolean tileTopDown; /* fill tiles by top to bottom */
Boolean tileLabels; /* label frame tiles */
int rop; /* rasterop for mappings */
int display_frame; /* currently displayed frame */
FrameBufPtr df_p; /* display frame descriptor */
FrameBuf frames[MAX_FRAMES]; /* array of frame descriptors */
int fb_configno; /* current config number */
int nframes; /* current number of frame bufs */
int width, height; /* current width, height */
FbConfig fb_config[MAX_FBCONFIG]; /* fb config table */
int *clientPrivate; /* used by imtool client code */
PSImagePtr psim; /* EPS image struct pointer */
PrintCfgPtr pcp; /* printer config pointer */
fileLoadPtr flp; /* load disk file pointer */
fileSavePtr fsp; /* save disk file pointer */
} XimData, *XimDataPtr;
/* Functions.
*/
#ifndef abs
#define abs(a) (((a)<0)?(-(a)):(a))
#endif
#ifndef min
#define min(a,b) ((a)<(b)?(a):(b))
#endif
#ifndef max
#define max(a,b) ((a)<(b)?(b):(a))
#endif
void xim_iisio();
#endif
|