1 #include "xtama_init.h"
2
main(argc,argv)3 void main(argc, argv)
4 int argc;
5 char **argv;
6 {
7 int i , ii , j , k , nlength , l , x , y ;
8 int screen , display_width, display_height , default_depth ;
9 char display_name[10] , buffer[20] , colorbuffer[20] , *tmp = NULL ;
10 unsigned char *tmpxbm ;
11 XWindowAttributes root_attr ;
12 XpmAttributes xpm_attr ;
13 XSetWindowAttributes xset_attr ;
14 Pixmap back3 , back1 ;
15 XGCValues gcval ;
16 Font font ;
17 Window root ;
18 Bool isserver = False , Install = False ;
19
20 int iro_data[12][3] = {
21 { 0 , 0 , 255 } ,
22 { 0 , 255 , 0 } ,
23 { 255 , 255 , 0} ,
24 { 255 , 0 , 0 } ,
25 { 255 , 255 , 255},
26 { 0 , 0 , 0 },
27 {255 , 114 , 107 },
28 {25 , 0 , 250},
29 {238 , 238 , 0},
30 {32 , 208 , 32},
31 {125 , 0 , 150}
32 } ;
33
34 char *tama_iro[] = {
35 ". c #FF726B",
36 ". c #1900FA",
37 ". c #eeee00",
38 ". c #20cc20",
39 ". c #7D0096",
40 } ;
41
42 XColor colordef , colordef2 ;
43 XVisualInfo vtmp , * vlist ;
44 int vism ;
45
46 char *number_xbm[] = { n0_bits , n1_bits , n2_bits , n3_bits , n4_bits ,
47 n5_bits , n6_bits , n7_bits , n8_bits , n9_bits ,
48 ren_bits , sa_bits } ;
49
50 display_name[0] = (char)NULL ;
51 buffer[0] = (char)NULL ;
52 erase = ERASE ;
53 mouse = net = False ;
54
55 for ( i = 0 ; i < 3 ; i ++ )
56 mous[i] = i + 1 ;
57
58 i = 1 ;
59 ii = 0 ;
60 while( i < argc ){
61 if ( !strcmp("-display",argv[i] )){
62 strcpy( display_name , argv[++i] ) ;
63 i ++ ;
64 continue ;
65 }
66 if ( !strcmp("-rensa",argv[i] )){
67 if ( ( erase = atoi(argv[++i])) < 2 )
68 erase = 2 ;
69 erase -- ;
70 i ++ ;
71 continue ;
72 }
73 if ( !strcmp("-install" , argv[i] )){
74 Install = True ;
75 i ++ ;
76 continue ;
77 }
78 if ( !strcmp("-mouse",argv[i])){
79 mouse = True;
80 i ++ ;
81 continue ;
82 }
83 if ( !strcmp("-fall",argv[i] )){
84 mous[FALL] = atoi( argv[++ i]) ;
85 i ++ ;
86 continue ;
87 }
88 if ( !strcmp("-lturn",argv[i] )){
89 mous[LTURN] = atoi( argv[++ i]) ;
90 i ++ ;
91 continue ;
92 }
93 if ( !strcmp("-rturn",argv[i] )){
94 mous[RTURN] = atoi( argv[++ i]) ;
95 i ++ ;
96 continue ;
97 }
98 #ifdef NET
99 if ( !strcmp("-host" ,argv[i] )){
100 i ++ ;
101 tmp = argv[i] ;
102 isserver = False ;
103 net = True ;
104 i ++ ;
105 continue ;
106 }
107 if ( !strcmp("-net",argv[i])){
108 net = True ;
109 isserver = True ;
110 i ++ ;
111 continue ;
112 }
113 #endif
114 usage(argv[0]) ;
115 }
116
117 dpy = XOpenDisplay(display_name);
118 if (dpy == NULL) {
119 fprintf(stderr, "PuzzleTama: unable to open display '%s'\n",
120 XDisplayName(display_name));
121 return;
122 }
123
124 #ifdef NET
125 if ( net ){
126 net_init( isserver , tmp ) ;
127 while( ( fdc = dup( sockfd )) < 0 ) ;
128 signal(SIGKILL,quit) ;
129 signal(SIGTERM,quit) ;
130 }
131 #endif
132
133 srand48((int)time((time_t *)NULL));
134
135 screen = DefaultScreen( dpy ) ;
136
137 if ( Install ){
138 vtmp.screen = screen ;
139 vtmp.depth = DefaultDepth(dpy,screen) ;
140 vtmp.class = PseudoColor ;
141
142 vlist = XGetVisualInfo( dpy , VisualScreenMask|VisualDepthMask|
143 VisualClassMask , &vtmp , &vism ) ;
144
145 if ( vism == 0 )
146 printf("No matching visual \n") ;
147
148 cmap = XCreateColormap(dpy, XDefaultRootWindow( dpy ),vlist[0].visual , AllocNone);
149 }
150 else cmap = DefaultColormap( dpy , screen ) ;
151
152 colordef.flags = DoRed | DoGreen | DoBlue;
153 for (i = 0; i < 12; i++) {
154 colordef.red = iro_data[i][0] * 256 ;
155 colordef.green = iro_data[i][1] * 256 ;
156 colordef.blue = iro_data[i][2] * 256 ;
157
158 if ( XAllocColor( dpy , cmap , &colordef ))
159 iro[i] = colordef.pixel ;
160 else fprintf(stderr,"Can't allocate Color \n" ) ;
161 }
162
163 screen = DefaultScreen(dpy);
164 root = RootWindow(dpy, screen);
165
166 display_width = DisplayWidth(dpy, screen);
167 display_height = DisplayHeight(dpy, screen);
168 default_depth = DefaultDepth(dpy, screen);
169
170 /* initiate windows */
171
172 frame = XCreateSimpleWindow(dpy, root, 0, 0,
173 ( net ? 830 : 500 ) , 550,0, 1, 1);
174
175 XSetWindowColormap( dpy , frame , cmap) ;
176
177 back = XCreateSimpleWindow(dpy, frame, 10, 35,
178 320 , 480 ,0, 1, BlackPixel(dpy,0));
179
180 vsback = XCreateSimpleWindow(dpy, frame, 500, 35,
181 320 , 480 ,0, iro[BLACK], iro[BLACK]);
182
183 score = XCreateSimpleWindow(dpy, frame, 340, 10,
184 150 , 530,0, 1, WhitePixel(dpy , screen));
185
186 sele = XCreateSimpleWindow(dpy, frame , 0, 0,
187 200 , 100 , 0 , iro[WHITE] , iro[WHITE] ) ;
188
189
190 gcval.fill_style = FillTiled ;
191 gcval.graphics_exposures = False ;
192
193 gc = DefaultGC(dpy, DefaultScreen(dpy));
194 gc2 = DefaultGC(dpy, DefaultScreen(dpy));
195
196 XChangeGC( dpy , gc , GCGraphicsExposures , &gcval ) ;
197 XChangeGC( dpy , gc2 , GCGraphicsExposures , &gcval ) ;
198 gc3 = XCreateGC( dpy , frame , GCGraphicsExposures|GCFillStyle , &gcval ) ;
199
200
201 /* create pixmaps from data files */
202
203 xset_attr.backing_store = Always ;
204 XChangeWindowAttributes( dpy , frame , CWBackingStore , &xset_attr) ;
205
206 XGetWindowAttributes(dpy, frame, &root_attr);
207
208 xpm_attr.colormap = root_attr.colormap;
209 xpm_attr.valuemask = XpmSize | XpmReturnPixels | XpmColormap;
210
211
212 CreatePixmapFromData(dpy, frame, cmap , (char **)&back4_xpm,
213 &back_xpm, NULL ) ;
214
215 CreatePixmapFromData(dpy, frame, cmap , (char **)&back2,
216 &back1, NULL ) ;
217
218 for ( i = 0 ; i < 5 ; i ++ )
219 {
220 sprintf( colorbuffer , "%s" , tama_iro[ i ] ) ;
221
222 ball_xpm_data[ 2 ] = colorbuffer ;
223 CreatePixmapFromData(dpy, frame, cmap ,(char **)ball_xpm_data ,
224 &ball[i], &vmask[0] ) ;
225
226 mini_ball_xpm_data[ 2 ] = colorbuffer ;
227 CreatePixmapFromData(dpy, frame, cmap ,(char **)mini_ball_xpm_data ,
228 &ball[7+i], &vmask[1] ) ;
229
230
231 grow1_xpm[2] = colorbuffer ;
232 CreatePixmapFromData(dpy, frame, cmap ,(char **)grow1_xpm ,
233 &animation[i][0] ,
234 &animation_mask[0] ) ;
235
236 grow2_xpm[2] = colorbuffer ;
237 CreatePixmapFromData(dpy, frame, cmap ,(char **)grow2_xpm ,
238 &animation[i][1] ,
239 &animation_mask[1] ) ;
240
241 grow3_xpm[2] = colorbuffer ;
242 CreatePixmapFromData(dpy, frame, cmap ,(char **)grow3_xpm ,
243 &animation[i][2] ,
244 &animation_mask[2] ) ;
245
246 grow4_xpm[2] = colorbuffer ;
247 CreatePixmapFromData(dpy, frame, cmap , (char **)grow4_xpm ,
248 &animation[i][3] ,
249 &animation_mask[3] ) ;
250
251 grow5_xpm[2] = colorbuffer ;
252 CreatePixmapFromData(dpy, frame, cmap , (char **)grow5_xpm ,
253 &animation[i][4] ,
254 &animation_mask[4] ) ;
255 }
256
257
258 CreatePixmapFromData(dpy, back, cmap ,(char **)white_xpm,
259 &ball[5], NULL ) ;
260
261 CreatePixmapFromData(dpy, back, cmap, (char **)black_xpm,
262 &ball[6], NULL );
263
264 CreatePixmapFromData(dpy, frame, cmap, (char **)title_xpm,
265 &titl_xpm, &title_msk );
266
267 CreatePixmapFromData(dpy, score, cmap, (char **)title2_xpm,
268 &titl2_xpm, &title2_msk );
269
270 CreatePixmapFromData(dpy, score, cmap, (char **)tama_xpm,
271 &char_xpm, &char_msk );
272
273 CreatePixmapFromData(dpy, frame, cmap, (char **)tama1_xpm,
274 &tama[0], &tama[1] );
275
276 CreatePixmapFromData(dpy, frame, cmap, (char **)tama2_xpm,
277 &tama[2], &tama[3] );
278
279 CreatePixmapFromData(dpy, score, cmap, (char **)back5_xpm,
280 &back3, NULL );
281
282 CreatePixmapFromData(dpy, back, cmap, (char **)flush1_xpm,
283 &pdemo[0], &pdemo_mask[0] );
284
285 CreatePixmapFromData(dpy, back, cmap, (char **)flush2_xpm,
286 &pdemo[1], &pdemo_mask[1] );
287
288 CreatePixmapFromData(dpy, back, cmap, (char **)flush3_xpm,
289 &pdemo[2], &pdemo_mask[2] );
290
291 CreatePixmapFromData(dpy, back, cmap, (char **)Bwhite_xpm,
292 &effect[0], &effect[1]);
293
294 CreatePixmapFromData(dpy, back, cmap, (char **)Eblack_xpm,
295 &effect[2], &effect[3] );
296
297 XSetWindowBackgroundPixmap(dpy, frame, back_xpm);
298 XSetWindowBackgroundPixmap(dpy, back, back3);
299 XSetWindowBackgroundPixmap(dpy, vsback, back3);
300 XSetWindowBackgroundPixmap(dpy, score , back1);
301
302 XStoreName( dpy , frame , "PuzzleTama") ;
303
304 XSetForeground( dpy , gc , iro[BLUE] );
305
306 sele_xpm[0] = XCreatePixmapFromBitmapData( dpy , sele , sl_attc_bits ,
307 sl_attc_width , sl_attc_height ,
308 iro[YELLOW] , iro[BLACK] , default_depth ) ;
309
310 sele_xpm[2] = XCreatePixmapFromBitmapData( dpy , sele , sl_scor_bits ,
311 sl_scor_width , sl_scor_height ,
312 iro[BLUE] ,iro[WHITE] , default_depth ) ;
313
314 sele_xpm[1] = XCreatePixmapFromBitmapData( dpy , sele , sl_prac_bits ,
315 sl_prac_width , sl_prac_height ,
316 iro[GREEN] ,iro[WHITE] , default_depth ) ;
317
318 sele_xpm[3] = XCreatePixmapFromBitmapData( dpy , sele , sl_quit_bits ,
319 sl_quit_width , sl_quit_height ,
320 iro[BLACK] , iro[WHITE] , default_depth ) ;
321
322 #ifdef NET
323
324 sele_xpm[4] = XCreatePixmapFromBitmapData( dpy , sele , sl_taisen_bits ,
325 sl_taisen_width , sl_taisen_height ,
326 iro[BLUE] , iro[YELLOW] , default_depth ) ;
327
328 over[2] = XCreateBitmapFromData( dpy , sele , winner_bits ,
329 winner_width , winner_height ) ;
330
331 over[1] = XCreateBitmapFromData( dpy , sele , loser_bits ,
332 loser_width , loser_height ) ;
333
334 #endif
335
336 over[0] = XCreateBitmapFromData( dpy , sele , gameover_bits ,
337 gameover_width , gameover_height ) ;
338
339 cursor_mask = XCreateBitmapFromData( dpy , frame , cursor_mask_bits ,
340 cursor_width , cursor_height ) ;
341 cursor[0] = XCreateBitmapFromData( dpy , frame , cursor0_bits ,
342 cursor_width , cursor_height ) ;
343 cursor[1] = XCreateBitmapFromData( dpy , frame , cursor1_bits ,
344 cursor_width , cursor_height ) ;
345 cursor[2] = XCreateBitmapFromData( dpy , frame , cursor2_bits ,
346 cursor_width , cursor_height ) ;
347 cursor[3] = XCreateBitmapFromData( dpy , frame , cursor3_bits ,
348 cursor_width , cursor_height ) ;
349 cursor[4] = XCreateBitmapFromData( dpy , frame , cursor4_bits ,
350 cursor_width , cursor_height ) ;
351
352 for ( i = 0 ; i < 4 ; i ++ ){
353 colordef.blue = 255 * ( 255 - i * 85 ) ;
354 colordef.red = 255 * 85 * i ;
355 colordef.green = 0 ;
356 colordef2.red = colordef2.green = colordef2.blue = 255 * ( 255 - i * 10 ) ;
357 setcursor[i] = XCreatePixmapCursor( dpy , cursor[i] , cursor_mask ,
358 &colordef ,&colordef2 ,
359 cursor_x_hot , cursor_y_hot ) ;
360 }
361 colordef2.red = colordef2.green = colordef2.blue = 255 * 255 ;
362 colordef.blue = 255 * 255 ;
363 colordef.green = colordef.red = 0 ;
364 setcursor[i] = XCreatePixmapCursor( dpy , cursor[i] , cursor_mask ,
365 &colordef ,&colordef2 ,
366 cursor_x_hot , cursor_y_hot ) ;
367
368 nlength = number_width / Byte * number_height ;
369 tmpxbm = ( unsigned char * )malloc( nlength * 16 + 1 ) ;
370 for ( ii = 0 ; ii < 12 ; ii ++ ){
371 for ( y = 0 , l = 0 ; y < number_height ; y ++ ){
372 for ( x = 0 ; x < number_width / Byte ; x ++ , l ++){
373 for ( j = 0 ; j < Byte / 4 ; j ++ )
374 for ( k = 0 ; k < 4 ; k ++ ){
375 if ( number_xbm[ii][ y * number_width / Byte + x ] &
376 ( 1 << ( Byte - j - 1 - Byte / 4 * k )))
377 tmpxbm[l*4+(3 - k)] |= 0xf << (( Byte/4 - j - 1 ) * 4 ) ;
378 else
379 tmpxbm[l*4+(3 - k)] &= 0xff^( 0xf << ( Byte/4 - j - 1 ) * 4 ) ;
380 }
381 }
382 for ( j = 1 ; j < 4 ; j ++ )
383 for ( k = 0 ; k < 3 * 4 ; k ++ )
384 tmpxbm[( l - 3 + j * 3 ) * 4 + k]=tmpxbm[( l - 3 )*4+k] ;
385 l += 3 * 3 ;
386 }
387
388 number[ii] = XCreateBitmapFromData( dpy , frame , tmpxbm ,
389 number_width * 4 , number_height * 4 ) ;
390 }
391
392 font=XLoadFont(dpy,"-*-*-bold-o-*-*-24-*-*-*-p-*-iso8859-1" );
393
394 XSetFont( dpy , gc , font ) ;
395
396
397 for ( i = 0 ; i < 4 ; i ++ )
398 spa[i] = XCreatePixmap( dpy , back , 320 , 480 , default_depth ) ;
399
400 tama_title() ;
401 }
402
usage(char * name)403 void usage(char *name)
404 {
405 printf("usage: %s [options]\n",name ) ;
406 printf(" -display display �ǥ����ץ쥤����ꤹ��\n") ;
407 printf(" -rensa n�� ���ĤǾä��뤫\n");
408 printf(" (����������Ͽ�����Τϣ��Ĥλ��Τ�)\n");
409 printf(" -install ���顼�ޥåפȡ���\n");
410 printf(" -mouse �ޥ�������\n");
411 #ifdef NET
412 printf(" -net ���魯�������˵�ư����ͤ����ꤹ��\n") ;
413 printf(" -host �ۥ��� �魯�������˵�ư����ͤ���˵�ư�����ͤ�\n");
414 printf(" �ۥ���̾����ꤹ��\n");
415 #endif
416 printf("�ޥ����Υܥ���������ѹ�����\n");
417 printf(" -rturn �ܥ����ֹ� �ǥե���ȤǤϣ�\n") ;
418 printf(" -fall �ܥ����ֹ� �ǥե���ȤǤϣ�\n") ;
419 printf(" -lturn �ܥ����ֹ� �ǥե���ȤǤϣ�\n") ;
420
421 exit(0);
422 }
423
424 #ifdef NET
425
quit()426 void quit ()
427 {
428
429 char mess[10] ;
430 if ( writen( sockfd , "qBreak\n" , 7 ) != strlen(mess) )
431 err_sys("str_cli: writen error on socket") ;
432 printf("close .\n");
433 shutdown(sockfd,2) ;
434 XCloseDisplay( dpy ) ;
435 close(sockfd) ;
436 exit(0);
437 }
438
439 #endif
440