Last active
July 7, 2023 08:48
-
-
Save medvecky/020dca571c25b844de123f1b5af55f70 to your computer and use it in GitHub Desktop.
Basic ratio calculator for C64 implementation on C (cc65).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <conio.h> | |
#include <c64.h> | |
unsigned char defaultBGColor = 0; | |
unsigned char defaultBorderColor = 0; | |
unsigned char defaultTextColor = 0; | |
void setUpScreen( void ); | |
void resetDefaultScreen( void ); | |
void usage( void ); | |
void getArgs( int * n1, int * d1, int * n2, int * d2 ); | |
char getAnswer( int n1, int d1, int n2, int d2 ); | |
int main ( void ) | |
{ | |
int n1 = 0; | |
int d1 = 0; | |
int n2 = 0; | |
int d2 = 0; | |
unsigned character = 0; | |
int answer = 0; | |
setUpScreen(); | |
usage(); | |
character = cgetc(); | |
while ( character != 'q' ) | |
{ | |
getArgs( &n1, &d1, &n2, &d2 ); | |
character = getAnswer( n1, d1, n2, d2 ); | |
clrscr(); | |
} | |
resetDefaultScreen(); | |
return EXIT_SUCCESS; | |
} | |
void setUpScreen( void ) | |
{ | |
clrscr(); | |
defaultBGColor = bgcolor( COLOR_BLACK ); | |
defaultBorderColor = bordercolor( COLOR_BLACK ); | |
defaultTextColor = textcolor( COLOR_GREEN ); | |
} | |
void resetDefaultScreen( void ) | |
{ | |
clrscr(); | |
bgcolor( defaultBGColor ); | |
bordercolor( defaultBorderColor ); | |
textcolor( defaultTextColor ); | |
* ( char * ) 0xD018 = 0x15; | |
} | |
void usage( void ) | |
{ | |
cputsxy( 12, 0, "RATIO CALCULATOR" ); | |
cputsxy( 12, 2, "N1/D1 = N2/D2" ); | |
gotoxy( 0, 4 ); | |
puts( "Input ratio pramams by prompt" ); | |
puts( "Press any key to continue" ); | |
puts( "or q to exit" ); | |
} | |
void getArgs( int * n1, int * d1, int * n2, int * d2 ) | |
{ | |
cursor( 1 ); | |
printf( "%s? ", "n1 (zero if unknown)" ); | |
scanf( "%d", n1 ); | |
printf( "%s? ", "d1 (zero if unknown)" ); | |
scanf( "%d", d1 ); | |
printf( "%s? ", "n2 (zero if unknown)" ); | |
scanf( "%d", n2 ); | |
printf( "%s? ", "d2 (zero if unknown)" ); | |
scanf( "%d", d2 ); | |
cursor( 0 ); | |
} | |
char getAnswer( int n1, int d1, int n2, int d2 ) | |
{ | |
int answer = 0; | |
if ( n2 == 0 ) | |
{ | |
answer = d2 * n1 / d1; | |
printf( "n2 = %d\n", answer ); | |
} | |
else if ( d2 == 0 ) | |
{ | |
answer = n2 * d1 / n1; | |
printf( "d2 = %d\n", answer ); | |
} | |
else if ( n1 == 0 ) | |
{ | |
answer = d1 * n2 / d2; | |
printf( "n1 = %d\n", answer ); | |
} | |
else if ( d1 == 0 ) | |
{ | |
answer = n1 * d2 / n2; | |
printf( "d1 = %d\n", answer ); | |
} | |
else | |
{ | |
puts( "Wrong params" ); | |
} | |
puts( "Press any key to continue" ); | |
puts( "or q to exit" ); | |
return cgetc(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment