Initial commit

This commit is contained in:
RoyR
2026-03-14 14:14:37 -04:00
commit da2fcb6260
22 changed files with 6775 additions and 0 deletions

101
examples/calculator.cm Normal file
View File

@@ -0,0 +1,101 @@
// Public domain / CC0. Use freely for any purpose. RoyR 2026
// calculator.cm - Simple expression calculator
// Demonstrates: global variables, function composition, control flow
void printf(uint8 *fmt);
// Global state for the calculator
int32 last_result = 0;
int32 operation_count = 0;
int32 add(int32 a, int32 b) {
operation_count = operation_count + 1;
last_result = a + b;
return last_result;
}
int32 subtract(int32 a, int32 b) {
operation_count = operation_count + 1;
last_result = a - b;
return last_result;
}
int32 multiply(int32 a, int32 b) {
operation_count = operation_count + 1;
last_result = a * b;
return last_result;
}
int32 divide(int32 a, int32 b) {
if (b == 0) {
printf("Error: Division by zero\n");
return 0;
}
operation_count = operation_count + 1;
last_result = a / b;
return last_result;
}
int32 power(int32 base, int32 exp) {
operation_count = operation_count + 1;
int32 result = 1;
for (int32 i = 0; i < exp; i = i + 1) {
result = result * base;
}
last_result = result;
return result;
}
int32 factorial(int32 n) {
operation_count = operation_count + 1;
if (n <= 1) {
last_result = 1;
return 1;
}
int32 result = 1;
for (int32 i = 2; i <= n; i = i + 1) {
result = result * i;
}
last_result = result;
return result;
}
void print_stats(void) {
printf("\n=== Calculator Statistics ===\n");
printf("Total operations: %d\n", operation_count);
printf("Last result: %d\n", last_result);
printf("============================\n");
}
int32 main(void) {
printf("Calculator Demo\n");
printf("===============\n\n");
// Basic arithmetic
printf("10 + 5 = %d\n", add(10, 5));
printf("10 - 5 = %d\n", subtract(10, 5));
printf("10 * 5 = %d\n", multiply(10, 5));
printf("10 / 5 = %d\n", divide(10, 5));
// Power function
printf("\n2^10 = %d\n", power(2, 10));
printf("5^3 = %d\n", power(5, 3));
// Factorial
printf("\n5! = %d\n", factorial(5));
printf("10! = %d\n", factorial(10));
// Complex expression: (5 + 3) * (10 - 2)
int32 a = add(5, 3);
int32 b = subtract(10, 2);
int32 result = multiply(a, b);
printf("\n(5 + 3) * (10 - 2) = %d\n", result);
// Division by zero test
printf("\nTesting division by zero:\n");
divide(10, 0);
print_stats();
return 0;
}