added d2demo.mn2
[btb/d2x.git] / unused / ui / keypad.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <conio.h>
4 #include <math.h>
5 #include <dos.h>
6 #include <string.h>
7 #include <direct.h>
8
9
10 #include "fix.h"
11 #include "types.h"
12 #include "gr.h"
13 #include "key.h"
14
15 #include "mono.h"
16
17 #include "ui.h"
18
19 #include "mem.h"
20 //#include "cflib.h"
21 #include "func.h"
22 #include "error.h"
23
24 #define MAX_NUM_PADS 20
25
26 static UI_GADGET_BUTTON * Pad[17];
27 static UI_KEYPAD * KeyPad[MAX_NUM_PADS];
28 static int active_pad;
29
30 static int desc_x, desc_y;
31
32 static int HotKey[17];
33 static int HotKey1[17];
34
35 #define REMOVE_EOL(s)     (*(strstr( (s), "\n" ))='\0')
36
37 int ui_pad_get_current()
38 {
39         return active_pad;
40 }
41
42 void ui_pad_init()
43 {
44         int i;
45
46         for (i=0; i< MAX_NUM_PADS; i++ )
47                 KeyPad[i] = NULL;
48
49         active_pad = -1;
50 }
51
52 void ui_pad_close()
53 {
54         int i, j;
55
56         for (i=0; i< MAX_NUM_PADS; i++ )
57                 if (KeyPad[i])
58                 {
59                         for (j=0; j<17; j++ )
60                                 free(KeyPad[i]->buttontext[j]);
61                         free( KeyPad[i] );
62                         KeyPad[i] = NULL;       
63                 }
64
65 }
66
67
68 void LineParse( int n, char * dest, char * source )
69 {
70         int i = 0, j=0, cn = 0;
71
72         // Go to the n'th line
73         while (cn < n )
74                 if (source[i++] == 179 )
75                         cn++;
76
77         // Read up until the next comma
78         while ( source[i] != 179 )
79         {
80                 dest[j] = source[i++];
81                 j++;            
82         }
83
84         // Null-terminate       
85         dest[j++] = 0;
86 }
87
88 void ui_pad_activate( UI_WINDOW * wnd, int x, int y )
89 {
90         int w,h,row,col, n;
91         int bh, bw;
92
93         bw = 56; bh = 30;
94
95         gr_set_current_canvas( wnd->canvas );
96         ui_draw_box_in( x, y, x+(bw*4)+10 + 200, y+(bh*5)+45 );
97
98         x += 5;
99         y += 20;
100
101         desc_x = x+2;
102         desc_y = y-17;
103                 
104         n=0; row = 0; col = 0; w = 1; h = 1;
105         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
106         Pad[n]->canvas->cv_font = ui_small_font;
107         n=1; row = 0; col = 1; w = 1; h = 1;
108         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
109         Pad[n]->canvas->cv_font = ui_small_font;
110         n=2; row = 0; col = 2; w = 1; h = 1;
111         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
112         Pad[n]->canvas->cv_font = ui_small_font;
113         n=3; row = 0; col = 3; w = 1; h = 1;
114         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
115         Pad[n]->canvas->cv_font = ui_small_font;
116         n=4; row = 1; col = 0; w = 1; h = 1; 
117         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
118         Pad[n]->canvas->cv_font = ui_small_font;
119         n=5; row = 1; col = 1; w = 1; h = 1; 
120         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
121         Pad[n]->canvas->cv_font = ui_small_font;
122         n=6; row = 1; col = 2; w = 1; h = 1; 
123         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
124         Pad[n]->canvas->cv_font = ui_small_font;
125         n=7; row = 1; col = 3; w = 1; h = 2; 
126         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
127         Pad[n]->canvas->cv_font = ui_small_font;
128         n=8; row = 2; col = 0; w = 1; h = 1; 
129         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
130         Pad[n]->canvas->cv_font = ui_small_font;
131         n=9; row = 2; col = 1; w = 1; h = 1; 
132         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
133         Pad[n]->canvas->cv_font = ui_small_font;
134         n=10; row = 2; col = 2; w = 1; h = 1;
135         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
136         Pad[n]->canvas->cv_font = ui_small_font;
137         n=11; row = 3; col = 0; w = 1; h = 1;
138         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
139         Pad[n]->canvas->cv_font = ui_small_font;
140         n=12; row = 3; col = 1; w = 1; h = 1;
141         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
142         Pad[n]->canvas->cv_font = ui_small_font;
143         n=13; row = 3; col = 2; w = 1; h = 1;
144         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
145         Pad[n]->canvas->cv_font = ui_small_font;
146         n=14; row = 3; col = 3; w = 1; h = 2; 
147         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
148         Pad[n]->canvas->cv_font = ui_small_font;
149         n=15; row = 4; col = 0; w = 2; h = 1;
150         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
151         Pad[n]->canvas->cv_font = ui_small_font;
152         n=16; row = 4; col = 2; w = 1; h = 1; 
153         Pad[n] = ui_add_gadget_button( wnd, x+(bw*col), y+(bh*row), bw*w, bh*h, NULL, NULL );
154         Pad[n]->canvas->cv_font = ui_small_font;
155
156         HotKey[0] = KEY_CTRLED + KEY_NUMLOCK;
157         HotKey[1] = KEY_CTRLED + KEY_PADDIVIDE;
158         HotKey[2] = KEY_CTRLED + KEY_PADMULTIPLY;
159         HotKey[3] = KEY_CTRLED + KEY_PADMINUS;
160         HotKey[4] = KEY_CTRLED + KEY_PAD7;
161         HotKey[5] = KEY_CTRLED + KEY_PAD8;
162         HotKey[6] = KEY_CTRLED + KEY_PAD9;
163         HotKey[7] = KEY_CTRLED + KEY_PADPLUS;
164         HotKey[8] = KEY_CTRLED + KEY_PAD4;
165         HotKey[9] = KEY_CTRLED + KEY_PAD5;
166         HotKey[10] = KEY_CTRLED + KEY_PAD6;
167         HotKey[11] = KEY_CTRLED + KEY_PAD1;
168         HotKey[12] = KEY_CTRLED + KEY_PAD2;
169         HotKey[13] = KEY_CTRLED + KEY_PAD3;
170         HotKey[14] = KEY_CTRLED + KEY_PADENTER;
171         HotKey[15] = KEY_CTRLED + KEY_PAD0;
172         HotKey[16] = KEY_CTRLED + KEY_PADPERIOD;
173
174         HotKey1[0] = KEY_SHIFTED + KEY_CTRLED + KEY_NUMLOCK;
175         HotKey1[1] = KEY_SHIFTED + KEY_CTRLED + KEY_PADDIVIDE;
176         HotKey1[2] = KEY_SHIFTED + KEY_CTRLED + KEY_PADMULTIPLY;
177         HotKey1[3] = KEY_SHIFTED + KEY_CTRLED + KEY_PADMINUS;
178         HotKey1[4] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD7;
179         HotKey1[5] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD8;
180         HotKey1[6] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD9;
181         HotKey1[7] = KEY_SHIFTED + KEY_CTRLED + KEY_PADPLUS;
182         HotKey1[8] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD4;
183         HotKey1[9] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD5;
184         HotKey1[10] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD6;
185         HotKey1[11] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD1;
186         HotKey1[12] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD2;
187         HotKey1[13] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD3;
188         HotKey1[14] = KEY_SHIFTED + KEY_CTRLED + KEY_PADENTER;
189         HotKey1[15] = KEY_SHIFTED + KEY_CTRLED + KEY_PAD0;
190         HotKey1[16] = KEY_SHIFTED + KEY_CTRLED + KEY_PADPERIOD;
191
192         active_pad = -1;
193
194 }
195
196
197 void ui_pad_deactivate()
198 {
199         int i;
200
201         for (i=0; i<17; i++ )
202         {
203                 Pad[i]->text = NULL;
204         }
205 }
206
207 static void ui_pad_set_active( int n )
208 {
209         int np;
210         char * name;
211         int i, j;
212
213         
214
215         gr_set_current_canvas( NULL );
216         gr_setcolor( CWHITE );
217         gr_urect( desc_x, desc_y, desc_x+ 56*4-1, desc_y+15 );
218         gr_set_fontcolor( CBLACK, CWHITE );
219         gr_ustring( desc_x, desc_y, KeyPad[n]->description );
220                 
221         for (i=0; i<17; i++ )
222         {
223                 Pad[i]->text = KeyPad[n]->buttontext[i];
224                 Pad[i]->status = 1;
225                 Pad[i]->user_function = NULL;
226                 Pad[i]->dim_if_no_function = 1;
227                 Pad[i]->hotkey = -1;
228                                 
229                 for (j=0; j< KeyPad[n]->numkeys; j++ )
230                 {
231                         if (HotKey[i] == KeyPad[n]->keycode[j] )
232                         {
233                                 Pad[i]->hotkey =  HotKey[i];
234                                 Pad[i]->user_function = func_nget( KeyPad[n]->function_number[j], &np, &name );
235                         }
236                         if (HotKey1[i] == KeyPad[n]->keycode[j] )
237                         {
238                                 Pad[i]->hotkey1 =  HotKey1[i];
239                                 Pad[i]->user_function1 = func_nget( KeyPad[n]->function_number[j], &np, &name );
240                         }
241                 }
242         }
243
244         active_pad = n;
245 }
246
247 void ui_pad_goto(int n)
248 {
249         if ( KeyPad[n] != NULL )
250                 ui_pad_set_active(n);
251 }
252
253 void ui_pad_goto_next()
254 {
255         int i, si;
256
257         i = active_pad + 1;
258         si = i;
259         
260         while( KeyPad[i]==NULL )
261         {
262                 i++;
263                 if (i >= MAX_NUM_PADS)
264                         i = 0;
265                 if (i == si )
266                         break;
267         }
268         ui_pad_set_active(i);
269 }
270
271 void ui_pad_goto_prev()
272 {
273         int i, si;
274
275         if (active_pad == -1 ) 
276                 active_pad = MAX_NUM_PADS;
277         
278         i = active_pad - 1;
279         if (i<0) i= MAX_NUM_PADS - 1;
280         si = i;
281         
282         while( KeyPad[i]==NULL )
283         {
284                 i--;
285                 if (i < 0)
286                         i = MAX_NUM_PADS-1;
287                 if (i == active_pad )
288                         break;
289         }
290         ui_pad_set_active(i);
291 }
292
293 void ui_pad_read( int n, char * filename )
294 {
295         char * ptr;
296         char buffer[100];
297         char text[100];
298         FILE * infile;
299         int linenumber = 0;
300         int i;
301         int keycode, functionnumber;
302
303         infile = fopen( filename, "rt" );
304         if (!infile) {
305                 Warning( "Couldn't find %s", filename );
306                 return;
307         }
308                                           
309         MALLOC( KeyPad[n], UI_KEYPAD, 1 );
310                         
311         for (i=0; i < 17; i++ ) {
312                 MALLOC( KeyPad[n]->buttontext[i], char, 100 );
313         }
314
315         KeyPad[n]->numkeys = 0;
316
317         for (i=0; i<100; i++ )
318         {
319                 KeyPad[n]->keycode[i] = -1;
320                 KeyPad[n]->function_number[i] = 0;
321         }
322
323         while ( linenumber < 22)
324         {
325                 fgets( buffer, 100, infile );
326                 REMOVE_EOL( buffer );
327
328                 switch( linenumber+1 )
329                 {
330                 case 1:
331                         strncpy( KeyPad[n]->description, buffer, 100 );
332                         break;
333                 //===================== ROW 0 ==============================
334                 case 3:
335                         LineParse( 1, text, buffer );
336                         sprintf( KeyPad[n]->buttontext[0], "%s\n", text );
337                         LineParse( 2, text, buffer );
338                         sprintf( KeyPad[n]->buttontext[1], "%s\n", text );
339                         LineParse( 3, text, buffer );
340                         sprintf( KeyPad[n]->buttontext[2], "%s\n", text );
341                         LineParse( 4, text, buffer );
342                         sprintf( KeyPad[n]->buttontext[3], "%s\n", text );
343                         break;
344                 case 4:
345                         LineParse( 1, text, buffer );
346                         sprintf( KeyPad[n]->buttontext[0], "%s%s\n", KeyPad[n]->buttontext[0],text );
347                         LineParse( 2, text, buffer );    
348                         sprintf( KeyPad[n]->buttontext[1], "%s%s\n", KeyPad[n]->buttontext[1],text );
349                         LineParse( 3, text, buffer );
350                         sprintf( KeyPad[n]->buttontext[2], "%s%s\n", KeyPad[n]->buttontext[2],text );
351                         LineParse( 4, text, buffer );
352                         sprintf( KeyPad[n]->buttontext[3], "%s%s\n", KeyPad[n]->buttontext[3],text );
353                         break;
354                 case 5:
355                         LineParse( 1, text, buffer );
356                         sprintf( KeyPad[n]->buttontext[0], "%s%s", KeyPad[n]->buttontext[0],text );
357                         LineParse( 2, text, buffer );    
358                         sprintf( KeyPad[n]->buttontext[1], "%s%s", KeyPad[n]->buttontext[1],text );
359                         LineParse( 3, text, buffer );
360                         sprintf( KeyPad[n]->buttontext[2], "%s%s", KeyPad[n]->buttontext[2],text );
361                         LineParse( 4, text, buffer );
362                         sprintf( KeyPad[n]->buttontext[3], "%s%s", KeyPad[n]->buttontext[3],text );
363                         break;
364                 //===================== ROW 1 ==============================
365                 case 7:
366                         LineParse( 1, text, buffer );
367                         sprintf( KeyPad[n]->buttontext[4], "%s\n", text );
368                         LineParse( 2, text, buffer );    
369                         sprintf( KeyPad[n]->buttontext[5], "%s\n", text );
370                         LineParse( 3, text, buffer);       
371                         sprintf( KeyPad[n]->buttontext[6], "%s\n", text );
372                         LineParse( 4, text, buffer );
373                         sprintf( KeyPad[n]->buttontext[7], "%s\n", text );
374                         break;
375                 case 8:
376                         LineParse( 1, text, buffer );
377                         sprintf( KeyPad[n]->buttontext[4], "%s%s\n", KeyPad[n]->buttontext[4],text );
378                         LineParse( 2, text, buffer );    
379                         sprintf( KeyPad[n]->buttontext[5], "%s%s\n", KeyPad[n]->buttontext[5],text );
380                         LineParse( 3, text, buffer );
381                         sprintf( KeyPad[n]->buttontext[6], "%s%s\n", KeyPad[n]->buttontext[6],text );
382                         LineParse( 4, text, buffer );
383                         sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
384                         break;
385                 case 9:
386                         LineParse( 1, text, buffer );
387                         sprintf( KeyPad[n]->buttontext[4], "%s%s", KeyPad[n]->buttontext[4],text );
388                         LineParse( 2, text, buffer );    
389                         sprintf( KeyPad[n]->buttontext[5], "%s%s", KeyPad[n]->buttontext[5],text );
390                         LineParse( 3, text, buffer );
391                         sprintf( KeyPad[n]->buttontext[6], "%s%s", KeyPad[n]->buttontext[6],text );
392                         LineParse( 4, text, buffer );
393                         sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
394                         break;
395                 case 10:
396                         ptr = strrchr( buffer, 179 );
397                         *ptr = 0;
398                         ptr = strrchr( buffer, 180 );   ptr++;
399                         sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],ptr );
400                         break;
401                 //======================= ROW 2 ==============================
402                 case 11:
403                         LineParse( 1, text, buffer );
404                         sprintf( KeyPad[n]->buttontext[8], "%s\n", text );
405                         LineParse( 2, text, buffer );    
406                         sprintf( KeyPad[n]->buttontext[9], "%s\n", text );
407                         LineParse( 3, text, buffer);       
408                         sprintf( KeyPad[n]->buttontext[10], "%s\n", text );
409                         LineParse( 4, text, buffer );
410                         sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
411                         break;
412                 case 12:
413                         LineParse( 1, text, buffer );
414                         sprintf( KeyPad[n]->buttontext[8], "%s%s\n", KeyPad[n]->buttontext[8],text );
415                         LineParse( 2, text, buffer );    
416                         sprintf( KeyPad[n]->buttontext[9], "%s%s\n", KeyPad[n]->buttontext[9],text );
417                         LineParse( 3, text, buffer );
418                         sprintf( KeyPad[n]->buttontext[10], "%s%s\n", KeyPad[n]->buttontext[10],text );
419                         LineParse( 4, text, buffer );
420                         sprintf( KeyPad[n]->buttontext[7], "%s%s\n", KeyPad[n]->buttontext[7],text );
421                         break;
422                 case 13:
423                         LineParse( 1, text, buffer );
424                         sprintf( KeyPad[n]->buttontext[8], "%s%s", KeyPad[n]->buttontext[8],text );
425                         LineParse( 2, text, buffer );    
426                         sprintf( KeyPad[n]->buttontext[9], "%s%s", KeyPad[n]->buttontext[9],text );
427                         LineParse( 3, text, buffer );
428                         sprintf( KeyPad[n]->buttontext[10], "%s%s", KeyPad[n]->buttontext[10],text );
429                         LineParse( 4, text, buffer );
430                         sprintf( KeyPad[n]->buttontext[7], "%s%s", KeyPad[n]->buttontext[7],text );
431                         break;
432                 // ====================== ROW 3 =========================
433                 case 15:
434                         LineParse( 1, text, buffer );
435                         sprintf( KeyPad[n]->buttontext[11], "%s\n", text );
436                         LineParse( 2, text, buffer );    
437                         sprintf( KeyPad[n]->buttontext[12], "%s\n", text );
438                         LineParse( 3, text, buffer);       
439                         sprintf( KeyPad[n]->buttontext[13], "%s\n", text );
440                         LineParse( 4, text, buffer );
441                         sprintf( KeyPad[n]->buttontext[14], "%s\n", text );
442                         break;
443                 case 16:
444                         LineParse( 1, text, buffer );
445                         sprintf( KeyPad[n]->buttontext[11], "%s%s\n", KeyPad[n]->buttontext[11],text );
446                         LineParse( 2, text, buffer );    
447                         sprintf( KeyPad[n]->buttontext[12], "%s%s\n", KeyPad[n]->buttontext[12],text );
448                         LineParse( 3, text, buffer );
449                         sprintf( KeyPad[n]->buttontext[13], "%s%s\n", KeyPad[n]->buttontext[13],text );
450                         LineParse( 4, text, buffer );
451                         sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
452                         break;
453                 case 17:
454                         LineParse( 1, text, buffer );
455                         sprintf( KeyPad[n]->buttontext[11], "%s%s", KeyPad[n]->buttontext[11],text );
456                         LineParse( 2, text, buffer );    
457                         sprintf( KeyPad[n]->buttontext[12], "%s%s", KeyPad[n]->buttontext[12],text );
458                         LineParse( 3, text, buffer );
459                         sprintf( KeyPad[n]->buttontext[13], "%s%s", KeyPad[n]->buttontext[13],text );
460                         LineParse( 4, text, buffer );
461                         sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
462                         break;
463                 case 18:
464                         ptr = strrchr( buffer, 179 );
465                         *ptr = 0;
466                         ptr = strrchr( buffer, 180 ); ptr++;
467                         sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14], ptr );
468                         break;
469                 //======================= ROW 4 =========================
470                 case 19:
471                         LineParse( 1, text, buffer );
472                         sprintf( KeyPad[n]->buttontext[15], "%s\n", text );
473                         LineParse( 2, text, buffer );    
474                         sprintf( KeyPad[n]->buttontext[16], "%s\n", text );
475                         LineParse( 3, text, buffer );
476                         sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
477                         break;
478                 case 20:
479                         LineParse( 1, text, buffer );
480                         sprintf( KeyPad[n]->buttontext[15], "%s%s\n", KeyPad[n]->buttontext[15],text );
481                         LineParse( 2, text, buffer );    
482                         sprintf( KeyPad[n]->buttontext[16], "%s%s\n", KeyPad[n]->buttontext[16],text );
483                         LineParse( 3, text, buffer );
484                         sprintf( KeyPad[n]->buttontext[14], "%s%s\n", KeyPad[n]->buttontext[14],text );
485                         break;
486                 case 21:
487                         LineParse( 1, text, buffer );
488                         sprintf( KeyPad[n]->buttontext[15], "%s%s", KeyPad[n]->buttontext[15],text );
489                         LineParse( 2, text, buffer );    
490                         sprintf( KeyPad[n]->buttontext[16], "%s%s", KeyPad[n]->buttontext[16],text );
491                         LineParse( 3, text, buffer );
492                         sprintf( KeyPad[n]->buttontext[14], "%s%s", KeyPad[n]->buttontext[14],text );
493                         break;
494                 }
495                                                                                 
496                 linenumber++;   
497         }
498
499         // Get the keycodes...
500
501         while (fscanf( infile, " %s %s ", text, buffer )!=EOF)
502         {       
503                 keycode = DecodeKeyText(text);
504                 functionnumber = func_get_index(buffer);
505                 if (functionnumber==-1)
506                 {
507                         Error( "Unknown function, %s, in %s\n", buffer, filename );
508                 } else if (keycode==-1)
509                 {
510                         Error( "Unknown keystroke, %s, in %s\n", text, filename );
511                         //MessageBox( -2, -2, 1, buffer, "Ok" );
512
513                 } else {
514                         KeyPad[n]->keycode[KeyPad[n]->numkeys] = keycode;
515                         KeyPad[n]->function_number[KeyPad[n]->numkeys] = functionnumber;
516                         KeyPad[n]->numkeys++;
517                 }
518         }
519         
520         fclose(infile);
521
522 }
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537 /*
538 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
539 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
540 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
541 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
542 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
543 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
544 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
545 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
546 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
547 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
548 */
549