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