less -> more
[unix-history] / usr / src / usr.bin / window / tttermcap.c
index 4ebaacb..d16a903 100644 (file)
@@ -1,34 +1,91 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)tttermcap.c 3.1 83/08/17";
-#endif
+static char sccsid[] = "@(#)tttermcap.c        3.9 (Berkeley) %G%";
+#endif /* not lint */
 
 
-#include "ww.h"
 #include "tt.h"
 
 char *tgetstr();
 #include "tt.h"
 
 char *tgetstr();
+char *tgoto();
+char *malloc();
 
 
-tt_pc(c)
+tttputc(c)
 {
 {
-       putchar(c);
+       ttputc(c);
 }
 
 }
 
-tt_sc(c)
+ttxputc(c)
 {
        *tt_strp++ = c;
 }
 
 {
        *tt_strp++ = c;
 }
 
-char *
-tt_xgetstr(str)
-char *str;
+struct tt_str *
+tttgetstr(str)
+       char *str;
+{
+       register struct tt_str *s;
+
+       if ((str = tgetstr(str, &tt_strp)) == 0)
+               return 0;
+       if ((s = (struct tt_str *) malloc(sizeof *s)) == 0)
+               return 0;
+       s->ts_str = str;
+       s->ts_n = tt_strp - s->ts_str - 1;
+       return s;
+}
+
+struct tt_str *
+ttxgetstr(str)
+       char *str;
 {
 {
+       register struct tt_str *s;
        char buf[100];
        char *bufp = buf;
 
        char buf[100];
        char *bufp = buf;
 
-       str = tgetstr(str, &bufp);
-       if (str == 0)
+       if (tgetstr(str, &bufp) == 0)
+               return 0;
+       if ((s = (struct tt_str *) malloc(sizeof *s)) == 0)
                return 0;
                return 0;
-       str = tt_strp;
-       tputs(buf, 1, tt_sc);
-       tt_sc(0);
-       return str;
+       s->ts_str = tt_strp;
+       tputs(buf, 1, ttxputc);
+       s->ts_n = tt_strp - s->ts_str;
+       *tt_strp++ = 0;
+       return s;
+}
+
+tttgoto(s, col, row)
+       struct tt_str *s;
+{
+       register char *p = s->ts_str;
+
+       ttputs(tgoto(p, col, row));
+       for (p += s->ts_n; *--p == 0;)
+               ttputc(0);
+}
+
+ttstrcmp(a, b)
+       register struct tt_str *a, *b;
+{
+       int n, r;
+
+       if (r = bcmp(a->ts_str, b->ts_str,
+                       (n = a->ts_n - b->ts_n) < 0 ? a->ts_n : b->ts_n))
+               return r;
+       return n;
 }
 }