Serial.read() help

If anyone is having the same problems, or wondering if the noob will ever shutup: I found a very good example program from http://rob.faludi.com/itp/clock_decode_with_debug.pde
Here 'rob' is decoding a serial message the same way i wanted to

// this program decodes a clock string sent via XBee radio
// the end result is six integer variables that hold the current year, month, day, hour, minute and second
//
// the time string is in the following format:
// *20061003143227
// where the year is 2006, month is October, day is the 3rd, hour is 14 (2 p.m.), minute is 32 and second is 27
//
// by Rob Faludi
// http://www.faludi.com

////// DEBUG OUTPUT IS HANDY, BUT NOT NECESSARY FOR CLOCK DECODING ///////
#include <SoftwareSerial.h>
int rx=6, tx=7; // pins 6 and 7 will have a debug output
SoftwareSerial softSerial(rx, tx); // creates SoftwareSerial on pins 6 and 7
///////////////////////////////////////////////////////////////


int ledPin = 13;
int year;
byte month, day, hour, minute, second;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode (rx,INPUT);
  pinMode (tx,OUTPUT); 
  // start up the serial connection with 9600-8-n-1-true (non-inverted):
  Serial.begin(9600); // start hardware serial process
  softSerial.begin(9600); // start software serial process
  // blink the status LED
  blinkLED(ledPin, 2, 200);

  softSerial.println();  // do a linefeed on the debug port
  delay(500);
  softSerial.println("starting..."); // show startup on the debug port
  setupXBee(); 
}


void loop() {
  Serial.flush(); // clear the serial buffer before reading new data
  char timeString[15]; // create a string to hold the time value when it's read
  memset(timeString,'\0',15); // initialize that string to all NULL characters
  boolean timeStringValid = false; // declare and initialize a variable to track whether the string has all valid characters
  Serial.print("GET");
  byte inByte = '\0'; // declare and initialize a byte to read in serial data
  long startTime = millis();//makes the start time = to now
  int timeout = 1000; // timeout after one second
  while(millis() - startTime < timeout && inByte != '*') {
    inByte = Serial.read(); // read data and wait for an asterisk character
  }

  if (inByte == '*') { // if we got the correct start character (instead of a timeout)
    timeStringValid = true; // declare and initialize a variable to track whether the string has all valid characters
    long startTime = millis();//makes the start time = to now
    int timeout = 1000; // timeout after one second
    while(millis() - startTime < timeout && Serial.available() < 14) {
      ; //wait for enough data to be available (14 characters of time string), while doing nothing else
    }
    for (int i=0; i < 14; i++) {
      timeString[i] = Serial.read(); // reach each time string character into a character array
      if(timeString[i] < '0' || timeString[i] > '9') {
        timeStringValid = false;  // if any character is bad then the whole string is bad
      }
    }
    softSerial.print("Time: ");
    softSerial.println(timeString);
  }

  if (timeStringValid == true) {
    char yearString[5];  // create a string to hold the year part of the string
    memset(yearString,'\0',5); // initialize that string to all NULL characters
    strncpy( yearString, timeString, 4); // copy the first four characters of timeString into the year string
    year = atoi(yearString); // convert ASCII year string to integer and store in the year integer variable
    softSerial.print("Year: ");
    softSerial.println(year, DEC);

    char monthString[3]; // create a string to hold the month part of the string
    memset(monthString,'\0',3); // initialize that string to all NULL characters
    strncpy( monthString, timeString+4, 2); // skip four characters, then copy the next two of timeString into the month string
    month = atoi(monthString);  // convert ASCII month string to integer and store in the month integer variable
    softSerial.print("Month: ");
    softSerial.println(month, DEC);

    char dayString[3];
    memset(dayString,'\0',3);
    strncpy( dayString, timeString+6, 2);
    day = atoi(dayString);
    softSerial.print("Day: ");
    softSerial.println(day, DEC);

    char hourString[3];
    memset(hourString,'\0',3);
    strncpy( hourString, timeString+8, 2);
    hour = atoi(hourString);
    softSerial.print("Hour: ");
    softSerial.println(hour, DEC);

    char minuteString[3];
    memset(minuteString,'\0',3);
    strncpy( minuteString, timeString+10, 2);
    minute = atoi(minuteString);
    softSerial.print("Minute: ");
    softSerial.println(minute, DEC);

    char secondString[3];
    memset(secondString,'\0',3);
    strncpy( secondString, timeString+12, 2);
    second = atoi(secondString);
    softSerial.print("Second: ");
    softSerial.println(second, DEC);
  }

  softSerial.println(""); // print a blank line

  delay(1000); // wait for a moment so that output is readable
}



void setupXBee() {
  boolean success = false;
  int ctr = 0;
  while (success == false && ctr < 6) {
    // an arbitrary byte to wake up the XBee
    Serial.print("X");
    delay(1100);
    // put the XBee in command mode
    Serial.print("+++");
    delay(1100);
    Serial.flush(); // clear the serial buffer before sending and reading new data
    // set the PAN (personal area network) ID number
    Serial.print("ATIDC,");
    // set the MY (16 bit address)
    Serial.print("MY1,");
    // set the Destination High to 0x0
    Serial.print("DH0,");
    // set the Destination Low (16 bit address)
    Serial.print("DL0,");
    // exit command mode (note that we use Serial.printLN here to issue a linefeed that completes the command sequence)
    Serial.println("CN");

    if (checkFor("OK", 1000)) {
      // if an OK was received then continue 
      //     debugPrintln("setup done");
      softSerial.println("setup done");
      success = true;
    }
    else {
      //     debugPrintln("setup failed");
      softSerial.println("setup failed");
      success = false;
    }
    ctr++;
  }
}




///////////////////////////////// UTILITY FUNCTIONS //////////////////////////////////////////
// this function checks for a specific response on the serial port
// it accepts a string to look for and a timeout in milliseconds
int checkFor(char* desiredResponse, int timeout) {
  int result = 0;
  int length = 40;
  char incomingResponse[41];
  memset(incomingResponse,0,length); // initialize all incomingResponse string positions to null
  char inByte = NULL;
  long startTime = millis();//makes the start time = to now
  char* ptr_incomingResponse = incomingResponse;
  // while we haven't timed out or gotten back the string that we are looking for
  while (millis() - startTime < timeout && strstr(incomingResponse,desiredResponse) == NULL ) { //strstr compares strings
    if (Serial.available() > 0) { // if there are any bytes waiting to be read
      inByte = Serial.read();  // read one byte
      if (incomingResponse > ptr_incomingResponse-length) { // if we haven't read in 80 characters yet
        *ptr_incomingResponse = inByte;  // put the byte into the current position in the string
        ptr_incomingResponse++;  // advance to the next position in the string
      }
      else {
        //move the last char to be next to last, and so forth until we reach the end of the array.
        for (int i = 0; i < length; i++) {
          incomingResponse[i] = incomingResponse[i+1];  
        }
        incomingResponse[length-1] = inByte;  // put the byte into the current position in the string
      }
    }
  }
  softSerial.println(incomingResponse);
  if (strstr(incomingResponse,desiredResponse) != NULL ) { // if the desired string is found
    result = 1;
  }
  else { 
    result = 0; 
  }
  return result;
}



// this function blinks the an LED light as many times as requested
void blinkLED(int targetPin, int numBlinks, int blinkRate) {
  for (int i=0; i<numBlinks; i++) {
    digitalWrite(targetPin, HIGH);   // sets the LED on
    delay(blinkRate);                     // waits for a blinkRate milliseconds
    digitalWrite(targetPin, LOW);    // sets the LED off
    delay(blinkRate);
  }
}

thank you rob for the excessive commenting