Rewrite to C89 standards, preserve compatibility with old x86 machines

This commit is contained in:
mrkmntal 2026-03-26 22:55:41 -04:00
commit 0d66f50b72

View file

@ -24,7 +24,8 @@ const char* currency_names[] = {"USD", "JPY", "EUR"};
Currency parse_currency(const char* input) {
char upper[4] = {0};
for (int i = 0; i < 3 && input[i]; i++) {
int i;
for (i = 0; i < 3 && input[i]; i++) {
upper[i] = toupper(input[i]);
}
@ -53,8 +54,9 @@ double convert_from_usd(double usd_amount, Currency to) {
}
double convert_currency(double amount, Currency from, Currency to) {
double usd_amount;
if (from == to) return amount;
double usd_amount = convert_to_usd(amount, from);
usd_amount = convert_to_usd(amount, from);
return convert_from_usd(usd_amount, to);
}
@ -73,10 +75,11 @@ void print_table_footer(void) {
}
void print_all_conversions(double amount, Currency from) {
int i;
printf("\n");
print_table_header();
for (int i = 0; i < 3; i++) {
for (i = 0; i < 3; i++) {
if (i != from) {
Currency to = (Currency)i;
double result = convert_currency(amount, from, to);
@ -94,7 +97,8 @@ void print_all_conversions(double amount, Currency from) {
void interactive_mode(void) {
char from_input[10], to_input[10];
double amount;
char show_all[10];
double amount, result;
Currency from, to;
printf("\n=== sccash - Simple C Cash ===\n\n");
@ -129,7 +133,7 @@ void interactive_mode(void) {
return;
}
double result = convert_currency(amount, from, to);
result = convert_currency(amount, from, to);
printf("\n");
print_table_header();
@ -138,7 +142,6 @@ void interactive_mode(void) {
printf("\n");
printf("Show all conversions? (y/n): ");
char show_all[10];
scanf("%9s", show_all);
if (show_all[0] == 'y' || show_all[0] == 'Y') {
print_all_conversions(amount, from);
@ -146,6 +149,9 @@ void interactive_mode(void) {
}
void cli_mode(int argc, char* argv[]) {
double amount, result;
Currency from, to;
if (argc < 4) {
fprintf(stderr, "Usage: %s <amount> <from> <to>\n", argv[0]);
fprintf(stderr, " amount: numeric value to convert\n");
@ -156,14 +162,14 @@ void cli_mode(int argc, char* argv[]) {
exit(1);
}
double amount = atof(argv[1]);
amount = atof(argv[1]);
if (amount <= 0) {
fprintf(stderr, "Error: Invalid amount '%s'\n", argv[1]);
exit(1);
}
Currency from = parse_currency(argv[2]);
Currency to = parse_currency(argv[3]);
from = parse_currency(argv[2]);
to = parse_currency(argv[3]);
if (from == CURRENCY_INVALID) {
fprintf(stderr, "Error: Invalid source currency '%s'\n", argv[2]);
@ -177,7 +183,7 @@ void cli_mode(int argc, char* argv[]) {
exit(1);
}
double result = convert_currency(amount, from, to);
result = convert_currency(amount, from, to);
printf("\n");
print_table_header();