/* Version using pass by reference... */

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define TRUE (1)
#define FALSE (0)

struct complex_s
{
  double real;
  double imaginary;
};

int strequal(char s0[], char s1[])
{
  return(strcmp(s0, s1) == 0);
}

struct complex_s complex_add(
  struct complex_s addend,
  struct complex_s augend)
{
  struct complex_s sum;

  sum.real =  addend.real + augend.real;
  sum.imaginary = addend.imaginary + augend.imaginary;

  return(sum);
}

struct complex_s get_complex(void)
{
  struct complex_s result;

  printf("Please enter x-coordinate: ");
  scanf("%lf", &result.real);
  printf("Please enter y-coordinate: ");
  scanf("%lf", &result.imaginary);

  return (result);
}


void put_complex(struct complex_s z)
{
  printf("%f + j %f", z.real, z.imaginary);
}

void main(void)
{
  int done;
  char answer[80];
  struct complex_s z1, z2, zsum; 

  printf("Welcome to CADD.\n\n");
  done = FALSE;
  while (!done)
  {
    printf("Complex number z1:\n");
    z1 = get_complex();
    printf("Complex number z2:\n");
    z2 = get_complex();
 
    zsum = complex_add(z1, z2);

    printf("The sum is: ");
    put_complex(zsum);
    printf("\n\n");

    printf("Do another (y/n)? ");
    scanf("%s", answer);
    done = strequal(answer, "n");
  }

  printf("Goodbye from CADD.");
}
