-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
125 lines (109 loc) · 3.71 KB
/
Copy pathscript.js
File metadata and controls
125 lines (109 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const screen = document.getElementById('terminalScreen');
const termInput = document.getElementById('termInput');
// Finite State Machine Trackers
const STATES = { MENU: 0, GET_NUM1: 1, GET_NUM2: 2 };
let currentState = STATES.MENU;
// System Variables
let appChoice = '';
let num1 = 0;
let num2 = 0;
let result = 0;
// Initialize System Loop
window.onload = () => {
printMenu();
};
function printMenu() {
const menuText =
`===== MENU CALCULATOR =====
1. Addition (+)
2. Subtraction (-)
3. Multiplication (*)
4. Division (/)
X. Exit Program
Enter your choice: `;
writeToTerminal(menuText, '#abb2bf');
}
function writeToTerminal(text, color = '#abb2bf') {
const span = document.createElement('span');
span.style.color = color;
span.textContent = text;
screen.appendChild(span);
screen.scrollTop = screen.scrollHeight;
}
// Handle Command Submissions via Enter key
termInput.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
const inputVal = this.value.trim();
this.value = '';
if (inputVal === '') return;
writeToTerminal(inputVal + '\n', '#98c379');
handleExecutionStep(inputVal);
}
});
function handleExecutionStep(input) {
const upperInput = input.toUpperCase();
// Loop Interrupter: Exit check
if (upperInput === 'X') {
writeToTerminal('\nExiting Calculator. Goodbye!\n', '#e06c75');
termInput.disabled = true;
return;
}
switch(currentState) {
case STATES.MENU:
if (['1', '2', '3', '4'].includes(upperInput)) {
appChoice = upperInput;
currentState = STATES.GET_NUM1;
writeToTerminal('\nEnter first number (0-9): ', '#61afef');
} else {
writeToTerminal('Invalid Choice! Try again.\n\n', '#e06c75');
printMenu();
}
break;
case STATES.GET_NUM1:
let parsed1 = parseInt(upperInput);
if (!isNaN(parsed1) && parsed1 >= 0 && parsed1 <= 9) {
num1 = parsed1;
currentState = STATES.GET_NUM2;
writeToTerminal('Enter second number (0-9): ', '#61afef');
} else {
writeToTerminal('Invalid input. Enter a single digit (0-9): ', '#e06c75');
}
break;
case STATES.GET_NUM2:
let parsed2 = parseInt(upperInput);
if (!isNaN(parsed2) && parsed2 >= 0 && parsed2 <= 9) {
num2 = parsed2;
executeProcedure();
} else {
writeToTerminal('Invalid input. Enter a single digit (0-9): ', '#e06c75');
}
break;
}
}
// Emulating Isolated Calculation Blocks
function executeProcedure() {
if (appChoice === '1') {
result = num1 + num2;
writeToTerminal(`\nResult: ${result}\n\n`, '#98c379');
}
else if (appChoice === '2') {
result = num1 - num2;
writeToTerminal(`\nResult: ${result}\n\n`, '#98c379');
}
else if (appChoice === '3') {
result = num1 * num2;
writeToTerminal(`\nResult: ${result}\n\n`, '#98c379');
}
else if (appChoice === '4') {
if (num2 === 0) {
writeToTerminal('\nError: Division by zero!\n\n', '#e06c75');
} else {
let quotient = Math.floor(num1 / num2);
let remainder = num1 % num2;
writeToTerminal(`\nResult: ${quotient} Remainder: ${remainder}\n\n`, '#98c379');
}
}
// Reset workflow back to menu routine selection
currentState = STATES.MENU;
printMenu();
}