void NameParser::parse (const std::string& imagename, size_t max_num_sequences)
    {
      specification = imagename;
      if (Path::is_dir (imagename)) {
        array.resize (1);
        array[0].set_str (imagename);
        return;
      }

      folder_name = Path::dirname (specification);


      try {
        std::string::size_type pos;
        std::string basename = Path::basename (specification);
        size_t num = 0;

        while ( (pos = basename.find_last_of (']')) < std::string::npos && num < max_num_sequences) {
          insert_str (basename.substr (pos+1));
          basename = basename.substr (0, pos);
          if ( (pos = basename.find_last_of ('[')) == std::string::npos)
            throw Exception ("malformed image sequence specifier for image \"" + specification + "\"");

          insert_seq (basename.substr (pos+1));
          num++;
          basename = basename.substr (0, pos);
        }

        insert_str (basename);


        for (size_t i = 0; i < array.size(); i++)
          if (array[i].is_sequence())
            if (array[i].sequence().size())
              for (size_t n = 0; n < array[i].sequence().size()-1; n++)
                for (size_t m = n+1; m < array[i].sequence().size(); m++)
                  if (array[i].sequence() [n] == array[i].sequence() [m])
                    throw Exception ("malformed image sequence specifier for image \""
                        + specification + "\" (duplicate indices)");
      }
      catch (...) {
        array.resize (1);
        array[0].set_str (imagename);
        throw;
      }
    }
void print_statistics(int socktype, struct timeval start, struct timeval end, int total_bytes, int io) {
	int i;
	struct s_time_record *record;
	struct timeval tdiff, total_delay, avg_delay, sqrsum;// sdiv, tmp;
	int npackets = 0;
	double t_delay, t_avg, t_total;

	record = time_record_head.next;

	int last_seq = 1;
	struct s_seqlist *seqlist;

	total_delay.tv_sec = 0;
	total_delay.tv_usec = 0;
	sqrsum.tv_sec = 0;
	sqrsum.tv_usec = 0;

	while(record != NULL) {

		/*
		printf("%i ", record->seq);
		if(seqformat++ == 10) {
			printf("\n");
			seqformat = 0;
		}*/

		if(socktype == SOCK_DGRAM) {

			/* save potentially lost sequence numbers */
			for(i = last_seq + 1; i < record->seq; i++)
				insert_seq(i);

			/* saved sequence number found. Delete it from lost-seq-number list */
			if(last_seq > record->seq)
				delete_seq(record->seq);

			last_seq = record->seq;
		}



		tvsub(&tdiff, &(record->my_time), &(record->his_time)); /* delay */
		tvadd(&total_delay, &total_delay, &tdiff);	/* sum delay */


		npackets++;
		record = record->next;
	}

	avg_delay.tv_sec = total_delay.tv_sec / npackets;
	avg_delay.tv_usec = total_delay.tv_usec / npackets;

	/*
	//standard diviation:
	record = time_record_head.next;
	while(record != NULL) {
		tvsub(&tdiff, &(record->my_time), &(record->his_time)); //delay
		tvsub(&tmp, &tdiff, &avg_delay); // x1 - mü
		tvsqr(&tmp); // (x - mü)^2

		tvadd(&sdiv, &tmp);


		record = record->next;
	}*/

	tvsub(&tdiff, &end, &start);
	t_avg = tvtosec(&avg_delay);
	t_total = tvtosec(&tdiff);
	t_delay = tvtosec(&total_delay);

	printf("\n\nprinting statistics:\n" \
	       "--------------------------\n");
	printf("%i bytes received in %.2f seconds\n", total_bytes, t_total);
	printf("I/O calls: %i\n", io);
	printf("packets received: %i\n", npackets);
	printf("total delay: %.2f seconds\n", t_delay);
	printf("average delay: %f seconds\n", t_avg);

	/* printf("standard diviation: %ld seconds, %ld microseconds\n", sdiv.tv_sec / npackets,
							     sdiv.tv_usec / npackets); */



	/* print lost packets (only UDP) */
	if(socktype == SOCK_DGRAM) {

		seqlist = seqlist_head.next;
		if(seqlist == NULL)
			printf("No packet loss\n");
		else {
			int format = 0;
			int packetloss = 0;
			printf("\nPackets with the following sequence numbers are lost:\n\n");
			while(seqlist != NULL) {
				packetloss++;
				printf("%i ", seqlist->val);
				seqlist = seqlist->next;
				if(format++ == 10) {
					printf("\n");
					format = 0;
				}
			}
			printf("\n\nNumber of packets lost: %i\n", packetloss);

		}
	}
	printf("\n\n");

}