/*
 * Print a table with various formatting options
 * Format dates
 */
#include <SPI.h>
#include <SdFat.h>

// create Serial stream
ArduinoOutStream cout(Serial);
//------------------------------------------------------------------------------
// print a table to demonstrate format manipulators
void example(void) {
  const int max = 10;
  const int width = 4;

  for (int row = 1; row <= max; row++) {
    for (int col = 1; col <= max; col++) {
      cout << setw(width) << row * col << (col == max ? '\n' : ' ');
    }
  }
  cout << endl;
}
//------------------------------------------------------------------------------
// print a date as mm/dd/yyyy with zero fill in mm and dd
// shows how to set and restore the fill character
void showDate(int m, int d, int y) {
  // convert two digit year
  if (y < 100) {
    y += 2000;
  }

  // set new fill to '0' save old fill character
  char old = cout.fill('0');

  // print date
  cout << setw(2) << m << '/' << setw(2) << d << '/' << y << endl;

  // restore old fill character
  cout.fill(old);
}
//------------------------------------------------------------------------------
void setup(void) {
  Serial.begin(9600);

  while (!Serial) {}  // wait for Leonardo
  delay(2000);

  cout << endl << "default formatting" << endl;
  example();

  cout << showpos << "showpos" << endl;
  example();

  cout << hex << left << showbase << "hex left showbase" << endl;
  example();

  cout << internal << setfill('0') << uppercase;
  cout << "uppercase hex internal showbase fill('0')" <<endl;
  example();

  // restore default format flags and fill character
  cout.flags(ios::dec | ios::right | ios::skipws);
  cout.fill(' ');

  cout << "showDate example" <<endl;
  showDate(7, 4, 11);
  showDate(12, 25, 11);
}
void loop(void) {}
