+ zoom_progress[ZOOM_EVENT_END] = 8;
+
+ /* parameters */
+ parameters.concurrent = 1;
+ parameters.timeout = 0;
+ parameters.repeat = 1;
+ strcpy(parameters.proxy, nullstring);
+ parameters.gnuplot = 0;
+ parameters.piggypack = 0;
+
+ /* progress initializing */
+ for (i = 0; i < 4096; i++){
+ parameters.progress[i] = 0;
+ }
+
+}
+
+struct time_type
+{
+ struct timeval now;
+ struct timeval then;
+ long sec;
+ long usec;
+};
+
+void time_init(struct time_type *ptime)
+{
+ gettimeofday(&(ptime->now), 0);
+ gettimeofday(&(ptime->then), 0);
+ ptime->sec = 0;
+ ptime->usec = 0;
+}
+
+void time_stamp(struct time_type *ptime)
+{
+ gettimeofday(&(ptime->now), 0);
+ ptime->sec = ptime->now.tv_sec - ptime->then.tv_sec;
+ ptime->usec = ptime->now.tv_usec - ptime->then.tv_usec;
+ if (ptime->usec < 0){
+ ptime->sec--;
+ ptime->usec += 1000000;
+ }
+}
+
+long time_sec(struct time_type *ptime)
+{
+ return ptime->sec;
+}
+
+long time_usec(struct time_type *ptime)
+{
+ return ptime->usec;
+}
+
+void print_option_error(void)
+{
+ fprintf(stderr, "zoom-benchmark: Call error\n");
+ fprintf(stderr, "zoom-benchmark -h host:port -q pqf-query "
+ "[-c no_concurrent (max 4096)] "
+ "[-n no_repeat] "
+ "[-b (piggypack)] "
+ "[-g (gnuplot outfile)] "
+ "[-p proxy] \n");
+ /* "[-t timeout] \n"); */
+ exit(1);
+}
+
+
+void read_params(int argc, char **argv, struct parameters_t *p_parameters){
+ char *arg;
+ int ret;
+ while ((ret = options("h:q:c:t:p:bgn:", argv, argc, &arg)) != -2)
+ {
+ switch (ret)
+ {
+ case 'h':
+ strcpy(p_parameters->host, arg);
+ break;
+ case 'q':
+ strcpy(p_parameters->query, arg);
+ break;
+ case 'p':
+ strcpy(p_parameters->proxy, arg);
+ break;
+ case 'c':
+ p_parameters->concurrent = atoi(arg);
+ break;
+#if 0
+ case 't':
+ p_parameters->timeout = atoi(arg);
+ break;
+#endif
+ case 'b':
+ p_parameters->piggypack = 1;
+ break;
+ case 'g':
+ p_parameters->gnuplot = 1;
+ break;
+ case 'n':
+ p_parameters->repeat = atoi(arg);
+ break;
+ case 0:
+ print_option_error();
+ break;
+ default:
+ print_option_error();
+ }
+ }
+
+ if(0){
+ printf("zoom-benchmark\n");
+ printf(" host: %s \n", p_parameters->host);
+ printf(" query: %s \n", p_parameters->query);
+ printf(" concurrent: %d \n", p_parameters->concurrent);
+ printf(" repeat: %d \n", p_parameters->repeat);
+#if 0
+ printf(" timeout: %d \n", p_parameters->timeout);
+#endif
+ printf(" proxy: %s \n", p_parameters->proxy);
+ printf(" piggypack: %d \n\n", p_parameters->piggypack);
+ printf(" gnuplot: %d \n\n", p_parameters->gnuplot);
+ }
+
+ if (! strlen(p_parameters->host))
+ print_option_error();
+ if (! strlen(p_parameters->query))
+ print_option_error();
+ if (! (p_parameters->concurrent > 0))
+ print_option_error();
+ if (! (p_parameters->repeat > 0))
+ print_option_error();
+ if (! (p_parameters->timeout >= 0))
+ print_option_error();
+ if (! ( p_parameters->concurrent <= 4096))
+ print_option_error();
+}
+
+void print_table_header(void)
+{
+ if (parameters.gnuplot)
+ printf("#");
+ printf ("target\tsecond.usec\tprogress\tevent\teventname\t");
+ printf("error\terrorname\n");
+}
+
+
+int main(int argc, char **argv)
+{
+ struct time_type time;
+ ZOOM_connection *z;
+ ZOOM_resultset *r;
+ int *elc;
+ struct event_line_t *els;
+ ZOOM_options o;
+ int i;
+ int k;
+
+ init_statics();
+
+ read_params(argc, argv, ¶meters);
+
+ z = (ZOOM_connection *) xmalloc(sizeof(*z) * parameters.concurrent);
+ r = (ZOOM_resultset *) xmalloc(sizeof(*r) * parameters.concurrent);
+ elc = (int *) xmalloc(sizeof(*elc) * parameters.concurrent * parameters.repeat);
+ els = (struct event_line_t *) xmalloc(
+ sizeof(*els) * parameters.concurrent * parameters.repeat * 10);
+ o = ZOOM_options_create();