Skip to content

Instantly share code, notes, and snippets.

@medvecky
Last active July 7, 2023 08:48
Show Gist options
  • Save medvecky/020dca571c25b844de123f1b5af55f70 to your computer and use it in GitHub Desktop.
Save medvecky/020dca571c25b844de123f1b5af55f70 to your computer and use it in GitHub Desktop.
Basic ratio calculator for C64 implementation on C (cc65).
#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