1 #include "xtama_score.h"
2 
tama_score(int score_hint)3 void tama_score( int score_hint )
4 {
5   char buf[10] ;
6 
7   Score += score_hint ;
8 
9   sprintf( buf ,"%7d",Score );
10 
11   XClearArea( dpy , score , 0 , 126 , 150 , 40 , 0 ) ;
12 
13   XSetForeground( dpy , gc , iro[YELLOW]  );
14 
15   XDrawString( dpy , score , gc , 40 , 156 , buf , 7 ) ;
16 
17 }
18 
level_disp(int level)19 void level_disp( int level )
20 {
21   char buf[10] ;
22 
23   sprintf( buf ,"%7d",level );
24 
25   XClearArea( dpy , score , 80 , 70 , 70 , 40 , 0 ) ;
26 
27   XSetForeground( dpy , gc , iro[YELLOW]  );
28 
29   XDrawString( dpy , score , gc , 56 , 90 , buf , 7 ) ;
30 
31 }
32 
tama_tama(int left_tama)33 void tama_tama( int left_tama )
34 {
35   char buf[10] ;
36 
37   if ( left_tama < 0 ) left_tama = 0 ;
38 
39   sprintf( buf ,"%7d",left_tama ) ;
40 
41   XClearArea( dpy , score , 0 , 395 , 150 , 40 , 0 ) ;
42 
43   XSetForeground( dpy , gc , iro[YELLOW] );
44 
45   XDrawString( dpy , score , gc , 40 , 415 , buf , 7 ) ;
46 }
47 
tama_timer(long time,int tmp_score)48 Bool tama_timer( long time , int tmp_score )
49 {
50   struct  timeval  now_time ;
51 
52   gettimeofday( &now_time , NULL );
53 
54   tama_tama( tamakazu ) ;
55 
56   if ( now_time.tv_sec > time  )  return True ;
57   else{
58     tama_drawtime( time - now_time.tv_sec );
59     return False ;
60   }
61 
62 }
63 
tama_drawtime(int late)64 void tama_drawtime( int late )
65 {
66   int i ;
67   XGCValues values ;
68 
69   values.line_width = 3 ;
70 
71   XSetForeground( dpy , gc , iro[GREEN] );
72 
73   XChangeGC( dpy , gc , GCLineWidth , &values ) ;
74 
75   XClearArea( dpy , score , 0 , 328 , 155 , 20 , 0 ) ;
76 
77   XDrawLine( dpy , score , gc , 9 , 350 , 142 , 350 ) ;
78 
79   for ( i = 0 ; i < 11 ; i ++ )
80     XDrawLine( dpy , score , gc , 13 * i + 10 , 340 , 13 * i + 10 , 350 ) ;
81 
82   XSetForeground( dpy , gc , iro[BLUE] );
83 
84   late /= 3 ;
85 
86   for ( i = 0 ; i < late ; i ++ )
87     XFillRectangle( dpy , score , gc , 13 * i + 12 , 336 , 10 , 12 ) ;
88 
89 }
90 
91 
scoredemo()92 void scoredemo()
93 {
94   GC  gc2;
95   Font  font1, font2;  /* �ե���ȹ�¤�Τ���� */
96   XEvent  eve;
97   int  i, j , ii , k , tmp ;
98 
99 #define BUFF_LENGTH 21
100 #define RANK_NAME_LENGTH 20
101   char buf[BUFF_LENGTH] ;
102   char writing_fname[512] ;
103 
104   struct sco {
105     int uid ;
106     int score ;
107     int level ;
108   } lank[16] ;
109 
110   static  char  *message[] = {
111     "Score Ranking  Best  15"," Name                  Score   Level"
112   };
113 
114   struct passwd *pass;
115 
116   FILE *file ;
117 
118 #ifdef FILELOCK
119   int msg_flag ;
120 #endif
121 
122   if ( !getpwuid(getuid()) ){
123     printf("Can't get User infomation \n");
124     return ;
125   }
126 
127 #ifndef SFILE
128 #define SFILE ".tama_score"
129 #endif
130 
131   strcpy( writing_fname , SFILE ) ;
132 
133 #ifdef FILELOCK
134   strcat( writing_fname , "-writing" ) ;
135   k = rename( SFILE , writing_fname ) ;
136   msg_flag = 0 ;
137   while( k < 0 ){
138        k = rename( SFILE , writing_fname ) ;
139        if( msg_flag == 0 ) {
140 	    printf("¾�οͤ���Ͽ��ʤΤ�....\n") ;
141 	    msg_flag = 1 ;
142        }
143   }
144   if( msg_flag != 0 ) printf("......OK\n") ;
145 #endif
146   if ( (file = fopen( writing_fname ,"r") ) == NULL )
147     {
148       if ( (file = fopen( writing_fname , "a" )) == NULL ) {
149 	printf("Can't create file %s\n", writing_fname ) ;
150 	return ;
151       }
152       for ( i = 0 ; i < 15 ; i ++ )
153 	fprintf( file ,"%d %d %d \n", 0 ,100 * ( 15 - i ) , 14 - i) ;
154       fclose( file ) ;
155       file = fopen( writing_fname ,"r" ) ;
156    }
157 
158   for ( i = 0 ; i < 15 ; i ++ )
159     fscanf( file ,"%d %d %d",&lank[i].uid,&lank[i].score,&lank[i].level) ;
160 
161 
162   fclose(file);
163 
164   i = 0 ;
165   while ( lank[i].score >= Score  && i < 15 )
166     i ++ ;
167 
168   if ( i < 15 )
169     {
170       i = 0 ;
171       while ( lank[i].uid != getuid() && i < 15 )
172 	i ++ ;
173 
174       if ( i == 15 )
175 	{
176 	  lank[14].uid   = getuid() ;
177 	  lank[14].score = Score ;
178 	  lank[14].level = level ;
179 	}
180       else
181 	    if ( lank[i].score < Score )
182 	      {
183 		/*lank[i].uid   = getuid() ; */
184 		lank[i].score = Score ;
185 		lank[i].level = level ;
186 	      }
187 
188       for ( i = 1 ; i < 15 ; i ++ )
189 	for ( j = i ; j < 15 ; j ++ )
190 	  {
191 	    if ( lank[15-j].score > lank[14 -j].score )
192 	      {
193 		tmp = lank[15-j].uid  ;
194 		lank[15-j].uid   = lank[14 -j].uid ;
195 		lank[14 -j].uid  = tmp ;
196 
197 		    tmp = lank[15-j].score  ;
198 		lank[15-j].score   = lank[14 -j].score ;
199 		lank[14 -j].score  = tmp ;
200 
201 		tmp = lank[15-j].level  ;
202 		lank[15-j].level   = lank[14 -j].level ;
203 		lank[14 -j].level  = tmp ;
204 	      }
205 	  }
206 
207       file = fopen( writing_fname ,"w");
208 
209       for ( i = 0 ; i < 15 ; i ++ )
210 	fprintf( file ,"%d %d %d \n",lank[i].uid,lank[i].score,lank[i].level) ;
211       fclose( file ) ;
212     }
213 #ifdef FILELOCK
214   rename( writing_fname , SFILE ) ;
215 #endif FILELOCK
216 
217   font1= XLoadFont( dpy, "9x15bold" );
218   /*font2= XLoadFont( dpy, "-adobe-times-bold-i-normal--*-240-*-*-p-*-*" );*/
219   font2= XLoadFont( dpy, "-*-*-bold-o-*-*-24-*-*-*-p-*-iso8859-1" );
220 
221   gc2 = XCreateGC( dpy, frame, (unsigned long)NULL, NULL );
222 
223   i = 240 ;
224 
225   XSetForeground( dpy , gc2 , iro[BLUE] );
226 
227   XSetFont( dpy, gc2, font2 ); /* �ե���Ȥ����� */
228   XFlush( dpy );
229   XDrawString( dpy, frame, gc2, 160, 270-i,
230 		   message[0], strlen(message[0]) );
231   XSetFont( dpy, gc2, font1 ); /* �ե���Ȥ����� */
232   XFlush( dpy );
233   XDrawString( dpy, frame, gc2, 100, 300-i,
234 		   message[1], strlen(message[1]) );
235   for ( ii = 0 ; ii < 15 ; ii ++ )
236     {
237       for( k=0 ; k<BUFF_LENGTH ; k++ ) buf[k]=0 ;
238       if (!(pass = getpwuid(lank[ii].uid)))
239 	sprintf(buf,"Anonymous");
240       else {
241 	strncpy( buf , pass->pw_gecos , RANK_NAME_LENGTH ) ;
242 	tmp = strlen( buf ) ;
243 	for ( j = 0 ; j < tmp ; j ++ )
244 	  if ( buf[j] == ',' )
245 	    buf[j] = '\0' ;
246       }
247       XDrawString( dpy, frame, gc2, 110, 330-i + ii * 30, buf, strlen(buf) );
248 
249       sprintf(&buf[11],"%-8d",lank[ii].score) ;
250       sprintf(&buf[7-strlen(&buf[11])],"%8d",lank[ii].score) ;
251       XDrawString( dpy, frame, gc2, 290, 330-i + ii * 30,
252 		       buf, strlen(buf) );
253       sprintf(buf,"%-2d", lank[ii].level);
254       XDrawString( dpy, frame, gc2, 397, 330-i + ii * 30,
255 		       buf, strlen(buf) );
256       XSync( dpy , 1 ) ;
257     }
258 
259   timer( 500000 ) ;
260 
261   while( True )
262     {
263       if ( XEventsQueued( dpy, QueuedAfterFlush )){
264 	XNextEvent( dpy, &eve );
265 	if ( eve.type == KeyPress || eve.type == ButtonPress ){
266 	  XClearWindow( dpy , frame );
267 	  return ;
268 	}
269       }
270     }
271 }
272