+#ifdef USE_PTHREADS
+static void *
+handle_screen(void *arg)
+{
+ DDATA ddata;
+ int ch;
+
+ memset(&ddata, 0, sizeof(ddata));
+ ddata.ditto = (DITTO *) arg;
+ ddata.source = ddata.ditto->which1;
+ ddata.ditto -= ddata.source; /* -> base of array */
+
+ for (;;) {
+ ch = read_screen(ddata.ditto->screen, &ddata);
+ if (ch == CTRL('D')) {
+ int later = (ddata.source ? ddata.source : -1);
+ int j;
+
+ for (j = ddata.ditto->length - 1; j > 0; --j) {
+ if (j != later) {
+ pthread_cancel(ddata.ditto[j].thread);
+ }
+ }
+ if (later > 0) {
+ pthread_cancel(ddata.ditto[later].thread);
+ }
+ break;
+ }
+ show_ditto(ddata.ditto, ddata.ditto->length, &ddata);
+ }
+ return NULL;
+}
+#endif
+