View Single Post
Old Nov 4th, 2006, 7:01 PM   #1
Sane
Banned
 
Sane's Avatar
 
Join Date: Apr 2005
Location: Waterloo, Ontario
Posts: 2,101
Rep Power: 6 Sane will become famous soon enough
Send a message via MSN to Sane
Reducing Repetitive Code

I'm trying to figure out a way to reduce the repetitiveness of this code. I see a couple options: load an array of all the cases from a simplified data file, or declare an array of all the cases.

I could change it to a switch, but I don't feel like having 50 break statements clogging up my source.

The code converts an integer that represents the event of an asynchronous key's state, to a string representing the event's signal in human-readable form. Only the relevant signals are being handled, nothing like mouse clicks, F keys, arrows, etc...

There is no coreleation between the number and the ASCII value for those characters, only to the extent of how it is defined by the Windows operating system. If only there was a function that could do this conversion for me. Any ideas?

c Syntax (Toggle Plain Text)
  1. boolean getShift () {
  2. return (GetAsyncKeyState (160) || GetAsyncKeyState (161));
  3. }
  4.  
  5. boolean getCase () {
  6. return (GetKeyState (20) & 1 ? getShift () == false : getShift () == true);
  7. }
  8.  
  9. void keyToString (unsigned char key, char *result) {
  10. boolean isUpper = getCase ();
  11.  
  12. result[0] = 0;
  13.  
  14. if (key >= 'A' && key <= 'Z') {
  15. result[0] = key + (isUpper ? 0 : 32);
  16. result[1] = 0;
  17. }
  18. else if (key >= 96 && key <= 105) {
  19. result[0] = key-48;
  20. result[1] = 0;
  21. }
  22. else if (key == 8) {
  23. strcpy (result, "^backspace^");
  24. }
  25. else if (key == 9) {
  26. strcpy (result, "^tab^");
  27. }
  28. else if (key == 13) {
  29. strcpy (result, "\n");
  30. }
  31. else if (key == 17) {
  32. strcpy (result, "^ctrl^");
  33. }
  34. else if (key == 18) {
  35. strcpy (result, "^alt^");
  36. }
  37. else if (key == 32) {
  38. strcpy (result, " ");
  39. }
  40. else if (key == 46) {
  41. strcpy (result, "^delete^");
  42. }
  43. else if (key == 48) {
  44. strcpy (result, isUpper ? ")" : "0");
  45. }
  46. else if (key == 49) {
  47. strcpy (result, isUpper ? "!" : "1");
  48. }
  49. else if (key == 50) {
  50. strcpy (result, isUpper ? "@" : "2");
  51. }
  52. else if (key == 51) {
  53. strcpy (result, isUpper ? "#" : "3");
  54. }
  55. else if (key == 52) {
  56. strcpy (result, isUpper ? "$" : "4");
  57. }
  58. else if (key == 53) {
  59. strcpy (result, isUpper ? "%" : "5");
  60. }
  61. else if (key == 54) {
  62. strcpy (result, isUpper ? "^" : "6");
  63. }
  64. else if (key == 55) {
  65. strcpy (result, isUpper ? "&" : "7");
  66. }
  67. else if (key == 56) {
  68. strcpy (result, isUpper ? "*" : "8");
  69. }
  70. else if (key == 57) {
  71. strcpy (result, isUpper ? "(" : "9");
  72. }
  73. else if (key == 186) {
  74. strcpy (result, isUpper ? ":" : ";");
  75. }
  76. else if (key == 187) {
  77. strcpy (result, isUpper ? "+" : "=");
  78. }
  79. else if (key == 188) {
  80. strcpy (result, isUpper ? "<" : ",");
  81. }
  82. else if (key == 189) {
  83. strcpy (result, isUpper ? "_" : "-");
  84. }
  85. else if (key == 190) {
  86. strcpy (result, isUpper ? ">" : ".");
  87. }
  88. else if (key == 191) {
  89. strcpy (result, isUpper ? "?" : "/");
  90. }
  91. else if (key == 192) {
  92. strcpy (result, isUpper ? "~" : "`");
  93. }
  94. else if (key == 219) {
  95. strcpy (result, isUpper ? "{" : "[");
  96. }
  97. else if (key == 220) {
  98. strcpy (result, isUpper ? "|" : "\\");
  99. }
  100. else if (key == 221) {
  101. strcpy (result, isUpper ? "}" : "]");
  102. }
  103. else if (key == 222) {
  104. strcpy (result, isUpper ? "\"" : "'");
  105. }
  106. }
Sane is offline   Reply With Quote