]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - test/railroad.c
ncurses 5.2
[ncurses.git] / test / railroad.c
index d3dc2eae80248fd9e1097afe82c1ffbe07fbefdf..90eac981941161d0a298f3b209e02fbe5d208026 100644 (file)
@@ -29,7 +29,7 @@
 /*
  * Author: Thomas E. Dickey <dickey@clark.net> 2000
  *
- * $Id: railroad.c,v 1.1 2000/01/15 02:41:27 tom Exp $
+ * $Id: railroad.c,v 1.4 2000/10/15 00:21:33 tom Exp $
  *
  * A simple demo of the termcap interface.
  */
 #include <ctype.h>
 #include <signal.h>
 
+static char *wipeit;
+static char *moveit;
+static int length;
+static int height;
+
 static char *finisC;
 static char *finisS;
 static char *finisU;
@@ -68,7 +73,7 @@ PutChar(int ch)
 {
     putchar(ch);
     fflush(stdout);
-    napms(50);                 /* not really termcap... */
+    napms(moveit ? 10 : 50);   /* not really termcap... */
 }
 
 static void
@@ -104,33 +109,54 @@ Underline(int flag)
 static void
 ShowSign(char *string)
 {
+    char *base = string;
     int ch, first, last;
 
+    if (moveit != 0) {
+       tputs(tgoto(moveit, 0, height - 1), 1, outc);
+       tputs(wipeit, 1, outc);
+    }
+
     while (*string != 0) {
        ch = *string;
-       last = ch;
-       if (isalpha(ch)) {
-           first = isupper(ch) ? 'A' : 'a';
-       } else if (isdigit(ch)) {
-           first = '0';
+       if (moveit != 0) {
+           for (first = length - 2; first >= (string - base); first--) {
+               if (first < length - 1) {
+                   tputs(tgoto(moveit, first + 1, height - 1), 1, outc);
+                   PutChar(' ');
+               }
+               tputs(tgoto(moveit, first, height - 1), 1, outc);
+               PutChar(ch);
+           }
        } else {
-           first = ch;
-       }
-       if (first < last) {
-           Underline(1);
-           while (first < last) {
-               PutChar(first);
-               Backup();
-               first++;
+           last = ch;
+           if (isalpha(ch)) {
+               first = isupper(ch) ? 'A' : 'a';
+           } else if (isdigit(ch)) {
+               first = '0';
+           } else {
+               first = ch;
+           }
+           if (first < last) {
+               Underline(1);
+               while (first < last) {
+                   PutChar(first);
+                   Backup();
+                   first++;
+               }
+               Underline(0);
            }
-           Underline(0);
        }
+       if (moveit != 0)
+           Backup();
        StandOut(1);
        PutChar(ch);
        StandOut(0);
        fflush(stdout);
        string++;
     }
+    if (moveit != 0)
+       tputs(wipeit, 1, outc);
     putchar('\n');
 }
 
@@ -153,7 +179,7 @@ onsig(int n GCC_UNUSED)
 static void
 railroad(char **args)
 {
-    char *name = getenv("TERM");
+    NCURSES_CONST char *name = getenv("TERM");
     char buffer[1024];
     char area[1024], *ap = area;
     int j;
@@ -161,6 +187,22 @@ railroad(char **args)
     if (name == 0)
        name = "dumb";
     if (tgetent(buffer, name)) {
+
+       wipeit = tgetstr("ce", &ap);
+       height = tgetnum("li");
+       length = tgetnum("co");
+       moveit = tgetstr("cm", &ap);
+
+       if (wipeit == 0
+           || moveit == 0
+           || height <= 0
+           || length <= 0) {
+           wipeit = 0;
+           moveit = 0;
+           height = 0;
+           length = 0;
+       }
+
        startS = tgetstr("so", &ap);
        finisS = tgetstr("se", &ap);
 
@@ -186,9 +228,7 @@ railroad(char **args)
 }
 
 int
-main(
-    int argc,
-    char *argv[])
+main(int argc, char *argv[])
 {
     if (argc > 1) {
        railroad(argv + 1);