gfio: start of support for notebooked jobs

We split struct gui into a main window and per-client part,
having a separate style of layout for each.

This needs a lot of work still, but it gets the point across.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
diff --git a/client.c b/client.c
index 10dc53b..af1dba4 100644
--- a/client.c
+++ b/client.c
@@ -316,7 +316,7 @@
 	return fd;
 }
 
-static int fio_client_connect(struct fio_client *client)
+int fio_client_connect(struct fio_client *client)
 {
 	int fd;
 
@@ -338,6 +338,11 @@
 	return 0;
 }
 
+void fio_client_terminate(struct fio_client *client)
+{
+	fio_net_send_simple_cmd(client->fd, FIO_NET_CMD_QUIT, 0, NULL);
+}
+
 void fio_clients_terminate(void)
 {
 	struct flist_head *entry;
@@ -347,8 +352,7 @@
 
 	flist_for_each(entry, &client_list) {
 		client = flist_entry(entry, struct fio_client, list);
-
-		fio_net_send_simple_cmd(client->fd, FIO_NET_CMD_QUIT, 0, NULL);
+		fio_client_terminate(client);
 	}
 }
 
@@ -839,6 +843,9 @@
 	client->eta_in_flight = NULL;
 	flist_del_init(&client->eta_list);
 
+	if (client->ops->jobs_eta)
+		client->ops->jobs_eta(client, je);
+
 	fio_client_sum_jobs_eta(&eta->eta, je);
 	fio_client_dec_jobs_eta(eta, client->ops->eta);
 }