#include "calculator.h" void handleCalc(struct calculator *calc, int input) { switch (calc->state) { case NUMBER_FIRST: switch (input) { case 0: calc->num1 = (calc->num1 * 10) + 7; break; case 1: calc->num1 = (calc->num1 * 10) + 8; break; case 2: calc->num1 = (calc->num1 * 10) + 9; break; case 3: calc->operation = DIV; calc->state = NUMBER_SECOND; break; case 4: calc->num1 = (calc->num1 * 10) + 4; break; case 5: calc->num1 = (calc->num1 * 10) + 5; break; case 6: calc->num1 = (calc->num1 * 10) + 6; break; case 7: calc->operation = MUL; calc->state = NUMBER_SECOND; break; case 8: calc->num1 = (calc->num1 * 10) + 1; break; case 9: calc->num1 = (calc->num1 * 10) + 2; break; case 10: calc->num1 = (calc->num1 * 10) + 3; break; case 11: calc->operation = SUB; calc->state = NUMBER_SECOND; break; case 12: calc->num1 = (calc->num1 * 10); break; case 13: clearCalc(calc); break; case 14: break; case 15: calc->operation = ADD; calc->state = NUMBER_SECOND; break; } break; case NUMBER_SECOND: switch (input) { case 0: calc->num2 = (calc->num2 * 10) + 7; break; case 1: calc->num2 = (calc->num2 * 10) + 8; break; case 2: calc->num2 = (calc->num2 * 10) + 9; break; case 3: break; case 4: calc->num2 = (calc->num2 * 10) + 4; break; case 5: calc->num2 = (calc->num2 * 10) + 5; break; case 6: calc->num2 = (calc->num2 * 10) + 6; break; case 7: break; case 8: calc->num2 = (calc->num2 * 10) + 1; break; case 9: calc->num2 = (calc->num2 * 10) + 2; break; case 10: calc->num2 = (calc->num2 * 10) + 3; break; case 11: break; case 12: calc->num2 = (calc->num2 * 10); break; case 13: clearCalc(calc); break; case 14: switch (calc->operation) { case ADD: calc->result = calc->num1 + calc->num2; calc->state = RESULT; break; case SUB: calc->result = calc->num1 - calc->num2; calc->state = RESULT; break; case MUL: calc->result = calc->num1 * calc->num2; calc->state = RESULT; break; case DIV: calc->result = calc->num1 / calc->num2; calc->state = RESULT; break; } break; case 15: break; } break; case RESULT: switch (input) { case 13: clearCalc(calc); case 14: clearCalc(calc); break; } break; } } void clearCalc(struct calculator* calc) { calc->state = NUMBER_FIRST; calc->operation = NO_OP; calc->num1 = 0; calc->num2 = 0; calc->result = 0; }