|
|
1.1 root 1: /*-
2: * sun.h --
3: * Internal declarations for the sun ddx interface
4: *
5: * Copyright (c) 1987 by the Regents of the University of California
6: *
7: * Permission to use, copy, modify, and distribute this
8: * software and its documentation for any purpose and without
9: * fee is hereby granted, provided that the above copyright
10: * notice appear in all copies. The University of California
11: * makes no representations about the suitability of this
12: * software for any purpose. It is provided "as is" without
13: * express or implied warranty.
14: *
15: * "$Header: sun.h,v 4.3 87/09/12 02:29:58 sun Exp $ SPRITE (Berkeley)"
16: */
17: #ifndef _SUN_H_
18: #define _SUN_H_
19:
20: #include <errno.h>
21: #include <sys/param.h>
22: #include <sys/types.h>
23: #include <sys/time.h>
24: #include <sys/file.h>
25: #include <sys/fcntl.h>
26: #include <sys/signal.h>
27: #include <sundev/kbd.h>
28: #include <sundev/kbio.h>
29: #include <sundev/msio.h>
30: #include <sun/fbio.h>
31:
32: /*
33: * SUN_WINDOWS is now defined (or not) by the Makefile
34: * variable $(SUNWINDOWSFLAGS) in server/Makefile.
35: */
36:
37: #ifdef SUN_WINDOWS
38: #include <varargs.h>
39: #include <sys/ioctl.h>
40: #include <stdio.h>
41: #include <pixrect/pixrect_hs.h>
42: #include <sunwindow/rect.h>
43: #include <sunwindow/rectlist.h>
44: #include <sunwindow/pixwin.h>
45: #include <sunwindow/win_screen.h>
46: #include <sunwindow/win_input.h>
47: #include <sunwindow/cms.h>
48: #include <sunwindow/win_struct.h>
49: #else
50: /* already included by sunwindow/win_input.h */
51: #include <sundev/vuid_event.h>
52: #endif SUN_WINDOWS
53:
54: #include "X.h"
55: #include "Xproto.h"
56: #include "scrnintstr.h"
57: #include "screenint.h"
58: #ifdef NEED_EVENTS
59: #include "inputstr.h"
60: #endif NEED_EVENTS
61: #include "input.h"
62: #include "cursorstr.h"
63: #include "cursor.h"
64: #include "pixmapstr.h"
65: #include "pixmap.h"
66: #include "windowstr.h"
67: #include "gc.h"
68: #include "gcstruct.h"
69: #include "regionstr.h"
70: #include "colormap.h"
71: #include "miscstruct.h"
72: #include "dix.h"
73: #include "mfb.h"
74: #include "mi.h"
75: #ifdef ZOIDS
76: #include "zoid.h"
77: #endif ZOIDS
78:
79: /*
80: * MAXEVENTS is the maximum number of events the mouse and keyboard functions
81: * will read on a given call to their GetEvents vectors.
82: */
83: #define MAXEVENTS 32
84:
85: /*
86: * Data private to any sun keyboard.
87: * GetEvents reads any events which are available for the keyboard
88: * ProcessEvent processes a single event and gives it to DIX
89: * DoneEvents is called when done handling a string of keyboard
90: * events or done handling all events.
91: * devPrivate is private to the specific keyboard.
92: * map_q is TRUE if the event queue for the keyboard is memory mapped.
93: */
94: typedef struct kbPrivate {
95: int type; /* Type of keyboard */
96: int fd; /* Descriptor open to device */
97: Firm_event *(*GetEvents)(); /* Function to read events */
98: void (*ProcessEvent)(); /* Function to process an event */
99: void (*DoneEvents)(); /* Function called when all events */
100: /* have been handled. */
101: pointer devPrivate; /* Private to keyboard device */
102: Bool map_q; /* TRUE if fd has a mapped event queue */
103: int offset; /* to be added to device keycodes */
104: } KbPrivRec, *KbPrivPtr;
105:
106: #define MIN_KEYCODE 8 /* necessary to avoid the mouse buttons */
107:
108: /*
109: * Data private to any sun pointer device.
110: * GetEvents, ProcessEvent and DoneEvents have uses similar to the
111: * keyboard fields of the same name.
112: * pScreen is the screen the pointer is on (only valid if it is the
113: * main pointer device).
114: * x and y are absolute coordinates on that screen (they may be negative)
115: */
116: typedef struct ptrPrivate {
117: int fd; /* Descriptor to device */
118: Firm_event *(*GetEvents)(); /* Function to read events */
119: void (*ProcessEvent)(); /* Function to process an event */
120: void (*DoneEvents)(); /* When all the events have been */
121: /* handled, this function will be */
122: /* called. */
123: short x, /* Current X coordinate of pointer */
124: y; /* Current Y coordinate */
125: ScreenPtr pScreen; /* Screen pointer is on */
126: pointer devPrivate; /* Field private to device */
127: } PtrPrivRec, *PtrPrivPtr;
128:
129: /*
130: * Cursor-private data
131: * screenBits saves the contents of the screen before the cursor
132: * was placed in the frame buffer.
133: * source a bitmap for placing the foreground pixels down
134: * srcGC a GC for placing the foreground pixels down.
135: * Prevalidated for the cursor's screen.
136: * invSource a bitmap for placing the background pixels down.
137: * invSrcGC a GC for placing the background pixels down.
138: * Also prevalidated for the cursor's screen Pixmap.
139: * temp a temporary pixmap for low-flicker cursor motion --
140: * exists to avoid the overhead of creating a pixmap
141: * whenever the cursor must be moved.
142: * fg, bg foreground and background pixels. For a color display,
143: * these are allocated once and the rgb values changed
144: * when the cursor is recolored.
145: * scrX, scrY the coordinate on the screen of the upper-left corner
146: * of screenBits.
147: * state one of CR_IN, CR_OUT and CR_XING to track whether the
148: * cursor is in or out of the frame buffer or is in the
149: * process of going from one state to the other.
150: */
151: typedef enum {
152: CR_IN, /* Cursor in frame buffer */
153: CR_OUT, /* Cursor out of frame buffer */
154: CR_XING /* Cursor in flux */
155: } CrState;
156:
157: typedef struct crPrivate {
158: PixmapPtr screenBits; /* Screen before cursor put down */
159: PixmapPtr source; /* Cursor source (foreground bits) */
160: GCPtr srcGC; /* Foreground GC */
161: PixmapPtr invSource; /* Cursor source inverted (background) */
162: GCPtr invSrcGC; /* Background GC */
163: PixmapPtr temp; /* Temporary pixmap for merging screenBits
164: * and the sources. Saves creation time */
165: Pixel fg; /* Foreground color */
166: Pixel bg; /* Background color */
167: int scrX, /* Screen X coordinate of screenBits */
168: scrY; /* Screen Y coordinate of screenBits */
169: CrState state; /* Current state of the cursor */
170: } CrPrivRec, *CrPrivPtr;
171:
172: /*
173: * Frame-buffer-private info.
174: * fd file opened to the frame buffer device.
175: * info description of the frame buffer -- type, height, depth,
176: * width, etc.
177: * fb pointer to the mapped image of the frame buffer. Used
178: * by the driving routines for the specific frame buffer
179: * type.
180: * pGC A GC for realizing cursors.
181: * GetImage Original GetImage function for this screen.
182: * CreateGC Original CreateGC function
183: * CreateWindow Original CreateWindow function
184: * ChangeWindowAttributes Original function
185: * GetSpans GC function which needs to be here b/c GetSpans isn't
186: * called with the GC as an argument...
187: * mapped flag set true by the driver when the frame buffer has
188: * been mapped in.
189: * parent set true if the frame buffer is actually a SunWindows
190: * window.
191: * fbPriv Data private to the frame buffer type.
192: */
193: typedef struct {
194: pointer fb; /* Frame buffer itself */
195: GCPtr pGC; /* GC for realizing cursors */
196:
197: void (*GetImage)();
198: Bool (*CreateGC)();/* GC Creation function previously in the
199: * Screen structure */
200: Bool (*CreateWindow)();
201: Bool (*ChangeWindowAttributes)();
202: unsigned int *(*GetSpans)();
203: void (*EnterLeave)();
204: Bool mapped; /* TRUE if frame buffer already mapped */
205: Bool parent; /* TRUE if fd is a SunWindows window */
206: int fd; /* Descriptor open to frame buffer */
207: struct fbtype info; /* Frame buffer characteristics */
208: pointer fbPriv; /* Frame-buffer-dependent data */
209: } fbFd;
210:
211: /*
212: * Data describing each type of frame buffer. The probeProc is called to
213: * see if such a device exists and to do what needs doing if it does. devName
214: * is the expected name of the device in the file system. Note that this only
215: * allows one of each type of frame buffer. This may need changing later.
216: */
217: typedef enum {
218: neverProbed, probedAndSucceeded, probedAndFailed
219: } SunProbeStatus;
220:
221: /*
222: * ZOIDS should only ever be defined if SUN_WINDOWS is defined.
223: */
224: typedef struct _sunFbDataRec {
225: Bool (*probeProc)(); /* probe procedure for this fb */
226: char *devName; /* device filename */
227: SunProbeStatus probeStatus; /* TRUE if fb has been probed successfully */
228: #ifdef ZOIDS
229: Pixrect *pr; /* set for bwtwo's only */
230: Pixrect *scratch_pr; /* set for bwtwo's only */
231: #endif ZOIDS
232: } sunFbDataRec;
233:
234: extern sunFbDataRec sunFbData[];
235: /*
236: * Cursor functions
237: */
238: extern void sunInitCursor();
239: extern Bool sunRealizeCursor();
240: extern Bool sunUnrealizeCursor();
241: extern Bool sunDisplayCursor();
242: extern Bool sunSetCursorPosition();
243: extern void sunCursorLimits();
244: extern void sunPointerNonInterestBox();
245: extern void sunConstrainCursor();
246: extern void sunRecolorCursor();
247: extern Bool sunCursorLoc();
248: extern void sunRemoveCursor();
249: extern void sunRestoreCursor();
250:
251: /*
252: * Initialization
253: */
254: extern void sunScreenInit();
255: extern int sunOpenFrameBuffer();
256:
257: /*
258: * GC Interceptions
259: */
260: extern GCPtr sunCreatePrivGC();
261: extern Bool sunCreateGC();
262: extern Bool sunCreateWindow();
263: extern Bool sunChangeWindowAttributes();
264:
265: extern void sunGetImage();
266: extern unsigned int *sunGetSpans();
267:
268: extern int isItTimeToYield;
269: extern int sunCheckInput; /* Non-zero if input is available */
270:
271: extern fbFd sunFbs[];
272: extern Bool screenSaved; /* True is screen is being saved */
273:
274: extern int lastEventTime; /* Time (in ms.) of last event */
275: extern void SetTimeSinceLastInputEvent();
276: extern void ErrorF();
277:
278: #define AUTOREPEAT_INITIATE (300) /* milliseconds */
279: #define AUTOREPEAT_DELAY (100) /* milliseconds */
280: /*
281: * We signal autorepeat events with the unique Firm_event
282: * id AUTOREPEAT_EVENTID.
283: * Because inputevent ie_code is set to Firm_event ids in
284: * sunKbdProcessEventSunWin, and ie_code is short whereas
285: * Firm_event id is u_short, we use 0x7fff.
286: */
287: #define AUTOREPEAT_EVENTID (0x7fff) /* AutoRepeat Firm_event id */
288:
289: extern int autoRepeatKeyDown; /* TRUE if key down */
290: extern int autoRepeatReady; /* TRUE if time out */
291: extern int autoRepeatDebug; /* TRUE if debugging */
292:
293: /*
294: * Sun specific extensions:
295: * trapezoids
296: */
297: #ifdef ZOIDS
298: extern void sunBW2SolidXZoids();
299: extern void sunBW2SolidYZoids();
300: extern void sunBW2TiledXZoids();
301: extern void sunBW2TiledYZoids();
302: extern void sunBW2StipXZoids();
303: extern void sunBW2StipYZoids();
304: #endif ZOIDS
305:
306: /*-
307: * TVTOMILLI(tv)
308: * Given a struct timeval, convert its time into milliseconds...
309: */
310: #define TVTOMILLI(tv) (((tv).tv_usec/1000)+((tv).tv_sec*1000))
311:
312: #ifdef SUN_WINDOWS
313: extern int windowFd;
314: #endif SUN_WINDOWS
315:
316: #endif _SUN_H_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.