1 04/15/88  "TWO" EXAMPLE
  2 
  3 /* This is example two.c and it can not work on Multics. */
  4 
  5 #include <curses.h>
  6 #include  <signal.h>
  7 
  8 struct screen *me, *you;
  9 struct screen *set_term();
 10 
 11 FILE *fd, *fdyou;
 12 char linebuf[512];
 13 
 14 main(argc, argv)
 15 char **argv;
 16 
 17 
 18 {
 19           int done();
 20           int c;
 21 
 22           if (argc !=4) {
 23              fprintf (stderr,
 24                     "Usage:two othertty otherttytype inputfile0\n");
 25              exit(1);
 26           }
 27 
 28           fd = fopen(argv[3], "r");
 29           fdyou = fopen(argv[1], "w+");
 30           signal(SIGINT, done); /* die gracefully */
 31 
 32 
 33           me= newterm(getenv("TERM"),stdout); /* initialize my tty */
 34           you = newterm(argv[2],fdyou); /* Initialize his terminal */
 35 
 36           set_term(me);                 /* Set modes for my terminal */
 37           noecho();                     /* turn off tty echo */
 38           cbreak();                     /* enter cbreak mode */
 39           nonl();                       /* Allow linefeed */
 40           nodelay(stdscr,TRUE);         /* No hang on input */
 41 
 42           set_term(you);                /* Set modes for other terminal */
 43           noecho();
 44           cbreak();
 45           nonl();
 46           nodelay(stdscr,TRUE);
 47 
 48 
 49           /* Dump first screen full on my terminal */
 50           dump_page(me);
 51           /* Dump second screen full on his terminal */
 52           dump_page(you);
 53 
 54           for(;;) {           /* for each screen full */
 55                     set_term(me);
 56                     c = getch();
 57                     if (c== 'q')         /* wait for user to read it */
 58                               done();
 59                     if (c== ' ')
 60                               dump_page(me);
 61 
 62 
 63                     set_term(you);
 64                     c = getch();
 65                     if (c ==  'q')      /* wait for user to read it */
 66                               done();
 67                     if (c == ' ');
 68                               dump_page(you);
 69                     sleep(1);
 70           }
 71 }
 72 
 73 dump_page(term)
 74 struct screen *term;
 75 {
 76           int line;
 77 
 78 
 79           set_term(term);
 80           move(0,0);
 81           for (line=0; line <LINES-1; line ++) {
 82                     if (fgets(linebuf, sizeof linebuf, fd) == NULL) {
 83                               clrtobot();
 84                               done();
 85                     }
 86                     mvprintw(line,0, "%s", linebuf);
 87           }
 88           standout();
 89           mvprintw(LINES-1,0, "--More--");
 90           standend();
 91           refresh();                    /* sync screen */
 92 }
 93 
 94 
 95 /*
 96  * Clean up and exit
 97 */
 98 done()
 99 {
100           /* Clean up first terminal */
101           set_term(you);
102           move(LINES-1,0);    /* to lower left corner */
103           clrtoeol();                   /* clear bottom line */
104           refresh();                    /* flush out everything */
105           endwin();           /* CURSES cleanup */
106 
107 
108           /* Clean up second terminal */
109           set_term(me);
110           move(LINES-1,0); /* to lower left corner */
111           clrtoeol();                   /* clear bottom line */
112           refresh();                    /* flush out everything */
113           endwin();           /* CURSES cleanup */
114 
115           exit(0);
116 }