utilities.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "utilities.h"
  2. #include "calculator.h"
  3. char getKeyAtPosition(short x, short y) {
  4. const char keys[6][5] = {
  5. {'*', ' ', ' ', ' ', ' '}, // Row 1 (MODE key)
  6. {' ', ' ', ' ', ' ', ' '}, // Row 2 (display row)
  7. {'7', '8', '9', 'A', 'B'}, // Row 3
  8. {'4', '5', '6', 'C', 'D'}, // Row 4
  9. {'1', '2', '3', 'E', 'F'}, // Row 5
  10. {'<', '0', '=', 'R', ' '} // Row 6
  11. };
  12. return (y < 6 && x < 5) ? keys[y][x] : ' ';
  13. }
  14. short calculateStringWidth(const char* str, short length) {
  15. short width = 0;
  16. for (short i = 0; i < length; i++) {
  17. switch (str[i]) {
  18. case '*':width += 4;break;
  19. case '0':width += 4;break;
  20. case '1':width += 3;break;
  21. case '2':
  22. case '3':
  23. case '4':width += 4;break;
  24. case '5':width += 4;break;
  25. case '6':width += 4;break;
  26. case '7':width += 4;break;
  27. case '8':width += 4;break;
  28. case '9':width += 4;break;
  29. case 'A':
  30. case 'B':
  31. case 'C':
  32. case 'D':
  33. case 'E':
  34. case 'F':
  35. case '<':width += 3;break;
  36. case '=':width += 4;break;
  37. case 'R':width += 9;break;
  38. default:
  39. width += 3;
  40. break;
  41. }
  42. width += 1;
  43. }
  44. return width;
  45. }