stdio.h defines BUFSIZ
[unix-history] / usr / src / usr.bin / window / tt.h
index 85480fb..f75ec69 100644 (file)
 /*
 /*
- *     @(#)tt.h        3.6 83/08/17
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Edward Wang at The University of California, Berkeley.
+ *
+ * %sccs.include.redist.c%
+ *
+ *     @(#)tt.h        3.27 (Berkeley) %G%
  */
 
  */
 
+/*
+ * Interface structure for the terminal drivers.
+ */
 struct tt {
 struct tt {
-       int (*tt_init)();
+               /* startup and cleanup */
+       int (*tt_start)();
        int (*tt_end)();
        int (*tt_end)();
-       int (*tt_setinsert)();
-       int (*tt_setmodes)();
+
+               /* terminal functions */
        int (*tt_move)();
        int (*tt_insline)();
        int (*tt_delline)();
        int (*tt_move)();
        int (*tt_insline)();
        int (*tt_delline)();
+       int (*tt_inschar)();
+       int (*tt_insspace)();
        int (*tt_delchar)();
        int (*tt_delchar)();
-       int (*tt_write)();
-       int (*tt_putc)();
-       int (*tt_blank)();
+       int (*tt_write)();              /* write a whole block */
+       int (*tt_putc)();               /* write one character */
        int (*tt_clreol)();
        int (*tt_clreos)();
        int (*tt_clear)();
        int (*tt_clreol)();
        int (*tt_clreos)();
        int (*tt_clear)();
-       int tt_nrow;
-       int tt_ncol;
-       char tt_availmodes;
+       int (*tt_scroll_down)();
+       int (*tt_scroll_up)();
+       int (*tt_setscroll)();          /* set scrolling region */
+       int (*tt_setmodes)();           /* set display modes */
+       int (*tt_set_token)();          /* define a token */
+       int (*tt_put_token)();          /* refer to a defined token */
+
+               /* internal variables */
+       char tt_modes;                  /* the current display modes */
+       char tt_nmodes;                 /* the new modes for next write */
+       char tt_insert;                 /* currently in insert mode */
+       int tt_row;                     /* cursor row */
+       int tt_col;                     /* cursor column */
+       int tt_scroll_top;              /* top of scrolling region */
+       int tt_scroll_bot;              /* bottom of scrolling region */
+
+               /* terminal info */
+       int tt_nrow;                    /* number of display rows */
+       int tt_ncol;                    /* number of display columns */
+       char tt_availmodes;             /* the display modes supported */
        char tt_wrap;                   /* has auto wrap around */
        char tt_wrap;                   /* has auto wrap around */
-       char *tt_frame;
-};
+       char tt_retain;                 /* can retain below (db flag) */
+       short tt_padc;                  /* the pad character */
+       int tt_ntoken;                  /* number of compression tokens */
+       int tt_token_min;               /* minimun token size */
+       int tt_token_max;               /* maximum token size */
+       int tt_set_token_cost;          /* cost in addition to string */
+       int tt_put_token_cost;          /* constant cost */
 
 
+               /* the frame characters */
+       short *tt_frame;
+
+               /* the output routine */
+       int (*tt_flush)();
+};
 struct tt tt;
 
 struct tt tt;
 
+/*
+ * tt_padc is used by the compression routine.
+ * It is a short to allow the driver to indicate that there is no padding.
+ */
+#define TT_PADC_NONE 0x100
+
+/*
+ * List of terminal drivers.
+ */
 struct tt_tab {
        char *tt_name;
        int tt_len;
        int (*tt_func)();
 };
 struct tt_tab {
        char *tt_name;
        int tt_len;
        int (*tt_func)();
 };
-
-struct tt_tab tt_tab[];
+extern struct tt_tab tt_tab[];
 
 /*
 
 /*
- * nicer interface to termcap routines
+ * Clean interface to termcap routines.
+ * Too may t's.
  */
 char tt_strings[1024];         /* string buffer */
 char *tt_strp;                 /* pointer for it */
 
  */
 char tt_strings[1024];         /* string buffer */
 char *tt_strp;                 /* pointer for it */
 
-int tt_pc();                   /* just putchar() */
-int tt_sc();                   /* *tt_strp++ = c */
-char *tt_xgetstr();            /* tgetstr() and expand delays */
+struct tt_str {
+       char *ts_str;
+       int ts_n;
+};
+
+struct tt_str *tttgetstr();
+struct tt_str *ttxgetstr();    /* tgetstr() and expand delays */
+
+int tttputc();
+#define tttputs(s, n)  tputs((s)->ts_str, (n), tttputc)
+#define ttxputs(s)     ttwrite((s)->ts_str, (s)->ts_n)
 
 
-#define tt_tgetstr(s)  tgetstr((s), &tt_strp)
-#define tt_tputs(s, n) tputs((s), (n), tt_pc)
+/*
+ * Buffered output without stdio.
+ * These variables have different meanings from the ww_ob* variables.
+ * But I'm too lazy to think up different names.
+ */
+char *tt_ob;
+char *tt_obp;
+char *tt_obe;
+#define ttputc(c)      (tt_obp < tt_obe ? (*tt_obp++ = (c)) \
+                               : ((*tt.tt_flush)(), *tt_obp++ = (c)))
+
+/*
+ * Convenience macros for the drivers
+ * They require char.h
+ */
+#define ttctrl(c)      ttputc(ctrl(c))
+#define ttesc(c)       (ttctrl('['), ttputc(c))