|
|
1.1 root 1: /*
2: * $Source: /u1/X/libis/RCS/display.c,v $
3: * $Header: display.c,v 1.1 86/11/17 14:33:42 swick Rel $
4: */
5:
6: #ifndef lint
7: static char *rcsid_display_c = "$Header: display.c,v 1.1 86/11/17 14:33:42 swick Rel $";
8: #endif lint
9:
10: #include "is-copyright.h"
11:
12: /* display.c - routines to open and close display
13: *
14: * OpenDisplay
15: * InitDisplay
16: * DisplayDead
17: * AllocateSpace
18: *
19: * Copyright (c) 1986, Integrated Solutions, Inc.
20: */
21:
22: #include "Xis.h"
23: #include <sys/file.h>
24: #include <errno.h>
25:
26: extern int errno;
27:
28: DEVICE *CurrentDevice;
29:
30: int indev; /* fd of the desktop */
31:
32: extern int InputHandler();
33:
34: /*
35: * OpenDisplay
36: */
37: OpenDisplay(name)
38: char *name;
39: {
40: int ldisc = TWSDISC;
41: short mmode = (VT_MOUSE_DOWN | VT_MOUSE_UP | VT_MOUSE_CONTINUOUS);
42: char tname[32];
43: extern char *strcpy(), *strcat();
44:
45: strcpy(tname, "/dev/ttyw");
46: strcat(tname, name);
47:
48: #ifdef DEBUG
49: if (debug & D_Misc)
50: printf("OpenDisplay(name=\"%s\")\n", tname);
51: #endif DEBUG
52:
53: indev = GIP_Init();
54: setreuid(-1, -1); /* don't need to be setuid root anymore */
55: ioctl(indev, TIOCSETD, &ldisc); /* SetLineDisc */
56: ioctl(indev, TIOVSETMM, &mmode); /* SetMouseMode */
57: return (indev);
58: }
59:
60: /*
61: * InitDisplay
62: */
63: InitDisplay(dp)
64: register DEVICE *dp;
65: {
66: static vsCursor vsmouse;
67: static vsBox vsmbox;
68: static vsEventQueue vsqueue;
69:
70: struct gconfig gc;
71:
72: #ifdef DEBUG
73: if (debug & D_Misc)
74: printf("InitDisplay(dp=0x%x)\n", dp);
75: #endif DEBUG
76:
77: CurrentDevice = dp;
78:
79: if (indev >= 0) {
80: if (ioctl(indev, TIOVGETHW, &gc)) { /* GetGraphicsConfig */
81: return (-1);
82: }
83:
84: switch (gc.realcolors) {
85: case 2:
86: dp->id = XDEV_ISIBW; /* monochrome */
87: break;
88: case 16:
89: dp->id = XDEV_ISICOLOR4; /* 4 bit plane color */
90: break;
91: default:
92: dp->id = -1; /* no idea! */
93: break;
94: }
95: dp->width = ScreenPixmap.width;
96: dp->height = ScreenPixmap.height;
97: dp->planes = ScreenPixmap.kind & 0xf;
98: if (dp->planes > 1)
99: dp->entries = gc.lutsize;
100: else
101: dp->entries = 0; /* no lut! */
102: dp->mouse = &vsmouse;
103: dp->mbox = &vsmbox;
104: dp->queue = &vsqueue;
105:
106:
107: Define_input_handler(InputHandler);
108:
109: } else {
110: return (-1);
111: }
112: return (0);
113: }
114:
115: /*
116: * DisplayDead
117: */
118:
119: DisplayDead()
120: {
121: #ifdef DEBUG
122: if (debug & D_Misc) {
123: printf("DisplayDead()?\n");
124: fflush(stdout);
125: }
126: #endif DEBUG
127:
128: GIP_Quit();
129:
130: return (0);
131: }
132:
133: /*
134: * AllocateSpace
135: *
136: * The presumption here is that only one AllocateSpace call is
137: * made/request
138: */
139:
140: #define BUFSIZE 3072 /* arbitrary size for buffer */
141:
142: caddr_t AllocateSpace(size)
143: int size;
144: {
145: static char buf[BUFSIZE];
146:
147: #ifdef DEBUG
148: if (debug & D_Misc)
149: printf("AllocateSpace(size=%d)\n", size);
150: #endif DEBUG
151:
152: if (size < BUFSIZE) {
153: return (buf);
154: }
155: errno = ENOMEM;
156: return (NULL);
157: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.