]> git.jsancho.org Git - lugaru.git/blob - Source/WinInput.cpp
Added GPL license and headers.
[lugaru.git] / Source / WinInput.cpp
1 /*
2 Copyright (C) 2003, 2010 - Wolfire Games
3
4 This file is part of Lugaru.
5
6 Lugaru is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
14
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20 */
21
22 /**> HEADER FILES <**/
23 #include "WinInput.h"
24
25 #ifdef WIN32
26 #include "String.h"
27 #else
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include <string.h>
31 #endif
32
33 extern bool keyboardfrozen;
34 extern bool buttons[3];
35 /********************> IsKeyDown() <*****/
36 Boolean IsKeyDown( unsigned char *keyMap, unsigned short theKey )
37 {
38         if(keyboardfrozen)return 0;
39         if(theKey< 0x80 /*1000*/){
40                 static long     keyMapIndex;
41                 static Boolean  isKeyDown;
42                 static short    bitToCheck;
43
44                 // Calculate the key map index
45                 keyMapIndex = keyMap[theKey/8];
46
47                 // Calculate the individual bit to check
48                 bitToCheck = theKey%8;
49
50                 // Check the status of the key
51                 isKeyDown = ( keyMapIndex >> bitToCheck ) & 0x01;
52
53                 // Return the status of the key
54                 return isKeyDown;
55         }
56         else if(theKey==MAC_MOUSEBUTTON1)
57                 return buttons[0];
58         else if(theKey==MAC_MOUSEBUTTON2)
59                 return buttons[1];
60
61         return 0;
62 }
63
64 unsigned short  CharToKey(char* which)
65 {
66         // alphabetic keys
67         if(!stricmp(which,"a")){
68                 return MAC_A_KEY;
69         }
70         if(!stricmp(which,"b")){
71                 return MAC_B_KEY;
72         }
73         if(!stricmp(which,"c")){
74                 return MAC_C_KEY;
75         }
76         if(!stricmp(which,"d")){
77                 return MAC_D_KEY;
78         }
79         if(!stricmp(which,"e")){
80                 return MAC_E_KEY;
81         }
82         if(!stricmp(which,"f")){
83                 return MAC_F_KEY;
84         }
85         if(!stricmp(which,"g")){
86                 return MAC_G_KEY;
87         }
88         if(!stricmp(which,"h")){
89                 return MAC_H_KEY;
90         }
91         if(!stricmp(which,"i")){
92                 return MAC_I_KEY;
93         }
94         if(!stricmp(which,"j")){
95                 return MAC_J_KEY;
96         }
97         if(!stricmp(which,"k")){
98                 return MAC_K_KEY;
99         }
100         if(!stricmp(which,"l")){
101                 return MAC_L_KEY;
102         }
103         if(!stricmp(which,"m")){
104                 return MAC_M_KEY;
105         }
106         if(!stricmp(which,"n")){
107                 return MAC_N_KEY;
108         }
109         if(!stricmp(which,"o")){
110                 return MAC_O_KEY;
111         }
112         if(!stricmp(which,"p")){
113                 return MAC_P_KEY;
114         }
115         if(!stricmp(which,"q")){
116                 return MAC_Q_KEY;
117         }
118         if(!stricmp(which,"r")){
119                 return MAC_R_KEY;
120         }
121         if(!stricmp(which,"s")){
122                 return MAC_S_KEY;
123         }
124         if(!stricmp(which,"t")){
125                 return MAC_T_KEY;
126         }
127         if(!stricmp(which,"u")){
128                 return MAC_U_KEY;
129         }
130         if(!stricmp(which,"v")){
131                 return MAC_V_KEY;
132         }
133         if(!stricmp(which,"w")){
134                 return MAC_W_KEY;
135         }
136         if(!stricmp(which,"x")){
137                 return MAC_X_KEY;
138         }
139         if(!stricmp(which,"y")){
140                 return MAC_Y_KEY;
141         }
142         if(!stricmp(which,"z")){
143                 return MAC_Z_KEY;
144         }
145
146         // keypad keys
147         if(!stricmp(which,"KP0")){
148                 return MAC_NUMPAD_0_KEY;
149         }
150         if(!stricmp(which,"KP1")){
151                 return MAC_NUMPAD_1_KEY;
152         }
153         if(!stricmp(which,"KP2")){
154                 return MAC_NUMPAD_2_KEY;
155         }
156         if(!stricmp(which,"KP3")){
157                 return MAC_NUMPAD_3_KEY;
158         }
159         if(!stricmp(which,"KP4")){
160                 return MAC_NUMPAD_4_KEY;
161         }
162         if(!stricmp(which,"KP5")){
163                 return MAC_NUMPAD_5_KEY;
164         }
165         if(!stricmp(which,"KP6")){
166                 return MAC_NUMPAD_6_KEY;
167         }
168         if(!stricmp(which,"KP7")){
169                 return MAC_NUMPAD_7_KEY;
170         }
171         if(!stricmp(which,"KP8")){
172                 return MAC_NUMPAD_8_KEY;
173         }
174         if(!stricmp(which,"KP9")){
175                 return MAC_NUMPAD_9_KEY;
176         }
177
178         // enter
179         if(!stricmp(which,"enter")){
180                 return MAC_ENTER_KEY;
181         }
182
183         // number keys
184         if(!stricmp(which,"0")){
185                 return MAC_0_KEY;
186         }
187         if(!stricmp(which,"1")){
188                 return MAC_1_KEY;
189         }
190         if(!stricmp(which,"2")){
191                 return MAC_2_KEY;
192         }
193         if(!stricmp(which,"3")){
194                 return MAC_3_KEY;
195         }
196         if(!stricmp(which,"4")){
197                 return MAC_4_KEY;
198         }
199         if(!stricmp(which,"5")){
200                 return MAC_5_KEY;
201         }
202         if(!stricmp(which,"6")){
203                 return MAC_6_KEY;
204         }
205         if(!stricmp(which,"7")){
206                 return MAC_7_KEY;
207         }
208         if(!stricmp(which,"8")){
209                 return MAC_8_KEY;
210         }
211         if(!stricmp(which,"9")){
212                 return MAC_9_KEY;
213         }
214
215         // function keys
216         if(!stricmp(which,"F1")){
217                 return MAC_F1_KEY;
218         }
219         if(!stricmp(which,"F2")){
220                 return MAC_F2_KEY;
221         }
222         if(!stricmp(which,"F3")){
223                 return MAC_F3_KEY;
224         }
225         if(!stricmp(which,"F4")){
226                 return MAC_F4_KEY;
227         }
228         if(!stricmp(which,"F5")){
229                 return MAC_F5_KEY;
230         }
231         if(!stricmp(which,"F6")){
232                 return MAC_F6_KEY;
233         }
234         if(!stricmp(which,"F7")){
235                 return MAC_F7_KEY;
236         }
237         if(!stricmp(which,"F8")){
238                 return MAC_F8_KEY;
239         }
240         if(!stricmp(which,"F9")){
241                 return MAC_F9_KEY;
242         }
243         if(!stricmp(which,"F10")){
244                 return MAC_F10_KEY;
245         }
246         if(!stricmp(which,"F11")){
247                 return MAC_F11_KEY;
248         }
249         if(!stricmp(which,"F12")){
250                 return MAC_F12_KEY;
251         }
252
253         // escape
254         if(!stricmp(which,"escape")){
255                 return MAC_ESCAPE_KEY;
256         }
257         if(!stricmp(which,"backspace")){
258                 return MAC_DELETE_KEY;
259         }
260         if(!stricmp(which,"tab")){
261                 return MAC_TAB_KEY;
262         }
263         if(!stricmp(which,"`")){
264                 return MAC_TILDE_KEY;
265         }
266         if(!stricmp(which,"caps_lock")){
267                 return MAC_CAPS_LOCK_KEY;
268         }
269 //      if(which==){
270 //              return "";
271 //      }
272         if(!stricmp(which,"command")){
273                 return MAC_COMMAND_KEY;
274         }
275         if(!stricmp(which,"option")){
276                 return MAC_OPTION_KEY;
277         }
278         if(!stricmp(which,"delete")){
279                 return MAC_DEL_KEY;
280         }
281         if(!stricmp(which,"insert")){
282                 return MAC_INSERT_KEY;
283         }
284         if(!stricmp(which,"home")){
285                 return MAC_HOME_KEY;
286         }
287         if(!stricmp(which,"end")){
288                 return MAC_END_KEY;
289         }
290         if(!stricmp(which,"page_up")){
291                 return MAC_PAGE_UP_KEY;
292         }
293         if(!stricmp(which,"page_down")){
294                 return MAC_PAGE_DOWN_KEY;
295         }
296         if(!stricmp(which,"clear")){
297                 return MAC_NUMPAD_CLEAR_KEY;
298         }
299
300         if(!stricmp(which,"control")){
301                 return MAC_CONTROL_KEY;
302         }
303         if(!stricmp(which,"return")){
304                 return MAC_RETURN_KEY;
305         }
306         if(!stricmp(which,"space")){
307                 return MAC_SPACE_KEY;
308         }
309         if(!stricmp(which,"shift")){
310                 return MAC_SHIFT_KEY;
311         }
312         if(!stricmp(which,"uparrow")){
313                 return MAC_ARROW_UP_KEY;
314         }
315         if(!stricmp(which,"downarrow")){
316                 return MAC_ARROW_DOWN_KEY;
317         }
318         if(!stricmp(which,"leftarrow")){
319                 return MAC_ARROW_LEFT_KEY;
320         }
321         if(!stricmp(which,"rightarrow")){
322                 return MAC_ARROW_RIGHT_KEY;
323         }
324         if(!stricmp(which,"mouse1")){
325                 return MAC_MOUSEBUTTON1;
326         }
327         if(!stricmp(which,"mouse2")){
328                 return MAC_MOUSEBUTTON2;
329         }
330         if(!stricmp(which,"+")){
331                 return MAC_NUMPAD_PLUS_KEY;
332         }
333         if(!stricmp(which,"*")){
334                 return MAC_NUMPAD_ASTERISK_KEY;
335         }
336         if(!stricmp(which,"/")){
337                 return MAC_SLASH_KEY;
338         }
339         if(!stricmp(which,"\\")){
340                 return MAC_BACKSLASH_KEY;
341         }
342         if(!stricmp(which,"[")){
343                 return MAC_LEFTBRACKET_KEY;
344         }
345         if(!stricmp(which,"]")){
346                 return MAC_RIGHTBRACKET_KEY;
347         }
348         if(!stricmp(which,".")){
349                 return MAC_PERIOD_KEY;
350         }
351         if(!stricmp(which,",")){
352                 return MAC_COMMA_KEY;
353         }
354         if(!stricmp(which,"\"")){
355                 return MAC_APOSTROPHE_KEY;
356         }
357         if(!stricmp(which,";")){
358                 return MAC_SEMICOLON_KEY;
359         }
360         return UNKNOWN_KEY;
361 }
362
363 char*   KeyToChar(unsigned short which)
364 {
365         static int i;
366
367         // alphabetic keys
368         if(which==MAC_A_KEY){
369                 return "a";
370         }
371         if(which==MAC_B_KEY){
372                 return "b";
373         }
374         if(which==MAC_C_KEY){
375                 return "c";
376         }
377         if(which==MAC_D_KEY){
378                 return "d";
379         }
380         if(which==MAC_E_KEY){
381                 return "e";
382         }
383         if(which==MAC_F_KEY){
384                 return "f";
385         }
386         if(which==MAC_G_KEY){
387                 return "g";
388         }
389         if(which==MAC_H_KEY){
390                 return "h";
391         }
392         if(which==MAC_I_KEY){
393                 return "i";
394         }
395         if(which==MAC_J_KEY){
396                 return "j";
397         }
398         if(which==MAC_K_KEY){
399                 return "k";
400         }
401         if(which==MAC_L_KEY){
402                 return "l";
403         }
404         if(which==MAC_M_KEY){
405                 return "m";
406         }
407         if(which==MAC_N_KEY){
408                 return "n";
409         }
410         if(which==MAC_O_KEY){
411                 return "o";
412         }
413         if(which==MAC_P_KEY){
414                 return "p";
415         }
416         if(which==MAC_Q_KEY){
417                 return "q";
418         }
419         if(which==MAC_R_KEY){
420                 return "r";
421         }
422         if(which==MAC_S_KEY){
423                 return "s";
424         }
425         if(which==MAC_T_KEY){
426                 return "t";
427         }
428         if(which==MAC_U_KEY){
429                 return "u";
430         }
431         if(which==MAC_V_KEY){
432                 return "v";
433         }
434         if(which==MAC_W_KEY){
435                 return "w";
436         }
437         if(which==MAC_X_KEY){
438                 return "x";
439         }
440         if(which==MAC_Y_KEY){
441                 return "y";
442         }
443         if(which==MAC_Z_KEY){
444                 return "z";
445         }
446
447         // keypad keys
448         if(which==MAC_NUMPAD_1_KEY){
449                 return "KP1";
450         }
451         if(which==MAC_NUMPAD_2_KEY){
452                 return "KP2";
453         }
454         if(which==MAC_NUMPAD_3_KEY){
455                 return "KP3";
456         }
457         if(which==MAC_NUMPAD_4_KEY){
458                 return "KP4";
459         }
460         if(which==MAC_NUMPAD_5_KEY){
461                 return "KP5";
462         }
463         if(which==MAC_NUMPAD_6_KEY){
464                 return "KP6";
465         }
466         if(which==MAC_NUMPAD_7_KEY){
467                 return "KP7";
468         }
469         if(which==MAC_NUMPAD_8_KEY){
470                 return "KP8";
471         }
472         if(which==MAC_NUMPAD_9_KEY){
473                 return "KP9";
474         }
475         if(which==MAC_NUMPAD_0_KEY){
476                 return "KP0";
477         }
478
479         // enter
480         if(which==MAC_ENTER_KEY){
481                 return "enter";
482         }
483
484         // number keys
485         if(which==MAC_1_KEY){
486                 return "1";
487         }
488         if(which==MAC_2_KEY){
489                 return "2";
490         }
491         if(which==MAC_3_KEY){
492                 return "3";
493         }
494         if(which==MAC_4_KEY){
495                 return "4";
496         }
497         if(which==MAC_5_KEY){
498                 return "5";
499         }
500         if(which==MAC_6_KEY){
501                 return "6";
502         }
503         if(which==MAC_7_KEY){
504                 return "7";
505         }
506         if(which==MAC_8_KEY){
507                 return "8";
508         }
509         if(which==MAC_9_KEY){
510                 return "9";
511         }
512         if(which==MAC_0_KEY){
513                 return "0";
514         }
515
516         // function keys
517         if(which==MAC_F1_KEY){
518                 return "F1";
519         }
520         if(which==MAC_F2_KEY){
521                 return "F2";
522         }
523         if(which==MAC_F3_KEY){
524                 return "F3";
525         }
526         if(which==MAC_F4_KEY){
527                 return "F4";
528         }
529         if(which==MAC_F5_KEY){
530                 return "F5";
531         }
532         if(which==MAC_F6_KEY){
533                 return "F6";
534         }
535         if(which==MAC_F7_KEY){
536                 return "F7";
537         }
538         if(which==MAC_F8_KEY){
539                 return "F8";
540         }
541         if(which==MAC_F9_KEY){
542                 return "F9";
543         }
544         if(which==MAC_F10_KEY){
545                 return "F10";
546         }
547         if(which==MAC_F11_KEY){
548                 return "F11";
549         }
550         if(which==MAC_F12_KEY){
551                 return "F12";
552         }
553
554         // escape
555         if(which==MAC_ESCAPE_KEY){
556                 return "escape";
557         }
558         if(which==MAC_DELETE_KEY){
559                 return "backspace";
560         }
561         if(which==MAC_TAB_KEY){
562                 return "tab";
563         }
564         if(which==MAC_TILDE_KEY){
565                 return "`";
566         }
567         if(which==MAC_CAPS_LOCK_KEY){
568                 return "caps_lock";
569         }
570         if(which==MAC_COMMAND_KEY){
571                 return "command";
572         }
573         if(which==MAC_OPTION_KEY){
574                 return "option";
575         }
576         if(which==MAC_DEL_KEY){
577                 return "delete";
578         }
579         if(which==MAC_INSERT_KEY){
580                 return "insert";
581         }
582         if(which==MAC_HOME_KEY){
583                 return "home";
584         }
585         if(which==MAC_END_KEY){
586                 return "end";
587         }
588         if(which==MAC_PAGE_UP_KEY){
589                 return "page_up";
590         }
591         if(which==MAC_PAGE_DOWN_KEY){
592                 return "page_down";
593         }
594         if(which==MAC_NUMPAD_CLEAR_KEY){
595                 return "clear";
596         }
597         if(which==MAC_CONTROL_KEY){
598                 return "control";
599         }
600         if(which==MAC_SPACE_KEY){
601                 return "space";
602         }
603         if(which==MAC_RETURN_KEY){
604                 return "return";
605         }
606         if(which==MAC_SHIFT_KEY){
607                 return "shift";
608         }
609         if(which==MAC_ARROW_UP_KEY){
610                 return "uparrow";
611         }
612         if(which==MAC_ARROW_DOWN_KEY){
613                 return "downarrow";
614         }
615         if(which==MAC_ARROW_LEFT_KEY){
616                 return "leftarrow";
617         }
618         if(which==MAC_ARROW_RIGHT_KEY){
619                 return "rightarrow";
620         }
621         if(which==MAC_MOUSEBUTTON1){
622                 return "mouse1";
623         }
624         if(which==MAC_MOUSEBUTTON2){
625                 return "mouse2";
626         }
627         if(which==MAC_ARROW_RIGHT_KEY){
628                 return "rightarrow";
629         }
630         if(which==MAC_MINUS_KEY||which==MAC_NUMPAD_MINUS_KEY){
631                 return "-";
632         }
633         if(which==MAC_PLUS_KEY||which==MAC_NUMPAD_EQUALS_KEY){
634                 return "=";
635         }
636         if(which==MAC_NUMPAD_PLUS_KEY){
637                 return "+";
638         }
639         if(which==MAC_NUMPAD_ASTERISK_KEY){
640                 return "*";
641         }
642         if(which==MAC_SLASH_KEY||which==MAC_NUMPAD_SLASH_KEY){
643                 return "/";
644         }
645         if(which==MAC_BACKSLASH_KEY){
646                 return "\\";
647         }
648         if(which==MAC_LEFTBRACKET_KEY){
649                 return "[";
650         }
651         if(which==MAC_RIGHTBRACKET_KEY){
652                 return "]";
653         }
654         if(which==MAC_PERIOD_KEY||which==MAC_NUMPAD_PERIOD_KEY){
655                 return ".";
656         }
657         if(which==MAC_COMMA_KEY){
658                 return ",";
659         }
660         if(which==MAC_APOSTROPHE_KEY){
661                 return "\"";
662         }
663         if(which==MAC_SEMICOLON_KEY){
664                 return ";";
665         }
666         return "unknown";
667 }
668
669 char    KeyToSingleChar(unsigned short which)
670 {
671         static int i;
672
673         if(which==MAC_A_KEY){
674                 return 'a';
675         }
676         if(which==MAC_B_KEY){
677                 return 'b';
678         }
679         if(which==MAC_C_KEY){
680                 return 'c';
681         }
682         if(which==MAC_D_KEY){
683                 return 'd';
684         }
685         if(which==MAC_E_KEY){
686                 return 'e';
687         }
688         if(which==MAC_F_KEY){
689                 return 'f';
690         }
691         if(which==MAC_G_KEY){
692                 return 'g';
693         }
694         if(which==MAC_H_KEY){
695                 return 'h';
696         }
697         if(which==MAC_I_KEY){
698                 return 'i';
699         }
700         if(which==MAC_J_KEY){
701                 return 'j';
702         }
703         if(which==MAC_K_KEY){
704                 return 'k';
705         }
706         if(which==MAC_L_KEY){
707                 return 'l';
708         }
709         if(which==MAC_M_KEY){
710                 return 'm';
711         }
712         if(which==MAC_N_KEY){
713                 return 'n';
714         }
715         if(which==MAC_O_KEY){
716                 return 'o';
717         }
718         if(which==MAC_P_KEY){
719                 return 'p';
720         }
721         if(which==MAC_Q_KEY){
722                 return 'q';
723         }
724         if(which==MAC_R_KEY){
725                 return 'r';
726         }
727         if(which==MAC_S_KEY){
728                 return 's';
729         }
730         if(which==MAC_T_KEY){
731                 return 't';
732         }
733         if(which==MAC_U_KEY){
734                 return 'u';
735         }
736         if(which==MAC_V_KEY){
737                 return 'v';
738         }
739         if(which==MAC_W_KEY){
740                 return 'w';
741         }
742         if(which==MAC_X_KEY){
743                 return 'x';
744         }
745         if(which==MAC_Y_KEY){
746                 return 'y';
747         }
748         if(which==MAC_Z_KEY){
749                 return 'z';
750         }
751         if(which==MAC_NUMPAD_1_KEY){
752                 return '1';
753         }
754         if(which==MAC_NUMPAD_2_KEY){
755                 return '2';
756         }
757         if(which==MAC_NUMPAD_3_KEY){
758                 return '3';
759         }
760         if(which==MAC_NUMPAD_4_KEY){
761                 return '4';
762         }
763         if(which==MAC_NUMPAD_5_KEY){
764                 return '5';
765         }
766         if(which==MAC_NUMPAD_6_KEY){
767                 return '6';
768         }
769         if(which==MAC_NUMPAD_7_KEY){
770                 return '7';
771         }
772         if(which==MAC_NUMPAD_8_KEY){
773                 return '8';
774         }
775         if(which==MAC_NUMPAD_9_KEY){
776                 return '9';
777         }
778         if(which==MAC_NUMPAD_0_KEY){
779                 return '0';
780         }
781         if(which==MAC_1_KEY){
782                 return '1';
783         }
784         if(which==MAC_2_KEY){
785                 return '2';
786         }
787         if(which==MAC_3_KEY){
788                 return '3';
789         }
790         if(which==MAC_4_KEY){
791                 return '4';
792         }
793         if(which==MAC_5_KEY){
794                 return '5';
795         }
796         if(which==MAC_6_KEY){
797                 return '6';
798         }
799         if(which==MAC_7_KEY){
800                 return '7';
801         }
802         if(which==MAC_8_KEY){
803                 return '8';
804         }
805         if(which==MAC_9_KEY){
806                 return '9';
807         }
808         if(which==MAC_0_KEY){
809                 return '0';
810         }
811         if(which==MAC_SPACE_KEY){
812                 return ' ';
813         }
814         if(which==MAC_MINUS_KEY||which==MAC_NUMPAD_MINUS_KEY){
815                 return '-';
816         }
817         if(which==MAC_PLUS_KEY||which==MAC_NUMPAD_EQUALS_KEY){
818                 return '=';
819         }
820         if(which==MAC_NUMPAD_PLUS_KEY){
821                 return '+';
822         }
823         if(which==MAC_NUMPAD_ASTERISK_KEY){
824                 return '*';
825         }
826         if(which==MAC_SLASH_KEY||which==MAC_NUMPAD_SLASH_KEY){
827                 return '/';
828         }
829         if(which==MAC_BACKSLASH_KEY){
830                 return '\\';
831         }
832         if(which==MAC_LEFTBRACKET_KEY){
833                 return '[';
834         }
835         if(which==MAC_RIGHTBRACKET_KEY){
836                 return ']';
837         }
838         if(which==MAC_PERIOD_KEY||which==MAC_NUMPAD_PERIOD_KEY){
839                 return '.';
840         }
841         if(which==MAC_COMMA_KEY){
842                 return ',';
843         }
844         if(which==MAC_APOSTROPHE_KEY){
845                 return '\'';
846         }
847         if(which==MAC_SEMICOLON_KEY){
848                 return ';';
849         }
850         return '\0';
851 }
852
853 char    Shift(char which)
854 {
855         static int i;
856
857         if(which=='a'){
858                 return 'A';
859         }
860         if(which=='b'){
861                 return 'B';
862         }
863         if(which=='c'){
864                 return 'C';
865         }
866         if(which=='d'){
867                 return 'D';
868         }
869         if(which=='e'){
870                 return 'E';
871         }
872         if(which=='f'){
873                 return 'F';
874         }
875         if(which=='g'){
876                 return 'G';
877         }
878         if(which=='h'){
879                 return 'H';
880         }
881         if(which=='e'){
882                 return 'E';
883         }
884         if(which=='f'){
885                 return 'F';
886         }
887         if(which=='g'){
888                 return 'G';
889         }
890         if(which=='h'){
891                 return 'H';
892         }
893         if(which=='i'){
894                 return 'I';
895         }
896         if(which=='j'){
897                 return 'J';
898         }
899         if(which=='k'){
900                 return 'K';
901         }
902         if(which=='l'){
903                 return 'L';
904         }
905         if(which=='m'){
906                 return 'M';
907         }
908         if(which=='n'){
909                 return 'N';
910         }
911         if(which=='o'){
912                 return 'O';
913         }
914         if(which=='p'){
915                 return 'P';
916         }
917         if(which=='q'){
918                 return 'Q';
919         }
920         if(which=='r'){
921                 return 'R';
922         }
923         if(which=='s'){
924                 return 'S';
925         }
926         if(which=='t'){
927                 return 'T';
928         }
929         if(which=='u'){
930                 return 'U';
931         }
932         if(which=='v'){
933                 return 'V';
934         }
935         if(which=='w'){
936                 return 'W';
937         }
938         if(which=='x'){
939                 return 'X';
940         }
941         if(which=='y'){
942                 return 'Y';
943         }
944         if(which=='z'){
945                 return 'Z';
946         }
947         if(which=='1'){
948                 return '!';
949         }
950         if(which=='2'){
951                 return '@';
952         }
953         if(which=='3'){
954                 return '#';
955         }
956         if(which=='4'){
957                 return '$';
958         }
959         if(which=='5'){
960                 return '%';
961         }
962         if(which=='6'){
963                 return '^';
964         }
965         if(which=='7'){
966                 return '&';
967         }
968         if(which=='8'){
969                 return '*';
970         }
971         if(which=='9'){
972                 return '(';
973         }
974         if(which=='0'){
975                 return ')';
976         }
977         if(which=='-'){
978                 return '_';
979         }
980         if(which=='='){
981                 return '+';
982         }
983         if(which=='['){
984                 return '{';
985         }
986         if(which==']'){
987                 return '}';
988         }
989         if(which=='\\'){
990                 return '|';
991         }
992         if(which=='.'){
993                 return '>';
994         }
995         if(which==','){
996                 return '<';
997         }
998         if(which=='/'){
999                 return '?';
1000         }
1001         if(which==';'){
1002                 return ':';
1003         }
1004         if(which=='\''){
1005                 return '\"';
1006         }
1007         return which;
1008 }
1009
1010 bool    Compare(char *thestring, char *tocompare, int start, int end)
1011 {
1012         static int i;
1013         for(i=start;i<=end;i++){
1014                 if(thestring[i]!=tocompare[i-start]&&thestring[i]!=tocompare[i-start]+'A'-'a')return 0;
1015         }
1016         return 1;
1017 }