#include <stdio.h>
#include <stdlib.h>

#include "address.h"

char * copy_string(char * input)
{
  int length = string_length(input);
  char * result = (char *) malloc(sizeof(char) * (length + 1));

  int i;
  for (i = 0; i <= length; i++)
  {
    result[i] = input[i];
  }

  return result;
}


int string_length(char * my_string)
{
  int counter = 0;
  while(1)
  {
    if (my_string[counter] != 0)
    {
      counter++;
    }
    else
    {
      break;
    }
  }

  return counter;
}


void input_address(struct address * a1)
{
  ????????????????
}


void print_address(struct address a1)
{
  ????????????????
}


struct address shallow_copy(struct address a1)
{
  ????????????????
}


struct address deep_copy(struct address a1)
{
  ????????????????
}


void foo1(struct address * a1)
{
  ????????????????
}


void foo2(struct address a1)
{
  ????????????????
}


void foo3(struct address * a1)
{
  ????????????????
}


int main()
{
  struct address a1;
  input_address(&a1);

  // backup plan: if you cannot get input_address to work, just use the next lines:
  // a1.street_number = 20;
  // a1.street_name = copy_string("No_Name_Street");
  // a1.city = copy_string("Arlington");
  // a1.state = copy_string("Texas");

  printf("a1, at step 0:\n");
  print_address(a1);

  foo1(&a1);
  printf("a1, at step 1:\n");
  print_address(a1);

  struct address a2 = shallow_copy(a1);
  struct address a3 = deep_copy(a1);

  foo2(a2);
  printf("a2, at step 2:\n");
  print_address(a2);

  foo3(&a3);
  printf("a3, at step 3:\n");
  print_address(a3);

  free(a1.street_name);
  free(a1.city);
  free(a1.state);
  free(a3.street_name);
  free(a3.city);
  free(a3.state);
}


