|
|
1.1 root 1: /*
2:
3: Copyright 1986 by the University of Utah
4:
5: Permission to use, copy, modify, and distribute this
6: software and its documentation for any purpose and without
7: fee is hereby granted, provided that the above copyright
8: notice appear in all copies and that both that copyright
9: notice and this permission notice appear in supporting
10: documentation, and that the name of the University of Utah
11: not be used in advertising or publicity pertaining to
12: distribution of the software without specific, written
13: prior permission. The University of Utah makes no
14: representations about the suitability of this software for
15: any purpose. It is provided "as is" without express or
16: implied warranty.
17:
18: */
19:
20: /* initial.c Routines to open & close display
21: *
22: * OpenDisplay Open it
23: * InitDisplay Download it
24: * DisplayDead Check if dead
25: * Allocate_space Allocate some temporary storage
26: *
27: */
28:
29: /*
30: * ToDo:
31: * Look in environment/defaults for programs to start
32: */
33:
34:
35: #include <stdio.h>
36: #include <fcntl.h>
37: #include <errno.h>
38: #include <sys/time.h>
39: #include <sys/ioctl.h>
40: #include <sys/signal.h>
41: #include "Xapollo.h"
42:
43: unsigned char InvertedPixelArray[] = {
44: 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
45: 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
46: 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
47: 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
48: 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
49: 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
50: 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
51: 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
52: 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
53: 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
54: 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
55: 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
56: 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
57: 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
58: 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
59: 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
60: 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
61: 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
62: 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
63: 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
64: 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
65: 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
66: 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
67: 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
68: 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
69: 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
70: 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
71: 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
72: 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
73: 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
74: 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
75: 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff,
76: };
77:
78: boolean borrow_flag = true;
79: long old_zmask;
80: int old_op = -1;
81: struct Scr Screen;
82: int Xdbg;
83: extern int errno;
84: DEVICE *CurrentDevice;
85: gpr_$attribute_desc_t tmp_ab;
86: static gpr_$offset_t off;
87: gpr_$bitmap_desc_t TileBM;
88: gpr_$plane_t plane;
89: status_$t status;
90:
91: extern int InputReader();
92: extern int InitInput();
93: extern int check_status();
94:
95: /*ARGSUSED*/
96: OpenDisplay (devname)
97: char *devname;
98: {
99: pad_$window_desc_t win;
100: int vsdev = -1;
101:
102: win.top = 0;
103: win.left = 0;
104: win.width = 950;
105: win.height = 750;
106:
107: off.x_size = 1280;
108: off.y_size = 1024;
109: if (!borrow_flag || getenv("XPAD") )
110: /* direct mode will probably not work correctly */
111: {
112: borrow_flag = false;
113: pad_$create_window( "", (short)0, pad_$transcript, (short)1, win, Screen.fd, status );
114: pad_$set_border( (short)Screen.fd, (short)1, 0, status );
115: gpr_$init( gpr_$direct, Screen.fd, off, (short)7, Screen.bm, status );
116: gpr_$acquire_display(status);
117: }
118: else
119: gpr_$init( gpr_$borrow, (short)1, off, (short)7, Screen.bm, status );
120:
121: if( status.all != status_$ok ) {
122: error_$print( status );
123: return( NULL );
124: }
125: vsdev = MakeGPRStream();
126: return (vsdev);
127:
128: }
129:
130: InitDisplay (info)
131: register DEVICE *info;
132: {
133: register int i;
134: static vsCursor vsc;
135: static vsBox vsm;
136: static vsEventQueue vsq = {
137: NULL,
138: 0,
139: 0,
140: 0,
141: };
142:
143: gpr_$set_bitmap( Screen.bm, status );
144: gpr_$inq_bitmap_pointer( Screen.bm, Screen.ptr, Screen.line_width, status );
145: gpr_$inq_bitmap_dimensions( Screen.bm, off, (short)plane, status );
146: gpr_$allocate_attribute_block( Screen.ab, status);
147: gpr_$set_attribute_block( Screen.ab, status );
148: gpr_$set_obscured_opt(gpr_$block_if_obs, status);
149: gpr_$set_clipping_active(true, status);
150: Screen.depth = plane+1;
151: Screen.plane_mask = (plane == 0) ? 1 : ((1<<Screen.depth) - 1);
152: info->height = Screen.height = off.y_size;
153: info->width = Screen.width = off.x_size;
154:
155: info->id = Screen.bm;
156: info->planes = Screen.depth;
157: info->entries = (plane == 0) ? 0 : 1<<Screen.depth;
158: info->mouse = &vsc;
159: info->mbox = &vsm;
160: info->queue = &vsq;
161:
162: /* Allocate a bitmap for caching tiles */
163: gpr_$allocate_attribute_block( tmp_ab, status);
164: off.x_size = 32;
165: off.y_size = 32;
166: gpr_$allocate_bitmap( off, (short)plane, tmp_ab, TileBM, status);
167:
168: Define_input_handler(InputReader);
169: CurrentDevice = info;
170:
171: InitInput();
172: return (0);
173: }
174:
175: /* Check if display is dead */
176:
177: DisplayDead ()
178: {
179: return(0);
180: }
181:
182: /* the presumption here is that only one Allocate_space call is made/request */
183:
184: #define ABUFSIZE 3072
185: static char ABuffer[3072]; /* arbitrary size buffer for allocate space */
186: caddr_t AllocateSpace (size)
187: register int size;
188: {
189: if (size < ABUFSIZE) return(ABuffer);
190: errno = ENOMEM;
191: return (NULL);
192: }
193:
194: #ifdef notdef
195: Setenv (var, value)
196: /*
197: sets the value of var to be arg in the Unix 4.2 BSD environment env.
198: Var should end with '='.
199: (bindings are of the form "var=value")
200: This procedure assumes the memory for the first level of environ
201: was allocated using malloc.
202: */
203: register char *var, *value;
204: {
205: extern char **environ;
206: register int index = 0;
207:
208: while (environ[index] != NULL) {
209: if (strncmp(environ[index], var, strlen(var)) == 0) {
210: /* found it */
211: environ[index] = (char *) malloc(strlen(var) + strlen(value));
212: strcpy(environ[index], var);
213: strcat(environ[index], value);
214: return;
215: }
216: index++;
217: }
218:
219: if ((environ = (char **) realloc(environ, sizeof(char *) *
220: (index + 2))) == NULL) {
221: fprintf(stderr, "Setenv: malloc out of memory\n");
222: exit(1);
223: }
224:
225: environ[index] = (char *) malloc(strlen(var) + strlen(value));
226: strcpy(environ[index], var);
227: strcat(environ[index], value);
228: environ[++index] = NULL;
229: }
230: #endif
231:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.